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

Вниз

Обработчик для SpeedButton   Найти похожие ветки 

 
Student_   (2007-02-04 01:49) [0]

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


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


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

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


 
Wind ©   (2007-02-04 07:49) [2]

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.


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

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


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

В общем вот мой код (привожу процедуру полностью на всякий случай)
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.


 
Anatoly Podgoretsky ©   (2007-02-04 12:16) [5]

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

Справка:

Applications should not need to call InsertControl directly.


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

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


 
Anatoly Podgoretsky ©   (2007-02-04 12:52) [7]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
2-1170633876
RASkov
2007-02-05 03:04
2007.02.25
TThread


15-1170409028
мжмж
2007-02-02 12:37
2007.02.25
Может не сюда, но все же..


15-1170265176
Kerk
2007-01-31 20:39
2007.02.25
Жить сегодняшним днем


15-1170419129
Kolan
2007-02-02 15:25
2007.02.25
Чем закончился Прогресс бар?


15-1170667944
pasha_golub
2007-02-05 12:32
2007.02.25
Визуализация сортировки