Skip to content

Commit e21c612

Browse files
committed
Draggable panel + example
1 parent 11cecb4 commit e21c612

File tree

2 files changed

+90
-4
lines changed

2 files changed

+90
-4
lines changed

Examples/form_dragablepanel.simba

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var
2+
Form: TLazForm;
3+
4+
procedure ShowMyForm;
5+
var
6+
Form: TLazForm;
7+
Panel: TLazDragablePanel;
8+
begin
9+
Form := TLazForm.Create();
10+
Form.Caption := 'Example dragable panel';
11+
Form.Width := 1000;
12+
Form.Height := 800;
13+
Form.Position := ELazFormPosition.ScreenCenter;
14+
Form.Color := Colors.DARK_GREY;
15+
16+
Panel := TLazDragablePanel.Create(Form);
17+
Panel.Parent := Form;
18+
Panel.Color := Colors.DARK_RED;
19+
Panel.Left := 222;
20+
Panel.Top := 333;
21+
22+
Form.ShowModal();
23+
24+
WriteLn('Form has been closed.');
25+
end;
26+
27+
begin
28+
ShowMyForm();
29+
end.

Source/script/imports/lcl/simba.import_lcl_extctrls.pas

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,22 +335,75 @@ procedure _LapePanel_OnDblClick_Write(const Params: PParamArray); LAPE_WRAPPER_C
335335
PPanel(Params^[0])^.OnDblClick := PNotifyEvent(Params^[1])^;
336336
end;
337337

