![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день!
Помогите с 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; Но не тут то было, я что-то совсем запутался, помогите разобраться, желательно с коротким примером, как это реализовать. Спасибо! |