Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2015, 21:38   #1
iarugp
 
Регистрация: 07.12.2011
Сообщений: 3
По умолчанию

Здравствуйте уважаемые программисты. Всех с наступившим Новым годом ! Вопрос такой. Есть, к примеру, 5 компонентов Panel расположенных на форме (Form), со свойствами Align := alTop. На событие Panel.OnClick панель должна окраситься в синий цвет, остальные в цвет по умолчанию, и так с любой панелью. Я так понимаю тут не обойтись без массива панелей, но как это реализовать ума не приложу. Спасибо заранее!
Код:
procedure TForm1.Panel1Click(Sender: TObject);
begin
 (Sender as TPanel).Color := clBlue;
end;
в данном случае она закрасится в синий цвет, но не станет серым при нажатии на другую.

Последний раз редактировалось Stilet; 03.01.2015 в 22:33.
iarugp вне форума Ответить с цитированием
Старый 03.01.2015, 22:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Массив фтопку.
Опиши переменку p:TPanel;
И
Код:
procedure TForm1.Panel1Click(Sender: TObject);
begin
 if p<>nil then p.Color:=clWindow
 (Sender as TPanel).Color := clBlue;
 p:=(Sender as TPanel);
end;
И все. Переменка будет запоминать предидущую кликнутую панель и менять ей цвет на стандартный.

P.S. Не забудь p:=nil при создании формы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2015, 23:10   #3
iarugp
 
Регистрация: 07.12.2011
Сообщений: 3
По умолчанию

да, работает. Спасибо большое. Я уж тут перебпробывал различные варианты. Вот, например
Код:
const
  PanelCount = 3;
var
  Panels: array[1..PanelCount] of TPanel;
procedure TForm1.pnl1Click(Sender: TObject);
var i: Integer;
begin
for i:=1 to PanelCount do
 begin
  Panels[i].Color:=clBtnFace;
 end;
(Sender as TPanel).Color := clBlue;

end;

procedure TForm1.FormCreate(Sender: TObject);
var i, j: Integer;
begin
 j := 1;
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TPanel then
     begin
      Panels[j] := TPanel(Components[i]);
      inc(j);
     end;
end;
procedure TForm1.pnl2Click(Sender: TObject);
begin
 pnl1Click(Sender);
end;

procedure TForm1.pnl3Click(Sender: TObject);
begin
 pnl1Click(Sender);
end;

end.
Тоже, в принципе, работает

Последний раз редактировалось Stilet; 03.01.2015 в 23:13.
iarugp вне форума Ответить с цитированием
Старый 03.01.2015, 23:15   #4
iarugp
 
Регистрация: 07.12.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Массив фтопку.
Опиши переменку p:TPanel;
И
Код:
procedure TForm1.Panel1Click(Sender: TObject);
begin
 if p<>nil then p.Color:=clWindow
 (Sender as TPanel).Color := clBlue;
 p:=(Sender as TPanel);
end;
И все. Переменка будет запоминать предидущую кликнутую панель и менять ей цвет на стандартный.

P.S. Не забудь p:=nil при создании формы.
Забыл поставить точку с запятой после clWindow. Спасибо. Оказалось все намного проще
iarugp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рамки у панелей Dima DDM Общие вопросы Delphi 4 01.07.2011 12:01
Движение панелей Muniz Компоненты Delphi 6 30.12.2009 16:06
random расположение панелей Aндрей Помощь студентам 4 23.09.2009 20:03
Правильное выравнивание панелей amigo555 Общие вопросы Delphi 1 04.05.2009 12:44
Список панелей Кронос Общие вопросы Delphi 1 23.08.2007 16:27