338+
type
339+
PDragablePanel = ^TDragablePanel;
340+
TDragablePanel = class(TPanel)
341+
protected
342+
FDragging: Boolean;
343+
FDragStart: TPoint;
344+
345+
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
346+
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
347+
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
348+
349+
constructor Create(TheOwner: TComponent); override;
350+
end;
351+
352+
procedure TDragablePanel.MouseMove(Shift: TShiftState; X, Y: Integer);
353+
begin
354+
inherited MouseMove(Shift, X, Y);
355+
356+
if FDragging then
357+
begin
358+
Left := Left + (X - FDragStart.X);
359+
Top := Top + (Y - FDragStart.Y);
360+
end;
361+
end;
362+
363+
procedure TDragablePanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
364+
begin
365+
inherited MouseDown(Button, Shift, X, Y);
366+
367+
FDragging := True;
368+
FDragStart.X := X;
369+
FDragStart.Y := Y;
370+
end;
371+
372+
procedure TDragablePanel.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
373+
begin
374+
inherited MouseUp(Button, Shift, X, Y);
375+
376+
FDragging := False;
377+
end;
378+
379+
constructor TDragablePanel.Create(TheOwner: TComponent);
380+
begin
381+
inherited Create(TheOwner);
382+
383+
BevelOuter := bvNone;
384+
end;
385+
386+
procedure _LapeDragablePanel_Create(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
387+
begin
388+
PDragablePanel(Result)^ := TDragablePanel.Create(PComponent(Params^[0])^);
389+
end;
390+
338391
procedure ImportLCLExtCtrls(Script: TSimbaScript);
339392
begin
340393
with Script.Compiler do
341394
begin
342395
addGlobalType('enum(None, Lowered, Raised, Space)', 'ELazPanelBevel');
343396

344397
addClass('TLazTimer', 'TLazComponent', TTimer);
345-
addClassConstructor('TLazTimer', '(AOwner: TLazComponent)', @_LapeTimer_Create);
398+
addClassConstructor('TLazTimer', '(Owner: TLazComponent)', @_LapeTimer_Create);
346399
addProperty('TLazTimer', 'Enabled', 'Boolean', @_LapeTimer_Enabled_Read, @_LapeTimer_Enabled_Write);
347400
addProperty('TLazTimer', 'Interval', 'UInt32', @_LapeTimer_Interval_Read, @_LapeTimer_Interval_Write);
348401
addProperty('TLazTimer', 'OnTimer', 'TLazNotifyEvent', @_LapeTimer_OnTimer_Read, @_LapeTimer_OnTimer_Write);
349402
addProperty('TLazTimer', 'OnStartTimer', 'TLazNotifyEvent', @_LapeTimer_OnStartTimer_Read, @_LapeTimer_OnStartTimer_Write);
350403
addProperty('TLazTimer', 'OnStopTimer', 'TLazNotifyEvent', @_LapeTimer_OnStopTimer_Read, @_LapeTimer_OnStopTimer_Write);
351404

352405
addClass('TLazImage', 'TLazGraphicControl', TImage);
353-
addClassConstructor('TLazImage', '(AOwner: TLazComponent)', @_LapeImage_Create);
406+
addClassConstructor('TLazImage', '(Owner: TLazComponent)', @_LapeImage_Create);
354407
addGlobalFunc('function TLazImage.DestRect: TLazRect;', @_LapeImage_DestRect);
355408
addProperty('TLazImage', 'Center', 'Boolean', @_LapeImage_Center_Read, @_LapeImage_Center_Write);
356409
addProperty('TLazImage', 'Picture', 'TLazPicture', @_LapeImage_Picture_Read, @_LapeImage_Picture_Write);
@@ -370,10 +423,10 @@ procedure ImportLCLExtCtrls(Script: TSimbaScript);
370423
addProperty('TLazCustomPanel', 'BevelInner', 'ELazPanelBevel', @_LapeCustomPanel_BevelInner_Read, @_LapeCustomPanel_BevelInner_Write);
371424
addProperty('TLazCustomPanel', 'BevelOuter', 'ELazPanelBevel', @_LapeCustomPanel_BevelOuter_Read, @_LapeCustomPanel_BevelOuter_Write);
372425
addProperty('TLazCustomPanel', 'BevelWidth', 'Integer', @_LapeCustomPanel_BevelWidth_Read, @_LapeCustomPanel_BevelWidth_Write);
373-
addClassConstructor('TLazCustomPanel', '(TheOwner: TLazComponent)', @_LapeCustomPanel_Create);
426+
addClassConstructor('TLazCustomPanel', '(Owner: TLazComponent)', @_LapeCustomPanel_Create);
374427

375428
addClass('TLazPanel', 'TLazCustomPanel', TPanel);
376-
addClassConstructor('TLazPanel', '(TheOwner: TLazComponent)', @_LapePanel_Create);
429+
addClassConstructor('TLazPanel', '(Owner: TLazComponent)', @_LapePanel_Create);
377430

378431
addProperty('TLazPanel', 'WordWrap', 'Boolean', @_LapePanel_WordWrap_Read, @_LapePanel_WordWrap_Write);
379432
addProperty('TLazPanel', 'OnMouseDown', 'TLazMouseEvent', @_LapePanel_OnMouseDown_Read, @_LapePanel_OnMouseDown_Write);
@@ -382,8 +435,12 @@ procedure ImportLCLExtCtrls(Script: TSimbaScript);
382435
addProperty('TLazPanel', 'OnMouseLeave', 'TLazNotifyEvent', @_LapePanel_OnMouseLeave_Read, @_LapePanel_OnMouseLeave_Write);
383436
addProperty('TLazPanel', 'OnMouseMove', 'TLazMouseMoveEvent', @_LapePanel_OnMouseMove_Read, @_LapePanel_OnMouseMove_Write);
384437
addProperty('TLazPanel', 'OnDblClick', 'TLazNotifyEvent', @_LapePanel_OnDblClick_Read, @_LapePanel_OnDblClick_Write);
438+
439+
addClass('TLazDragablePanel', 'TLazPanel', TDragablePanel);
440+
addClassConstructor('TLazDragablePanel', '(Owner: TLazComponent)', @_LapeDragablePanel_Create);
385441
end;
386442
end;
387443

444+
388445
end.
389446

0 commit comments

Comments
 (0)