Eigenes Fenster in der IDE andocken

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 609
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) 111-mal heruntergeladen

wennerer
Beiträge: 609
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) 104-mal heruntergeladen

wennerer
Beiträge: 609
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: 609
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) 6282 mal betrachtet
Viele Grüße
Bernd
Dateianhänge
NewDockedForm.zip
(2.79 KiB) 109-mal heruntergeladen

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Eigenes Fenster in der IDE andocken

Beitrag von wodim »

Hallo,

das funzt leider nicht:

Code: Alles auswählen

hk@Melina:/mnt/data-shared/Lazarus/NewDockedForm$ dir
image.res  laznewdockedform.lpk  laznewdockedform.pas  lazresbash.sh  newdockedform.pas
hk@Melina:/mnt/data-shared/Lazarus/NewDockedForm$ ./lazresbash.sh
ERROR: file not found: Add_01_16.png
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wennerer
Beiträge: 609
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 Melina,
so wie ich das erkennen kann versuchst du eine Ressource zu machen. Die Datei lazresbash.sh ist ein überbleibsel von mir (wie ich die Ressource gemacht hab) und müsste eigentlich nicht dabei sein. Wenn du das Beispiel kompilieren möchtest musst du nur folgendes tun:

Package
Package-Datei (.lpk) öffnen
In den Ordner NewDockedForm navigieren
Dort die laznewdockedform.lpk auswählen
Verwenden
Installieren

wenn fertig installiert dann sollte unter Werkzeuge ein neuer Eintrag mit ShowMyDockedForm zufinden sein.
Hab es eben nochmal erfolgreich getestet:
Dockedform.png
Dockedform.png (67.64 KiB) 1960 mal betrachtet
Ich hoffe das hilft dir.

Viele Grüße
Bernd

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Eigenes Fenster in der IDE andocken

Beitrag von wodim »

Alles klar, danke.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Antworten