Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизВопрос: Как привязать процедуру (click) к созданной кнопке? Найти похожие ветки
← →
vegarulez © (2007-07-20 07:05) [0]Привет всем мастерам.
У меня вот такой вопрос, яс оздаю кнопки на форме с помошью вот такого кода:
var b2:TButton;
begin
b2:=TButton.Create(Form1);
b2.Left:=strtoint(Edit6.Text);
b2.Top:=strtoint(Edit7.Text);
b2.Width:=75;
b2.Height:=25;
b2.Caption:=Edit5.Text;
b2.Visible:=true;
b2.Parent:=form1;
end;
Так вот у меня вопрос, как мне сделать её (созданную кнопку) функциональной, ну т.е. как к ней привязать какую-то процедуру типа ButtonXClick...
Тока чтобы такая процедура создавалась динамически, допустим создал кнопку XXX привязал на неё процедурку создал кнопку YYY - тоже привязал, но уже допустим с другими действиями...
← →
vasIZmax © (2007-07-20 07:17) [1]procedure TForm1.onClickbutton(Sender: TObject);
begin
showmessage("bla-bla");
end;
.....
к себе вставляешь в "создание":
b2.OnClick:=onclickButton;
....
← →
vegarulez © (2007-07-20 07:30) [2]Спасибки.
← →
vegarulez © (2007-07-23 10:32) [3]Тут ещё вопрос появился...
я делаю кнопочки динамически. Всё вери вел. Процедурку тоже вызваю.
Но вот вопрос... как в процедурке узнать кнопочка с каким именем и кэпшином её вызвала?
← →
MBo © (2007-07-23 10:35) [4]Sender
← →
vegarulez © (2007-07-23 10:40) [5]А как к нему правильно обратится?
s:string;
...
s:=Sender.Name
так не получается...
← →
MBo © (2007-07-23 10:45) [6]приведи к нужному классу (предварительно проверив класс is)
например,
if Sender is TButton then
...Tbutton(Sender).Name....
← →
umbra © (2007-07-23 10:46) [7]
s:= (Sender as TComponent).Name;
или конкретно для TButtons:=(Sender as TButton).Name
← →
vegarulez © (2007-07-23 19:54) [8]ахха псп...
в принципе с дестроем так и делал:
...
var
i,j,x,z: integer;
s:string;
...
begin
for i:=0 to ControlCount-1 do
if Controls[i] is TPanel then
Begin
//s:=Controls[i].Name;
for j:=0 to ((Controls[i] as TPanel).ControlCount-1) do
begin
if ((Controls[i] as TPanel).Controls[j] as TPanel).Name="P_"+FormMain.a then
begin
//s:=(Controls[i] as TPanel).Controls[j].Name;
z:=(((Controls[i] as TPanel).Controls[j] as TPanel).ControlCount-1);
for x:=0 to z do
Begin
//s:=inttostr(z);
if ((Controls[i] as TPanel).Controls[j] as TPanel).Controls[z-x] is TButton then
BEGIN
s:=((Controls[i] as TPanel).Controls[j] as TPanel).Controls[z-x].Name;
(((Controls[i] as TPanel).Controls[j] as TPanel).Controls[z-x] as TButton).Destroy;
//s:=(Controls[i] as TPanel).Controls[j].Name;
END;
End;
FormGoodies.Close;
FormMain.Show;
end;
end;
End;
end;
просто не знал, что с сендером также надо...
псп!
← →
StriderMan © (2007-07-23 20:07) [9]
> vegarulez © (23.07.07 19:54) [8]
кошмар какой! в этом коде разве можно что-то понять???
а это что за ужас?if ((Controls[i] as TPanel).Controls[j] as TPanel).Name="P_"+FormMain.a
а че такое FormMain? глобальная переменная, полагаю...
никогда не вызывайте.Destroy
. вызывайте.Free,
об этом даже в хэлпе написано.
← →
vegarulez © (2007-07-23 20:17) [10]Попутно тогда вопрос про сендер...
как узнать допустим я баттоном вызываю другую форму, как проверить, что у меня вызов следующей формы произошёл баттоном именно этой формы....
то бишь по сендеру баттона проверить форму на которой лежит этот баттон....
← →
app © (2007-07-23 20:19) [11]> vegarulez (23.07.2007 20:17:10) [10]
Не в подворотне, следи за языком
← →
vegarulez © (2007-07-23 20:28) [12]StriderMan © (23.07.07 20:07) [9]
type
TFormMain = class(TForm)
...
public
a: string;
...
((Controls[i] as TPanel).Controls[j] as TPanel) - в Tpanel`e есть ещё Tpanel`ы в которых есть кнопки, которые при загрузки формы создаются, именно в этом вложенном Тпанеле, т.к. в первом много вложенных в зависимости от надобности загружается тот или иной...
при выходе - очишаю этот вложенный панел от кнопок созданных мною... чтобы до них добраться проверяю вложенный панел, который должен называться как "P_"+FormMain.a на наличие оных... и убиваю...
>> никогда не вызывайте.Destroy. вызывайте .Free, об этом даже в хэлпе написано.
Ахха попробую счас... псп...
А почему Destroy низя? С памятью как то криво работает? не очищает? или что?
[Если их не убить, то при следующей загрузке панела создадутся такие же... повторно поверх старых... т.к. их создание динамически привязано к инфе из бд...пропала инфа - не создалась кнопка]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c