![]() |
Zugriff auf übergeordnete Units
Guten Tag,
ich habe wieder mal ein Problem. Ich möchte aus einem Frame auf die übergeordnete Unit zugreifen (in der die MainForm definiert wird, die den Frame enthält). Per ValidParentForm(self) kann man auf die übergeordnete Form (in diesem Fall "MainForm") zugreifen kann. Damit ist aber kein Zugriff auf Variablen in der Unit möglich. z.B. Valid ParentForm(self).variable := 'test'; Meine MainUnit:
Delphi-Quellcode:
In einem der Frames (z.B. SearchFrame) soll jetzt auf die Klasse xml zugegriffen werden.
unit mainUnit;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, XPMan, searchUnit, AddUnit, RentingUnit, xmlFunctions; type TMainForm = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; Hilfe1: TMenuItem; AboutMovieManager1: TMenuItem; XPManifest1: TXPManifest; MainTabs: TPageControl; Suchen: TTabSheet; Hinzufuegen: TTabSheet; Verleih: TTabSheet; StatusBar1: TStatusBar; SearchFrame: TSearchFrame; AddFrame: TAddFrame; RentingFrame: TRentingForm; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } xml: TXMLHandler; end; var MainForm: TMainForm; implementation {$R *.dfm} //--------------------------------------------------------- { Beim PRGM-Start alle Daten aktualisieren } procedure TMainForm.FormCreate(Sender: TObject); begin { Informationen in Frames aktualisieren } RentingFrame.init(); SearchFrame.init(); AddFrame.init(); { XML initialisieren } xml := TXMLHandler.Create; end; end. Wie kann ich das gestalten? Vielen dank im Vorraus für eure Hilfe. Viele Grüße TRBB EDIT (Lösung des Problems): Man muss eine Verknüpfung im Frame auf die Klasse erstellen. (Dies muss aus der Hauptform heraus passieren)
Delphi-Quellcode:
//---------------------------------------------------------
{ Beim PRGM-Start alle Daten aktualisieren } procedure TMainForm.FormCreate(Sender: TObject); begin { Informationen in Frames aktualisieren } RentingFrame.init(); SearchFrame.init(); AddFrame.init(); { XML initialisieren } xml := TXMLHandler.Create; //-------> Verknüpfung im Frame auf den XML-Handler-Dings erstellen SearchFrame.xmlHandlerLink := xml; end; |
Re: Zugriff auf übergeordnete Units
Ohne die Unit einzubinden wird das nicht gehen.
|
Re: Zugriff auf übergeordnete Units
Moin,
in der Unit zu deinem Frame definierst du auch eine (gloable) Variable oder eine Eigenschaft innerhalb der Klassendefinition vom Typ TXMLHandler, also
Delphi-Quellcode:
Dein FormCreate musst du dann leicht anpassen:
TSearchFrame = class(TFrame)
// irgendwelche anderen Definitionen... public xmlHandlerLink: TXMLHandler; end;
Delphi-Quellcode:
Dann kannst du im Frame auch auf das gleiche Objekt zugreifen. Natürlich musst du die Unit, in der TXMLHandler definiert wird, im Frame auch mit einbinden.
procedure TMainForm.FormCreate(Sender: TObject);
begin { Informationen in Frames aktualisieren } RentingFrame.init(); SearchFrame.init(); AddFrame.init(); { XML initialisieren } xml := TXMLHandler.Create; // Verknüpfung im Frame auf den XML-Handler-Dings erstellen SearchFrame.xmlHandlerLink:=xml; end; Bis denn Bommel |
Re: Zugriff auf übergeordnete Units
Vielen Dank schon mal!
Ich kenne mich noch nicht so gut aus in Delphi aber müsste nicht SearchFrame.xmlHandlerLink:=xml; eine Kopie der Klasse erstellen und keine Referenz zur xml-Klasse herstellen? Es werden ja zur Laufzeit immer wieder Variablen in der Klasse verändert es darf also keine Kopie erstellt werden. Ich probiere es morgen mal aus, aber es wäre schön wenn sich schonmal jemand dazu äußern könnte. Mfg TRBB |
Re: Zugriff auf übergeordnete Units
Zitat:
Bis denn Bommel |
Re: Zugriff auf übergeordnete Units
Ahh
Tausend Dank! Jetzt habe ich nicht nur die Lösung für mein Problem, sondern zugleich auch noch dazu gelernt!^^ Ich kann wiedermal nur sagen die DP-Community ist super! Vielen Dank und Grüße TRBB |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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 by Thomas Breitkreuz