Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Вниздостучатся до свойств Найти похожие ветки
← →
ДжекиМайер (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c