mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 10:41:47 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| unit Unit1; 
 | |
| 
 | |
| {$mode objfpc}{$H+}
 | |
| 
 | |
| interface
 | |
| 
 | |
| uses
 | |
|   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 | |
|   Menus, ExtCtrls, Types, LDockTree, HelpIntfs, LazHelpHTML;
 | |
| 
 | |
| type
 | |
| 
 | |
|   { TForm1 }
 | |
| 
 | |
|   TForm1 = class(TForm)
 | |
|     HTMLBrowserHelpViewer1: THTMLBrowserHelpViewer;
 | |
|     HTMLHelpDatabase1: THTMLHelpDatabase;
 | |
|     MainMenu1: TMainMenu;
 | |
|     MenuItem1: TMenuItem;
 | |
|     MenuItem2: TMenuItem;
 | |
|     procedure FormDockOver(Sender: TObject; Source: TDragDockObject; X,
 | |
|       Y: Integer; State: TDragState; var Accept: Boolean);
 | |
|     procedure MenuItem1Click(Sender: TObject);
 | |
|     procedure MenuItem2Click(Sender: TObject);
 | |
|   private
 | |
|     FIndex: Integer;
 | |
|     function NextIndex: String;
 | |
|   public
 | |
|     { public declarations }
 | |
|   end; 
 | |
| 
 | |
| var
 | |
|   Form1: TForm1; 
 | |
| 
 | |
| implementation
 | |
| 
 | |
| { TForm1 }
 | |
| 
 | |
| procedure TForm1.MenuItem1Click(Sender: TObject);
 | |
| var
 | |
|   F: TForm;
 | |
|   Idx: String;
 | |
| begin
 | |
|   F := TForm.Create(Application);
 | |
|   with F do
 | |
|   begin
 | |
|     DragKind := dkDock;
 | |
|     DragMode := dmAutomatic;
 | |
|     Idx := NextIndex;
 | |
|     Caption := 'New Form ' + Idx;
 | |
|     Name := 'DockForm' + Idx;
 | |
|     with TPanel.Create(F) do
 | |
|     begin
 | |
|       Parent := F;
 | |
|       Align := alClient;
 | |
|       Caption := F.Caption;
 | |
|     end;
 | |
|     Show;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TForm1.MenuItem2Click(Sender: TObject);
 | |
| var
 | |
|   FileName, err: String;
 | |
| begin
 | |
|   FileName := ExtractFilePath(ParamStr(0))+'1.html';
 | |
|   TDockTree(DockManager).DumpLayout(FileName);
 | |
|   // how to open it in a cross-platform way?
 | |
|   err := '';
 | |
|   if HelpIntfs.ShowHelp('file:///' + FileName, 'Dock Layout', 'text/html', err) <> shrSuccess then
 | |
|     ShowMessage(err);
 | |
| end;
 | |
| 
 | |
| procedure TForm1.FormDockOver(Sender: TObject; Source: TDragDockObject; X,
 | |
|   Y: Integer; State: TDragState; var Accept: Boolean);
 | |
| 
 | |
|   function RectToScreen(R: TRect): TRect;
 | |
|   begin
 | |
|     Result.TopLeft := ClientToScreen(R.TopLeft);
 | |
|     Result.BottomRight := ClientToScreen(R.BottomRight);
 | |
|   end;
 | |
| 
 | |
| var
 | |
|   ChopWidth, ChopHeight: Integer;
 | |
|   Pt: TPoint;
 | |
|   R: TRect;
 | |
| begin
 | |
|   Accept := True;
 | |
|   ChopWidth := ClientWidth div 3;
 | |
|   ChopHeight := ClientHeight div 3;
 | |
|   Pt := Point(X, Y);
 | |
|   R := Rect(0, 0, ChopWidth, ClientHeight);
 | |
|   if PtInRect(R, Pt) then
 | |
|   begin
 | |
|     Source.DockRect := RectToScreen(R);
 | |
|     Exit;
 | |
|   end;
 | |
|   R := Rect(0, 0, ClientWidth, ChopHeight);
 | |
|   if PtInRect(R, Pt) then
 | |
|   begin
 | |
|     Source.DockRect := RectToScreen(R);
 | |
|     Exit;
 | |
|   end;
 | |
|   R := Rect(ClientWidth - ChopWidth, 0, ClientWidth, ClientHeight);
 | |
|   if PtInRect(R, Pt) then
 | |
|   begin
 | |
|     Source.DockRect := RectToScreen(R);
 | |
|     Exit;
 | |
|   end;
 | |
|   R := Rect(0, ClientHeight - ChopHeight, ClientWidth, ClientHeight);
 | |
|   if PtInRect(R, Pt) then
 | |
|   begin
 | |
|     Source.DockRect := RectToScreen(R);
 | |
|     Exit;
 | |
|   end;
 | |
|   R := Rect(0, 0, ClientWidth, ClientHeight);
 | |
|   Source.DockRect := RectToScreen(R);
 | |
| end;
 | |
| 
 | |
| function TForm1.NextIndex: String;
 | |
| begin
 | |
|   Result := IntToStr(FIndex);
 | |
|   inc(FIndex);
 | |
| end;
 | |
| 
 | |
| initialization
 | |
|   {$I unit1.lrs}
 | |
| 
 | |
| end.
 | |
| 
 | 
