Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 541

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
Есть на форме 500 Label. по Click на любой Label хочу, чтобы поменял цвет. как это можно сделать одной процедурой, чтобы на OnClick каждого Label не прописывать? Т.е. при Click на i-тый Label именно к нему примелялась эта процедура. заранее спасибо

Нахушев Азамат Владимирович Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Нахушев Азамат Владимирович (статус: 1-ый класс)
Вопрос отправлен: 2 мая 2007, 10:02
Состояние вопроса: решён, ответов: 4.

Ответ #1. Отвечает эксперт: ANBsoft

В обработчик пишем:
TLabel(Sender).Font.Color:=clRed;
Все просто.
Можно еще находить по имени компонента через FindComponent, но это дольше.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 2 мая 2007, 11:26
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Николай Рубан

Советую Вам при создании формы заполнить для каждого Label свойства Tag, в которое поместить число соответствующее его номеру. Т.е. для Label1 - Tag=1, Label2 - Tag=2 ... и т.д.

Также нужно создать "глобальную" процедуру,которая будет для всех Label-ов.
Привязать эту процедуру к каждому Label и заполнить свойство Tag можно так:

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 5 do
with TLabel(FindComponent(format('Label%d',[I]))) do
begin
Tag:=i;
OnClick:=AllClick;
end;
end;

Весь код смотрите в приложении.
Good Luck!!!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Label1: TLabel;
  13. Label2: TLabel;
  14. Label3: TLabel;
  15. Label4: TLabel;
  16. Label5: TLabel;
  17. procedure FormCreate(Sender: TObject);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. procedure AllClick(Sender: TObject);
  23. end;
  24.  
  25. var
  26. Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. procedure TForm1.AllClick(Sender: TObject);
  33. begin
  34. case TLabel(Sender).Tag mod 3 of
  35. 0: TLabel(Sender).Color:=clRed;
  36. 1: TLabel(Sender).Color:=clBlue;
  37. 2: TLabel(Sender).Color:=clYellow;
  38. end;
  39. end;
  40.  
  41. procedure TForm1.FormCreate(Sender: TObject);
  42. var i:integer;
  43. begin
  44. for i:=1 to 5 do
  45. with TLabel(FindComponent(format('Label%d',[i]))) do
  46. begin
  47. Tag:=i;
  48. OnClick:=AllClick;
  49. end;
  50. end;
  51.  
  52. end.
  53.  


Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 2 мая 2007, 11:51
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович

Здравствуйте, Нахушев Азамат Владимирович!
Выделите на форме все 500 Label, в инспекторе объектов на странице "Events", дважды кликните на пустом поле против OnClick, получили единый обработчик для всех Label, см. приложение.
Удачи!

Приложение:
  1. procedure TForm1.Label1Click(Sender: TObject);
  2. begin
  3. (Sender as TLabel).Color:=clRed;
  4. end;
  5.  
  6.  
  7.  
  8. procedure TForm1.Label1Click(Sender: TObject);
  9. begin
  10. with Sender as TLabel do
  11. begin
  12. Color:=clRed;
  13. ......
  14. end;
  15. end;
  16.  
  17.  
  18.  
  19.  


Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 3 мая 2007, 09:42
Оценка за ответ: 5

Ответ #4. Отвечает эксперт: Дима Гусаков

Здравствуйте, Нахушев Азамат Владимирович!
Пишем общую процедуру события OnClick и присваиваем ее каждому Label на форме

Приложение:
  1. var
  2. i: Integer;
  3.  
  4. procedure TForm1.LabelClick(Sender: TObject);
  5. begin
  6. For i:=0 to ComponentCount-1 do
  7. if (Components[i] is TLabel) then
  8.  
  9.  
  10.  
  11. end;
  12.  
  13. procedure TForm1.FormCreate(Sender: TObject);
  14. begin
  15. For i:=0 to ComponentCount-1 do
  16. if (Components[i] is TLabel) then
  17.  
  18. end;


Ответ отправил: Дима Гусаков (статус: 2-ой класс)
Время отправки: 3 мая 2007, 19:47
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:17: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.