Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frame erstellen -> einbinden (https://www.delphipraxis.net/63385-frame-erstellen-einbinden.html)

orakel 17. Feb 2006 21:45


Frame erstellen -> einbinden
 
Hallo,

Ich erstelle dynamisch einen Frame:

Delphi-Quellcode:
Frame1:= TFrame.create(self);
Auf diesen Frame setzte ich dann noch einige Buttons usw.

wie kann ich diesen Frame1 jetzt öfter in Fenster einbinden.
Ich möchte ihn jetzt z.B. einmal in Form1 und einmal in Form2 einbinden.

Wie geht das?

gruß orakel

mkinzler 17. Feb 2006 22:00

Re: Frame erstellen -> einbinden
 
Du erstellst eine abgeleitete Frameklasse mit den Buttons usw ab.

Delphi-Quellcode:
type
    TmyFrame = class(TFrame)
    ...
...
Form1.FormCreate( Sender: TObject);
begin
  frame := TMyFrame.Create(self);
end;

...
Form2.FormCreate( Sender: TObject);
begin
  frame := TMyFrame.Create(self);
end;
[Edit] Delphitags eingefügt[/Edit]

orakel 17. Feb 2006 22:24

Re: Frame erstellen -> einbinden
 
ich komm noch nicht ganz damit zurecht...

hab jetzt einmal folgendes Beispiel gemacht:

Delphi-Quellcode:
type
  TDruckFrame = class(TFrame);

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var frame1, frame2: TDruckframe;
begin
 Frame1:= TDruckframe.Create(self);
 Frame1.Parent:= Form1;
 Frame2:= TDruckframe.Create(self);
 Frame2.Parent:= Form2;
end;
Da sagt er mir aber beim Druckframe.create: 'Resource TDruckframe not found'

Was muss ich anders machen?

Der_Unwissende 18. Feb 2006 10:05

Re: Frame erstellen -> einbinden
 
Hi,
wenn du ein TDruckframe von TFrame ableitest ohne etwas hinzuzufügen, dann solltest du einfach nur ein TFrame verwenden (hat die gleichen Eigenschaften).
Aber versuch mal das Semikolon hinter den Klammern wegzulassen und schreib ein end; hin

Delphi-Quellcode:
type
  TDeinFrame = class(TFrame)
  end;
Und nur mal nebenbei gefragt, wie man Frames zur Designzeit erstellt und einfügt ist dir klar?

Gruß Der Unwissende

orakel 18. Feb 2006 11:29

Re: Frame erstellen -> einbinden
 
Ich hab jetzt auch mal probiert, des Semikolon wegzulassen und nen end hinzuhängen.
Ändert aber auch nichts.

Delphi-Quellcode:
type
  TDeinFrame = class(TFrame)
  end;
Mit Frames zur Designzeit arbeite ich schon länger. Da ist es ja einfach: Ich erstelle einfach nen Frame, und binde den entweder schon zur Designzeit oder zur Laufzeit ein. Das bekomme ich auch problemlos hin.

Nur weiss ich nicht, wie man vorgehen muss, wenn man den Frame erst zur Laufzeit erstellt...
...wie ich dann auch Objekte auf diesen Frame erstelle...

Der leere Frame war nur mal ein Beispiel, weil ich ja nichtmal das erstellen hinbekomme. Da sollen nachher schon noch Buttons und Sachen drauf.

Gruß orakel

mkinzler 18. Feb 2006 11:39

Re: Frame erstellen -> einbinden
 
Zitat:

Nur weiss ich nicht, wie man vorgehen muss, wenn man den Frame erst zur Laufzeit erstellt...
...wie ich dann auch Objekte auf diesen Frame erstelle...
Wie bei einer Form:

Delphi-Quellcode:
TDruckFrame = class(TFrame)
    Button1: TButton;
  public
    constructor Create( AOwner: TComponent);
end;

constructor TDruckFrame.Create( AOwner: TComponent);
begin
    inherited Create;
    Button1 := TButton.Create( self);
end;

orakel 18. Feb 2006 12:06

Re: Frame erstellen -> einbinden
 
@mkinzler: Danke, werd ich später mal probieren.

Aber um nochmal auf mein erstes Problem mit dem Erstellen zurückzukommen.

Kann mir jemand sagen, was an diesem Code jetzt falsch ist?
Es kommt nämlich immer noch die oben genannte Meldung:

'Project Project1.exe raised exception class EResNotFound with message 'Resource TMyFrame not found'. Process stopped. Use Step or Run to continue.'

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TMyFrame = class(TFrame)
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Frame1: TMyframe;
begin
  Frame1:= TMyframe.Create(self);
  Frame1.Parent:= Form1;
end;
end.
(Ich hab ihn jetzt einmal auf das Wesentlichste verkleinert)

//Edit: Schreibfehler korrigiert.

tomsel 18. Feb 2006 12:22

Re: Frame erstellen -> einbinden
 
Zitat:

Resource TMyFrame not found
... bedeutet, dass die DFM-Datei für den Frame fehlt. Diese erzeugt Delphi automatisch, wenn auf "herkömmliche" Weise ein neuer Frame angelegt wird (genau so, wie bei Forms). Ich hab keine Ahnung, ob das so funktioniert, wenn man den Frame in irgend einer Unit deklariert, die DFM-Datei selbst anlegt und per $R-Direktive einbindet. Vieleicht gehts ja, aber ich würde den Frame lieber auf die übliche Tour erzeugen. Wenn du die Controls auf dem Frame unbedingt zur Laufzeit anlegen willst, kannst du den entsprechenden Code in den Constructor deiner Frame-Klasse schreiben.

orakel 18. Feb 2006 15:09

Re: Frame erstellen -> einbinden
 
Hört sich nach einiger Arbeit an...werde wohl die Frames doch besser schon designen...

Trotzdem danke!

Gruß orakel


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz