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.