![]() |
Frames über deren Namen dynamisch aufrufen
Hallo, ich benutze folgenden Code um Frames zur Laufzeit in meine Form zu laden
Delphi-Quellcode:
private
FActiveFrame:TFrame; //zum merken des derzeit aktiven Frames uses UnitFrameShowInteressenten, UnitFrameAddInteressent, UnitFrameObjekte; procedure TForm1.Button1Click(Sender: TObject); begin if (not assigned(FActiveFrame)) or not (FActiveFrame is TFrameShowInteressenten) then begin freeandnil(FActiveFrame); FActiveFrame:=TFrameShowInteressenten.Create(self); FActiveFrame.Parent:=TabSheet1; TabSheet1.Caption := 'Interessenten'; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if (not assigned(FActiveFrame)) or not (FActiveFrame is TFrameObjekte) then begin freeandnil(FActiveFrame); FActiveFrame:=TFrameObjekte.Create(self); FActiveFrame.Parent:=TabSheet1; TabSheet1.Caption := 'Objekte'; end; end; Kann mir nun einer sagen wie ich das ganze so aufrufen kann, dass ich nur den Namen des Frames angeben brauche? Danke |
Re: Frames über deren Namen dynamisch aufrufen
Da fällt mir nur .FindComponent() in Verbindung mit Typvergleich ein
|
Re: Frames über deren Namen dynamisch aufrufen
Hm und wie macht man das?
Damit kenne ich mich ja mal gar nicht aus. Kannst Du mir da evenetuell weiterhelfen? |
Re: Frames über deren Namen dynamisch aufrufen
Zitat:
Vielleicht hilft ja folgende Methode:
Delphi-Quellcode:
Aufruf dann im jeweiligen ButtonClick etwa so:
procedure MakeActiveFrame(AFrameClass: TCustomFrameClass; const ACaption: string);
begin if (not assigned(FActiveFrame)) or not (FActiveFrame is AFrameClass) then begin freeandnil(FActiveFrame); FActiveFrame:=AFrameClass.Create(self); FActiveFrame.Parent:=TabSheet1; TabSheet1.Caption := ACaption; end; end;
Delphi-Quellcode:
bzw.
MakeActiveFrame(TFrameShowInteressenten, 'Interessenten');
Delphi-Quellcode:
MakeActiveFrame(TFrameObjekte, 'Objekte');
|
Re: Frames über deren Namen dynamisch aufrufen
Da du die Frames dynamisch erzeugst und auch danymisch die Namen vergibst wäre es doch sinnvoller beim erzeugten der Frames diese in eine Liste zu packen.
@Uwe: FindComponent findet auch dynamisch erzeugte Komponenten sofern der Owner beim erzeugen angegeben wurde und dann die Methode FindComponent des Owners aufgerufen wird. |
Re: Frames über deren Namen dynamisch aufrufen
Wenn die Form Owner deines Frames ist kannst du diese über den namen seiner Kinder abfragen
Delphi-Quellcode:
if <Form>.FindComponent('<Komponentename'>).ClassName is TFrame then TFrame(<Form>.FindComponent('<Komponentename'>)).<Eigenschaft> ...
|
Re: Frames über deren Namen dynamisch aufrufen
Zitat:
|
Re: Frames über deren Namen dynamisch aufrufen
Also ich erzeuge die Frames nicht dynamisch.
Die sind fix und fertig und sollen dann über eine ComboBox, die die Namen der Frames beinhaltet, geladen werden, wobei der parent ein Panel auf der Hauptform ist. Mit der oben gezeigten Procedure komme ich auch nicht weiter.
Delphi-Quellcode:
bekomme ich nur die Meldung "[Fehler] uNewInteressent.pas(494): Operator ist auf diesen Operandentyp nicht anwendbar"
procedure TfNewInteressent.Button1Click(Sender: TObject);
begin if (fNewInteressent.FindComponent('frGewerbeMaskeAngebot').ClassName is TFrame) then TFrame(fNewInteressent.FindComponent('frGewerbeMaskeAngebot')).Color := clred; end; |
Re: Frames über deren Namen dynamisch aufrufen
Also was ich will ist einfach nur, dass ich in den unten fett geschriebenen Stellen den Namen der Frames als String übergeben kann und nicht wie jetzt als TFrame
Delphi-Quellcode:
if (not assigned(FActiveFrame)) or not (FActiveFrame is [b]TfrGewerbeMaskeAngebot[/b]) then
begin freeandnil(FActiveFrame); FActiveFrame:=[b]TfrGewerbeMaskeAngebot[/b].Create(self); FActiveFrame.Parent := pnlFrameParent; end; |
Re: Frames über deren Namen dynamisch aufrufen
Hallo,
die Umwandlung eines Strings in eine Klassenreferenz kann mit Hilfe der Funktion ![]() ![]()
Delphi-Quellcode:
So oder ähnlich sollte das funktionieren.
type
TFrameClass = class of TFrame; function FindFrameClass (const aClassName: string; var aFrameClass: TFrameClass): Boolean; var ClassRef : TPersistentClass; begin ClassRef := GetClass(aClassName); Result := Assigned(ClassRef) and ClassRef.InheritsFrom(TFrame); if Result then aFrameClass := TFrameClass(ClassRef); end; // Beispiel für den Einsatz der Funktion: var FrameClass : TFrameClass; begin RegisterClass (TFrameShowInteressenten); RegisterClass (TFrameObjekte); RegisterClass (TfrGewerbeMaskeAngebot); if FindFrameClass('TfrGewerbeMaskeAngebot', FrameClass) then if (not Assigned(FActiveFrame)) or not (FActiveFrame is FrameClass) then begin FreeAndNil (FActiveFrame); FActiveFrame:= FrameClass.Create(Self); FActiveFrame.Parent := pnlFrameParent; end; end; Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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