Eigenes Fenster in der IDE andocken

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 524
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Eigenes Fenster in der IDE andocken

Beitrag von wennerer »

Hallo an Alle,
ich habe bei mir Lazarus mit Anchordocking installiert und möchte nun ein eigenes Fenster andocken. Im Menü Werkzeuge habe ich mir einen zusätzlichen Eintrag erstellt der nach dem anclicken eine Form öffnet. Auf der Form befindet sich ein Panel.
Dieses Panel habe ich so erstellt:

Code: Alles auswählen

 FPanel            := TPanel.Create(nil);
 FPanel.Parent     := FForm;
 FPanel.Align      := alClient;
 FPanel.Constraints.MinWidth:= 100;
 FPanel.Color      := clYellow;
 FPanel.DragKind   := dkDock;
 FPanel.DragMode   := dmAutomatic;
 FPanel.OnEndDock  :=@FPanelEndDock; 
Ich kann das Panel ziehen, jedoch nicht in der IDE andocken. Im Anhang ist ein Testpackage zum Installieren.
Muss ich dem Panel als Owner irgendwas anderes übergeben? Vermutlich liege ich aber komplett auf dem Holzweg und ich muss es ganz anders anfangen.

Allen ein gesundes 2024!
Bernd
Dateianhänge
DockedTest.zip
(72.69 KiB) 68-mal heruntergeladen

wennerer
Beiträge: 524
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Eigenes Fenster in der IDE andocken

Beitrag von wennerer »

Hallo,
ich bin nun auf diesen Wiki-Artikel gestossen:

https://wiki.freepascal.org/Extending_the_IDE#Forms

Das Package habe ich danach versucht umzubauen. Leider lässt sich das Panel nicht docken. Hat jemand sowas schon mal gemacht?

Viele Grüße
Bernd

Code: Alles auswählen

unit MyDockedForm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FormEditingIntf, MenuIntf, IDECommands, Forms, ExtCtrls,
  Controls, Graphics, LCLType;

type

  { TMy_Form }

  TMy_Form = class(TForm)
  private
   FPanel: TPanel;
   procedure FPanelEndDock(Sender, Target: TObject; X, Y: Integer);
   procedure OnCmdClick(Sender: TObject);
  public
   constructor CreateNew(AOwner: TComponent; Num: Integer = 0); override;
   destructor Destroy; override;
  published
    //property YourProperty: integer read FYourProperty write FYourProperty;
  end;

procedure Register;

var
  Cmd: TIDEMenuCommand = nil;
  AForm: TMy_Form = nil;
  CmdMessageComposer: TIDECommand;

implementation

{ TMy_Form }

procedure TMy_Form.FPanelEndDock(Sender, Target: TObject; X, Y: Integer);
begin
 close;
end;

procedure TMy_Form.OnCmdClick(Sender: TObject);
begin
  Show;
end;

constructor TMy_Form.CreateNew(AOwner: TComponent; Num: Integer);
begin
 inherited CreateNew(AOwner, Num);
 Caption := 'My Docked Window';
 SetBounds(100,100,500,800);


 FPanel            := TPanel.Create(Application.MainForm);
 FPanel.Parent     := self;
 FPanel.Align      := alClient;
 FPanel.Constraints.MinWidth:= 100;
 FPanel.Color      := clYellow;
 FPanel.DragKind   := dkDock;
 FPanel.DragMode   := dmAutomatic;
 FPanel.OnEndDock  :=@FPanelEndDock;
end;

destructor TMy_Form.Destroy;
begin
 FPanel.Free;
  inherited Destroy;
end;

procedure Register;
var Key: TIDEShortCut;
    Cat: TIDECommandCategory;
    CmdMyTool: TIDECommand;
begin
 FormEditingHook.RegisterDesignerBaseClass(TMy_Form);

 AForm := TMy_Form.CreateNew(Application.MainForm,0);
 // register IDE shortcut and menu item
 Key := IDEShortCut(VK_M,[ssCtrl],VK_UNKNOWN,[]);
 Cat:=IDECommandList.FindIDECommand(ecFind).Category;
 CmdMyTool := RegisterIDECommand(Cat,'Öffne Fenster', 'Öffne Fenster', Key,@AForm.OnCmdClick, nil);

//Erzeugt den Menüeintrag:
 Cmd := RegisterIDEMenuCommand(itmCustomTools, 'Show MyDockedWindow', 'Öffne Fenster',  nil, nil, CmdMyTool);
end;

initialization

finalization
 if assigned(AForm) then AForm.Free;

end.
Dateianhänge
MyForm.zip
(72.58 KiB) 64-mal heruntergeladen

wennerer
Beiträge: 524
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Eigenes Fenster in der IDE andocken

Beitrag von wennerer »

Hallo nochmal,
eben bin auf das gestossen:
https://wiki.freepascal.org/Extending_t ... E-Fensters

Irgendwie unglaublich, wo kommt das jetzt her?

Viele Grüße
Bernd

wennerer
Beiträge: 524
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Eigenes Fenster in der IDE andocken

Beitrag von wennerer »

Hallo,
mir ist es jetzt gelungen ein andockbares IDE-Fenster zu erzeugen. Wer es mal brauchen kann im Anhang ein kleines Package.
Es wird im Werkzeuge Menü ein neues Item erzeugt:
MyDockedForm.png
MyDockedForm.png (86.14 KiB) 4222 mal betrachtet
Viele Grüße
Bernd
Dateianhänge
NewDockedForm.zip
(2.79 KiB) 61-mal heruntergeladen

Antworten