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

Вниз

Как вызвать событие   Найти похожие ветки 

 
umbra ©   (2005-09-23 10:44) [40]

Ты создал окно. Оно получает от винды ВСЕ сообщения от мыши или клавиатуры. Если ты клацнешь мышой где угодно на экране, твое окно получит сообщение WM_LBUTTONDOWN, в котором указано где имеено на экране клацнули мышой. И тебе надо, как минимум, филтровать эти сообщения и обрабатывать только клики  на твоем окне. Дальше. Тебе надо твое окно рисовать! Ты ведь наследуешь от TControl, а отрисовка окон реализована только в TCustomControl (наследнике TWinControl). Посему в твоей оконной процедуре должны обрабатываться сообщения об отрисовке окна и рисовать его. Иначе его никто не увидит. И т.д. Писать окно снуля - нелегкий труд. Чтобы его избежать и создана VCL.

В общем, наследуй не от TControl, а от TButton, или, в общем, от ближайшего класса, в котором есть похожая функциональность.

Насколько я помню, первоначально вопрос был о том, как присвоить обработчик событию. Ниже - рабочий пример. При запуске проги у Button2 нет обработчика OnClick. После нажатия на Button1 обработчик присваивается, после повторного опять убирается.


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   procedure Clicker(sender: TObject);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Clicker(sender: TObject);
begin
 Randomize;
 Color := TColor(Random($FFFFFF));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if not Assigned(Button2.OnClick) then
   Button2.OnClick := Clicker
 else
   Button2.OnClick := nil;
end;

end.



 
Quattro ©   (2005-09-24 00:12) [41]

извиняюсь,если надоел глупыми вопросами....в данном примере как мне вызвать обработчик сообщениея??
TMyButton = class(TControl)
 private
   procedure WndProc(var Message:TMessage);override;
   procedure WMLButtonClick(var Msg:TWMLButtonDown);message WM_LBUTTONDOWN;
 public
 end;

procedure TMyButton.WndProc(var Message: TMessage);
begin
 if Message.Msg = WM_LBUTTONDOWN then
   But.WMLButtonClick()//Что здесь нужно передать в качестве параметра,имеющего тим TWMouse?;
 inherited WndProc(Message);

end;


 
umbra ©   (2005-09-26 13:33) [42]

В метод-обработчик сообщения не надо ничего передавать. Его не надо даже вызывать самому! Этот метод вызывается автоматически каждый раз, когда контрол получает соответствующее сообщение от винды. Как параметр ей АВТОМАТИЧЕСКИ передается полученное сообщение. Приложение должно на основании информации в сообщении что-то решить. Кроме того, при клике надо обрабатывать 2 сообщения - нажатие левой кнопки мыши и отпускание. И только если для контрола произошли оба - тогда вызывать обработчик события. Честно говоря, я не специалист в этом, и то, что я написал - только мое понимание. Примеры лучше всего смотреть в модуле Controls - объявление и реализацию класса TControl и его наследников. Там есть и TWMLButtonDown.


 
Quattro ©   (2005-09-27 18:06) [43]

ок..спасибо за объяснения и за терпение..=)...



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

Форум: "Компоненты";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.04 c
2-1142242532
dabreezy
2006-03-13 12:35
2006.03.26
Удаление дублирующих строк из файла


2-1142181698
zaN0za
2006-03-12 19:41
2006.03.26
Сравнение типов


4-1136303742
Medved
2006-01-03 18:55
2006.03.26
Имитация нажатия клавиш keybd_event().


15-1141392869
Alarm
2006-03-03 16:34
2006.03.26
Возможно это и глупо, но ...


15-1141183929
Mozart
2006-03-01 06:32
2006.03.26
заблокировать dvd





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