Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Einfluss BorderStyle auf Komponenten

  Alt 4. Feb 2005, 08:39
Hallo,
ich habe die Lösung in den tiefen meiner Platte gefunden.
Das Child-Formular hat einen zweiten und erweiterten Constructor bekommen. Damit kann man das Ding wie ein normales Formular aufrufen und man übergibt dem Constructor noch einen Parent. Grundsätzlich habe ich den Code damals bei Hagen abgeschrieben (glaube ich).
Delphi-Quellcode:
unit formchild_frm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TFormChild = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
  private
    { Private-Deklarationen }
    FAsChild: Boolean;
    FTempParent: TWinControl;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure Loaded; override;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); overload; override; // als Formular aufrufen
    constructor Create(AOwner: TComponent;AParent: TWinControl); reintroduce; overload; // als Child aufrufen
    end;

var
  FormChild: TFormChild;

implementation

uses Utils1;

{$R *.DFM}

constructor TFormChild.Create(AOwner: TComponent);
begin
  FAsChild := False;
  inherited Create(AOwner);
end;

constructor TFormChild.Create(AOwner: TComponent; AParent: TWinControl);
begin
  FAsChild := True;
  FTempParent := aParent;
  IsControl:=True;
  inherited Create(AOwner);
end;

procedure TFormChild.CreateParams(var Params: TCreateParams);
begin
  Inherited CreateParams(Params);
  if FAsChild then
    Params.Style := Params.Style or WS_CHILD;
end;

procedure TFormChild.Loaded;
begin
  inherited;
  if FAsChild then
  begin
    Align := alNone;
   // BorderStyle := bsNone;
   // BorderIcons := [];
    Parent := FTempParent;
    Position := poDefault;
  end;
end;

end.
Hier kommt der das Aufruf des Formulars als Child
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  If Not Assigned(aChildForm) then
    aChildForm:=TFormChild.Create(Application, Panel2);
  With aChildForm do
    begin
    Edit1.text:='Delphi';
    Edit2.Text:='Praxis';
    Show;
    end;
  // Die Message sorgt dafür, dass man die Controls auf dem Form verwenden
  // kann
  SendMessage(aChildForm.Handle, WM_NCACTIVATE, Ord(True), 0);
  aChildForm.SetBounds(0,0,200,200);
end;
Angehängte Dateien
Dateityp: zip zip_920.zip (218,5 KB, 6x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat