![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
достучатся до свойств
ДжекиМайер © (2007-03-08 01:17:00)создал кучу кнопок динамическим методом
for Pole:=1 to 10*10 do begin
with TButton.Create(self) do begin
Name := 'B' + IntToStr(Pole);
Tag := Pole-1;
....
обработчик для всех один
не могу определить какая кнопка нажата
(узнать имя нажатой кнопки или ее Tag)
и изменить ее свойства, так хочу
TButton.Name ('B99'):='o';
TButton.Name ('B98'):='х';
Германн (2007-03-11 01:46:00) [1]
> f2d © (10.03.07 22:07) [14]
>
>
А свою ветку со своим вопросом завести влом? Зачем влезать в чужую?
f2d (2007-03-10 22:07:00) [2]
> Один обработчик может обслуживать сколько угодно любых событий
> любых компонентов - лишь бы у этих событий был одинаковый
> список параметров.Поэтому BtnProc можно прицепить к любым
> событиям, имеющим тип TNotifyEvent. Только надо сделать
> его методом класса.
да да, это я знаю... забыл добавить - реализация BtnProc состоит в следующем: должен загружаться скрипт, соответствующий произошедшему событию. то есть если произошло событие onClick то по TComponent(Sender).Name мы определим объект, а по какому-то ещё параметру, или свойству Sender'a определим событие, которое произошло, и в последствии должен загрузится и выполнится скрипт с именем TComponent(Sender).Name+'.'+вызвавшее событие+'.pss'
например при клике на Button1 должно вызваться Button1.OnClick.pss
не могу понять как определить в следствии какого события была вызвана процедура
trubin (2007-03-10 21:34:00) [3]
> ого незнал что их туда можно засунуть
> и удобно работать - спасибо!
А если использовать TObjectList, то еще удобнее ;)
ДжекиМайер (2007-03-10 21:17:00) [4]>var B: array [1..10*10] of TButton;
ого незнал что их туда можно засунуть
и удобно работать - спасибо!
Sam Stone (2007-03-10 21:05:00) [5]FindComponent уже отменили?
Юрий Зотов (2007-03-10 16:45:00) [6]Один обработчик может обслуживать сколько угодно любых событий любых компонентов - лишь бы у этих событий был одинаковый список параметров.
Поэтому BtnProc можно прицепить к любым событиям, имеющим тип TNotifyEvent. Только надо сделать его методом класса.
f2d (2007-03-10 16:32:00) [7]есть:
procedure BtnProc(Sender:TObject);
begin
....
end;
procedure form1.xxx
var
b:TButton;
begin
b:=TButton.Create;
b.Parent:=self;
b.onClick:=BtnProc;
end;
можно ли как-нибудь абстрагировать метод BtnProc чтобы он работал не только для события onClick, но и для других событий кнопки?
то есть на нужное нам событие мы назначаем BtnProc, а далее, при выполнении процедуры BtnProc она по параметрам, или каким-либо другим образом определяет что за событие её вызвало и производит соответствующие действия.
спасибо
RASkov (2007-03-10 15:52:00) [8]> [7] ДжекиМайер (10.03.07 15:15)
Попробуй кнопки в массиве хранить:
var B: array [1..10*10] of TButton;
for Pole:=1 to High(B) do begin // clear pole
B[Pole].caption:=' ';
end;
for Pole:=1 to High(B) do begin // FREE GATES
B[Pole].free;
end;
ДжекиМайер (2007-03-10 15:15:00) [9]воспользовался методом [5] а при создании в таг записываю
высоту и ширину в слово
а как перебирать их ? похоже без этого не обойтись
даю имя на выходе хэндл
var
B:TButton;
for Pole:=1 to 10*10 do begin // clear pole
B:=TButton.Name('B' + IntToStr(Pole)); // ??????????
B.caption:=' ';
end;
var
B:TButton;
for Pole:=1 to 10*10 do begin // FREE GATES
B:=TButton.Name('B' + IntToStr(Pole)); // ??????????
B.free;
end;
Юрий Зотов (2007-03-09 15:00:00) [10]> ДжекиМайер (09.03.07 14:45) [4]
Во-первых, хэндл у TButton все же есть. Во-вторых, он, как и имя, в данном случае не нужен, потому что ссылка на объект уже и так есть - Sender. Ее надо только привести к нужному классу: TButton(Sender). А если нужно определить позицию кнопки в массиве, то ее при создании кнопки можно записывать в свойство Tag (например, строку - в старшее слово, столбец - в младшее).
Ega23 (2007-03-09 14:53:00) [11]
procedure BBBClick(Sender: TObject);
var
btn : TButton;
begin
if not (Sender is TButton) then Exit;
btn := TButton(Sender);
и дальше - чего надо, то и делаешь. Но это, ИМХО, глупо, в данном обработчике на тэги или имена switch писать.
end;
ДжекиМайер (2007-03-09 14:45:00) [12]хэндл же теряем, это не запись
b1,b2:TButton;
b1:=TButton.Create(self);
b2:=TButton.Create(self);
а запись
for Pole:=1 to 2 do begin
with TButton.Create(self) do begin
Name := 'B' + IntToStr(Pole);
end;
тоесть хэндла нет,а к обьектам можно достучатся с помощью имен
RASkov (2007-03-09 09:16:00) [13]> [2] ДжекиМайер (09.03.07 09:12)
Зачем тебе вообще имена?
ДжекиМайер (2007-03-09 09:12:00) [14]вы имеете виду так обращатся ?
for Pole:=1 to 10*10 do begin
with TButton.Create(self) do begin
Name := 'B' + IntToStr(Pole);
Tag := Pole-1;
onClick:=BBBClick;
procedure BBBClick(Sender: TObject);
begin
if TButton(Sender).Name='B1' then ....
TButton(Sender).caption('x');
ссори,на делфи проверится не раньше вечера
Германн (2007-03-08 01:42:00) [15]
> обработчик для всех один
> не могу определить какая кнопка нажата
> (узнать имя нажатой кнопки или ее Tag)
>
procedure XXXOnClick(Sender: TObject);
TButton(Sender).Name
TButtpon(Sender).Tag