Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

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

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1170672522
@tom
2007-02-05 13:48
2007.02.25
Нужно создать форму (таблицу из WORD).


4-1160674602
alexold
2006-10-12 21:36
2007.02.25
Чтение файла размером больше 2 Гбайт


1-1168240005
DelphiLexx
2007-01-08 10:06
2007.02.25
DBGrid (DBGridEh) и dgColLines


2-1170838885
fart
2007-02-07 12:01
2007.02.25
массивы и сторки


15-1170190420
ArtemESC
2007-01-30 23:53
2007.02.25
На второй год в университете...





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