Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1173437359
Polzun
2007-03-09 13:49
2007.04.01
Как задать управляющие коды принтера?


15-1173571401
oorf
2007-03-11 03:03
2007.04.01
Firebird


1-1170236837
SH@RK
2007-01-31 12:47
2007.04.01
Динамические массивы vs Статические массивы


15-1173095251
Calibr
2007-03-05 14:47
2007.04.01
Frame на веб-странице


15-1172177924
ДжекиМайер
2007-02-22 23:58
2007.04.01
АвтоРаспаковка *.nws чем ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский