Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

достучатся до свойств


ДжекиМайер ©   (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


Наверх

Титульная страница Поиск, карта сайта Написать письмо