|
Вопрос # 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!!!
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure AllClick(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.AllClick(Sender: TObject);
- begin
- case TLabel(Sender).Tag mod 3 of
- 0: TLabel(Sender).Color:=clRed;
- 1: TLabel(Sender).Color:=clBlue;
- 2: TLabel(Sender).Color:=clYellow;
- end;
- end;
-
- 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;
-
- end.
-
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 2 мая 2007, 11:51
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович
Здравствуйте, Нахушев Азамат Владимирович!
Выделите на форме все 500 Label, в инспекторе объектов на странице "Events", дважды кликните на пустом поле против OnClick, получили единый обработчик для всех Label, см. приложение.
Удачи!
Приложение: Переключить в обычный режим- procedure TForm1.Label1Click(Sender: TObject);
- begin
- (Sender as TLabel).Color:=clRed;
- end;
-
-
-
- procedure TForm1.Label1Click(Sender: TObject);
- begin
- with Sender as TLabel do
- begin
- Color:=clRed;
- ......
- end;
- end;
-
-
-
-
Ответ #4. Отвечает эксперт: Дима Гусаков
Здравствуйте, Нахушев Азамат Владимирович!
Пишем общую процедуру события OnClick и присваиваем ее каждому Label на форме
Приложение: Переключить в обычный режим- var
- i: Integer;
-
- procedure TForm1.LabelClick(Sender: TObject);
- begin
- For i:=0 to ComponentCount-1 do
- if (Components[i] is TLabel) then
-
-
-
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- For i:=0 to ComponentCount-1 do
- if (Components[i] is TLabel) then
-
- end;
 |
Ответ отправил: Дима Гусаков (статус: 2-ой класс)
Время отправки: 3 мая 2007, 19:47
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:17: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|