![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработчик для 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.
Может не там ищем?