Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

достучатся до свойств   Найти похожие ветки 

 
ДжекиМайер   (2007-03-08 01:17) [0]

создал кучу кнопок динамическим методом

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-08 01:42) [1]


> обработчик для всех один
> не могу определить какая кнопка нажата
> (узнать имя нажатой кнопки или ее Tag)
>

procedure XXXOnClick(Sender: TObject);
TButton(Sender).Name
TButtpon(Sender).Tag


 
ДжекиМайер   (2007-03-09 09:12) [2]

вы имеете виду так обращатся ?

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");



ссори,на  делфи проверится не раньше вечера


 
RASkov   (2007-03-09 09:16) [3]

> [2] ДжекиМайер   (09.03.07 09:12)

Зачем тебе вообще имена?


 
ДжекиМайер   (2007-03-09 14:45) [4]

хэндл же теряем, это не запись

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;


тоесть хэндла нет, а к обьектам можно достучатся с помощью  имен


 
Ega23 ©   (2007-03-09 14:53) [5]


procedure BBBClick(Sender: TObject);
var
btn : TButton;
begin
 if not (Sender is TButton) then Exit;
 btn := TButton(Sender);

 и дальше - чего надо, то и делаешь. Но это, ИМХО, глупо, в данном обработчике на тэги или имена switch писать.
end;


 
Юрий Зотов ©   (2007-03-09 15:00) [6]

> ДжекиМайер   (09.03.07 14:45) [4]

Во-первых, хэндл у TButton все же есть. Во-вторых, он, как и имя, в данном случае не нужен, потому что ссылка на объект уже и так есть - Sender. Ее надо только привести к нужному классу: TButton(Sender). А если нужно определить позицию кнопки в массиве, то ее при создании кнопки можно записывать в свойство Tag (например, строку - в старшее слово, столбец - в младшее).


 
ДжекиМайер   (2007-03-10 15:15) [7]

воспользовался методом [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;


 
RASkov   (2007-03-10 15:52) [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;


 
f2d ©   (2007-03-10 16:32) [9]

есть:


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 она по параметрам, или каким-либо другим образом определяет что за событие её вызвало и производит соответствующие действия.
спасибо


 
Юрий Зотов ©   (2007-03-10 16:45) [10]

Один обработчик может обслуживать сколько угодно любых событий любых компонентов - лишь бы у этих событий был одинаковый список параметров.

Поэтому BtnProc можно прицепить к любым событиям, имеющим тип TNotifyEvent. Только надо сделать его методом класса.


 
Sam Stone ©   (2007-03-10 21:05) [11]

FindComponent уже отменили?


 
ДжекиМайер   (2007-03-10 21:17) [12]

>var B: array [1..10*10] of TButton;

ого незнал что их туда можно засунуть
и удобно работать - спасибо!


 
trubin ©   (2007-03-10 21:34) [13]


> ого незнал что их туда можно засунуть
> и удобно работать - спасибо!

А если использовать TObjectList, то еще удобнее ;)


 
f2d ©   (2007-03-10 22:07) [14]


> Один обработчик может обслуживать сколько угодно любых событий
> любых компонентов - лишь бы у этих событий был одинаковый
> список параметров.Поэтому BtnProc можно прицепить к любым
> событиям, имеющим тип TNotifyEvent. Только надо сделать
> его методом класса.

да да, это я знаю... забыл добавить - реализация BtnProc состоит в следующем: должен загружаться скрипт, соответствующий произошедшему событию. то есть если произошло событие onClick то по TComponent(Sender).Name мы определим объект, а по какому-то ещё параметру, или свойству Sender"a определим событие, которое произошло, и в последствии должен загрузится и выполнится скрипт с именем TComponent(Sender).Name+"."+вызвавшее событие+".pss"
например при клике на Button1 должно вызваться Button1.OnClick.pss
не могу понять как определить в следствии какого события была вызвана процедура


 
Германн ©   (2007-03-11 01:46) [15]


> f2d ©   (10.03.07 22:07) [14]
>
>

А свою ветку со своим вопросом завести влом? Зачем влезать в чужую?



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.079 c
15-1173106393
Sklif
2007-03-05 17:53
2007.04.01
Помогите решить задачку


2-1173007474
wolchonok29
2007-03-04 14:24
2007.04.01
Запуск приложения в сети


15-1173186772
Gorlum
2007-03-06 16:12
2007.04.01
Помогите, плз, найти электронный учебник...


15-1173093289
xayam
2007-03-05 14:14
2007.04.01
Сколько же багов в BDS 2006 ?


2-1173021469
Nija
2007-03-04 18:17
2007.04.01
Сигнал в "мозг"