![]() |
Frame erstellen -> einbinden
Hallo,
Ich erstelle dynamisch einen Frame:
Delphi-Quellcode:
Auf diesen Frame setzte ich dann noch einige Buttons usw.
Frame1:= TFrame.create(self);
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 |
Re: Frame erstellen -> einbinden
Du erstellst eine abgeleitete Frameklasse mit den Buttons usw ab.
Delphi-Quellcode:
[Edit] Delphitags eingefügt[/Edit]
type
TmyFrame = class(TFrame) ... ... Form1.FormCreate( Sender: TObject); begin frame := TMyFrame.Create(self); end; ... Form2.FormCreate( Sender: TObject); begin frame := TMyFrame.Create(self); end; |
Re: Frame erstellen -> einbinden
ich komm noch nicht ganz damit zurecht...
hab jetzt einmal folgendes Beispiel gemacht:
Delphi-Quellcode:
Da sagt er mir aber beim Druckframe.create: 'Resource TDruckframe not found'
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; Was muss ich anders machen? |
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:
Und nur mal nebenbei gefragt, wie man Frames zur Designzeit erstellt und einfügt ist dir klar?
type
TDeinFrame = class(TFrame) end; Gruß Der Unwissende |
Re: Frame erstellen -> einbinden
Ich hab jetzt auch mal probiert, des Semikolon wegzulassen und nen end hinzuhängen.
Ändert aber auch nichts.
Delphi-Quellcode:
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.
type
TDeinFrame = class(TFrame) end; 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 |
Re: Frame erstellen -> einbinden
Zitat:
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; |
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:
(Ich hab ihn jetzt einmal auf das Wesentlichste verkleinert)
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. //Edit: Schreibfehler korrigiert. |
Re: Frame erstellen -> einbinden
Zitat:
|
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 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz