Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработчик для SpeedButton


Student_ ©   (2007-02-04 01:49:00) 

Возникла такая ситуация - не вызывается обработчик для SpeedButton, созданного в Runtime. Если SpeedButton в той же программе на той же форме создавать в DesignTime - все работает.
Сначала установил на форму обычный SpeedButton с палитры компонент, написал для него обработчик onClick, после чего переименовал обработчик в SpeedButtononClick(...) используя CodeExplorer (чтобы ничего не забыть по невнимательности). Затем установленный компонент удалил, оставив только обработчик. Его и задаю для создаваемых в Runtime кнопок:
TempSpBt.onClick:=speedButtonClick;
Однако созданные кнопки игнорируют щелчки мышью. Что я забыл или сделал не так?
P.S: они даже не подсвечиваются при наведении мыши, как это делают обычные статически установленные кнопки при использовании XPManifest.


Student_   (2007-02-04 13:00:00) [1]

Вроде понял - при присвоении значения полю Parent все отрабатывает как положено...


Anatoly Podgoretsky   (2007-02-04 12:52:00) [2]

> Student_  (04.02.2007 12:48:06)  [6]

Примеры есть в справке.


Student_   (2007-02-04 12:48:00) [3]

Ну значит у меня пример кривой, по которому я разбираюсь...
А как иначе? Я же и прошу какой-нибудь материал, который покажет правильный подход, потому что автору примера я и сам не слишком доверяю - уже слишком много "ляпов" за ним замечено.


Anatoly Podgoretsky   (2007-02-04 12:16:00) [4]

> Student_  (04.02.2007 11:32:04)  [4]

Справка:

Applications should not need to call InsertControl directly.


Student_   (2007-02-04 11:32:00) [5]

В общем вот мой код (привожу процедуру полностью на всякий случай)
procedure TForm1.Button1Click(Sender: TObject);
var TempEd  : TEdit;
   TempSpBt: TSpeedButton;
   TempChBx: TCheckBox;
begin
 TempEd:=TEdit.Create(self);
 with TempEd do
   begin
     Tag:=CompList.Add(TempEd);
     Top:=LastTop+29;
     Left:=GroupBox1.Left+10;
     Width:=350;
   end;
 Form1.Panel3.InsertControl(TempEd);
 LastTop:=TempEd.Top;

 TempSpBt:=TSpeedButton.Create(self);
 with TempSpBt do
   begin
     Tag:=CompList.Add(TempSpBt);
     Width:=21;
     Height:=21;
     Top:=LastTop;
     Left:=TempEd.Left+360;
     OnClick:=SpeedButtonClick;
   end;
 Form1.Panel3.InsertControl(TempSpBt);

 TempChBx:=TCheckBox.Create(Form1);
 with TempChBx do
   begin
     Tag:=CompList.Add(TempChBx);
     Top:=TempEd.Top+2;
     Left:=TempSpBt.Left+31;
     Caption:='OK';
     Width:=50;
   end;
 Form1.Panel3.InsertControl(TempChBx);

 Button1.Top:=LastTop+29;
 Form1.repaint;
end;

В чем здесь может быть ошибка? Я знаю, что ошибка скорее всего очень простая и незначительная, просто сейчас возникла необходимость работать именно в Delphi - приходится разбираться...
И еще, если несложно, подскажите какие-нибудь статьи или другие материалы по созданию элементов формы в runtime.


Student_   (2007-02-04 10:59:00) [6]

>Очень интересное P.S. ! Кстати никак не зависящее от обработчика OnClick.
>Может не там ищем?
Очень даже может быть. Если бы я знал, где искать - я бы, вероятно, не спрашивал :) Просто раньше в runtime работать с созанием элементов формы вообще не приходилось.
Спасибо за код, надеюсь, он поставит все на свои места.


Wind   (2007-02-04 07:49:00) [7]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Buttons;

type
 TForm1 = class(TForm)

   procedure FormActivate(Sender: TObject);
   procedure SpeedBtnClick(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
SpeedBtn: TSpeedButton;
begin
SpeedBtn:=TSpeedButton.Create(self);
with  SpeedBtn do
begin
Name:='Sp1';
OnClick:=SpeedBtnClick;
Parent:=Form1;
Left:=50;
Top:=50;
end;
end;

procedure TForm1.SpeedBtnClick(Sender: TObject);
begin
ShowMessage('Óðà âñ¸ ðàáîòàåò!');
end;

end.


Германн   (2007-02-04 01:56:00) [8]


> P.S: они даже не подсвечиваются при наведении мыши, как
> это делают обычные статически установленные кнопки при использовании
> XPManifest.
>

Очень интересное P.S. ! Кстати никак не зависящее от обработчика OnClick.
Может не там ищем?


Наверх

Титульная страница Поиск, карта сайта Написать письмо