|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Cвое событие на нажатие кнопки
Добрый день!
Помогите с GUI. Как повесить свое событие на нажатие кнопки? Есть отдельный модуль, в котором я определил элементарный класс кнопки Код:
TBaseObject = class (TObject) private X,Y,Width,Height: integer; Down, Focus, Visible: boolean; protected fMouseState: TMouseState; fOnMouseClick: TOnMouseClick; fOnMouseMove: TOnMouseMove; public Name : string; PathEnadle, PathDisable, PathFocuse: string; Constructor Create(AOwner: TComponent); //override; property OnMouseClick: TOnMouseClick read fOnMouseClick write fOnMouseClick; property OnMouseMove: TOnMouseMove read fOnMouseMove write fOnMouseMove; property OnClick: TNotifyEvent read FOnClick write FOnClick; Procedure SetMouseState(aMouseX, aMouseY: Single; aIsButtonDown: Boolean); procedure SetMouseMove(aMouseX, aMouseY: Single); procedure Draw(Canvas: TCanvas); end; TMyButton = class (TBaseObject) private public procedure Click; procedure SetPos(aX,aY, aW,aH:integer); virtual; end; Полностью код расписывать не буду, для того чтобы понять суть вопроса, этого должно хватить. В основном модуле приложения я создаю переменную кнопки, задаю ей необходимые параметры и т.п. По таймеру я ее отрисовываю. Мне нужно определить событие нажатия/отжатия и др. Так как это сделано в делфи , на форму ставишь кнопку и в ее событие пишешь код, procedure TForm1.Button1Click(Sender: TObject); так вот, мне нужно сделать по аналогии, но без визуализации компонента. Я не хочу писать код для еще не созданных кнопок в отдельном модуле, где идут определения классов. Основной модуль примерно такой: Код:
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; btn1 := TMyButton.Create(Self); btn1.SetPos(20,20,128,32); btn1.Name:='Button1'; btn1. PathEnadle:='..\mygui\textures\down.bmp'; btn1. PathDisable:='..\mygui\textures\up.bmp'; btn1. PathFocuse:='..\mygui\textures\focus.bmp'; btn1.Draw(image1.Picture.Bitmap.Canvas); //btn1.onClick:=clickbtn; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then MousLeftDown:=true; btn1.SetMouseState(x, y, MousLeftDown); end; procedure TForm1.Timer1Timer(Sender: TObject); var pos:TPoint; begin btn1.Draw(Image1.Canvas); end; Нужно чтобы код процедур кнопок был в Маин юните, и именно тот который напишет пользователь для каждой кнопки свой. Копался в модулях StdCtrls, Controls, в Интернет ресурсах, но то что нужно не нашел или нашел, но знаний понять и переделать не хватает. Сначала подумал, что как-то можно присвоить событию нажатия свою процедуру, примерно так //btn1.onClick:=clickbtn; Но не тут то было, я что-то совсем запутался, помогите разобраться, желательно с коротким примером, как это реализовать. Спасибо! |