UNIT PAGE_UNIT_2024; //Created March 19,2024 trying to improve tpagecontrol
{$mode objfpc}{$H+}
INTERFACE
USES
CLASSES, SYSUTILS,ComCtrls,Dialogs,Controls,Graphics,Themes,LCL,LCLIntf,
LCLType,FLOWPANEL_UNIT_2024,BUTTONS_UNIT_2024,HELPERS_UNIT_2024,UTIL_2023,
StdCtrls,ExtCtrls,CustomDrawnControls;
TYPE
{
create some buttons using an array or stringlist
be able to rearrance the buttons and save their order to inifile
}
{ TBUTTON_TABS }
TBUTTON_TABS = CLASS (TMYFLOWPANEL) // replacement for cdpage control non working tabs
CONSTRUCTOR CREATE( THEOWNER: TCOMPONENT) ; OVERRIDE;
PROCEDURE ACTIVATE; OVERRIDE;
PROCEDURE CREATE_BUTTONS (CONST BNAMES:TStringArray); VIRTUAL;
PROCEDURE STARTDRAG( SENDER: TOBJECT; VAR DRAGOBJECT: TDRAGOBJECT) ;
PROCEDURE MOUSE_MOVE ( SENDER: TOBJECT; SHIFT: TSHIFTSTATE; X, Y: INTEGER) ;
PROCEDURE DRAG_OVER ( SENDER, SOURCE: TOBJECT; X, Y: INTEGER; STATE: TDRAGSTATE; VAR ACCEPT: BOOLEAN) ;
PROCEDURE DRAG_DROP( SENDER, SOURCE: TOBJECT; X, Y: INTEGER) ;
PROCEDURE TEST; OVERRIDE;
END;
IMPLEMENTATION
{ TBUTTON_TABS }
CONSTRUCTOR TBUTTON_TABS.CREATE( THEOWNER: TCOMPONENT) ;
BEGIN
INHERITED CREATE( THEOWNER) ;
// TEST;
END;
PROCEDURE TBUTTON_TABS.ACTIVATE;
BEGIN
//SET_CHANGE_EVENT(@CHANGE_EVENT);
//INHERITED;
END;
PROCEDURE TBUTTON_TABS.CREATE_BUTTONS( CONST BNAMES: TSTRINGARRAY) ;
VAR X:INTEGER;
BEGIN //
CREATE_CONTROLS(Length(BNAMES),TcdBUTTON);
FOR X:= LOW (BNAMES) TO HIGH (BNAMES) DO
WITH Controls[X] AS TCDButton DO
BEGIN
Name := BNAMES[X];
OnStartDrag := @STARTDRAG;
OnMouseMove := @Mouse_Move;
DragMode := dmAutomatic;
DoubleBuffered := true;
OnDragOver := @DRAG_OVER;
OnDragDrop := @DRAG_DROP;
END;
END;
PROCEDURE TBUTTON_TABS.STARTDRAG( SENDER: TOBJECT; VAR DRAGOBJECT: TDRAGOBJECT) ;
BEGIN
BANNER ('starting drag on '+ sender.ClassName);// DRAGOBJECT.Control.Name);
END;
PROCEDURE TBUTTON_TABS.MOUSE_MOVE( SENDER: TOBJECT; SHIFT: TSHIFTSTATE; X, Y: INTEGER) ;
BEGIN
IF NOT (SENDER IS TBUTTON) OR NOT (ssLeft IN SHIFT) THEN EXIT;
WITH SENDER AS TControl DO
BEGIN
parent:= self.parent;
Left:= X + (WIDTH DIV 2);
TOP:= Y + (HEIGHT DIV 2);
END;
END;
PROCEDURE TBUTTON_TABS.DRAG_OVER(SENDER,SOURCE:TOBJECT;X,Y:INTEGER;STATE:TDRAGSTATE;VAR ACCEPT:BOOLEAN);
BEGIN
banner ('dragging over '+tcontrol(sender).Name+' ' +TControl(source).Name);
END;
PROCEDURE TBUTTON_TABS.DRAG_DROP( SENDER, SOURCE: TOBJECT; X, Y: INTEGER) ;
BEGIN
banner ('drag drop');
END;
PROCEDURE TBUTTON_TABS.TEST;
CONST AR_NAMES: ARRAY[0..2] OF String = ('ONE','TWO','THREE');
BEGIN
CREATE_BUTTONS(AR_NAMES);
END;
END.