Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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;

или конкретно для 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.048 c
2-1185349418
mfender
2007-07-25 11:43
2007.08.19
Отчего может случится такой Aсces Violation?


15-1184868247
oxffff
2007-07-19 22:04
2007.08.19
БАГ компилятора в конструкторе с Open Array


2-1184856530
kolyann..
2007-07-19 18:48
2007.08.19
забыл функцию


3-1177566685
MZ
2007-04-26 09:51
2007.08.19
узнать количество суток между двумя датами в FireBird


2-1185178959
ambhtr
2007-07-23 12:22
2007.08.19
Как из интернета скопировать таблицу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский