Добрый день!
Помогите с 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;
Но не тут то было, я что-то совсем запутался, помогите разобраться, желательно с коротким примером, как это реализовать.
Спасибо!