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

Вниз

Вопрос: Как привязать процедуру (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;

или конкретно для TButton

s:=(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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
15-1184753380
tean-q
2007-07-18 14:09
2007.08.19
Китайская программа


15-1185173044
Забыл пароль
2007-07-23 10:44
2007.08.19
Статья на рбк. Сможет кто-нить объяснить?


1-1181499519
имя
2007-06-10 22:18
2007.08.19
RichEdit глюк


3-1178384649
Бд
2007-05-05 21:04
2007.08.19
Запуск на другом компе


3-1178288128
Inna_Z
2007-05-04 18:15
2007.08.19
Как узнать версию к которой подключились?