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 Zugriff auf übergeordnete Units (https://www.delphipraxis.net/103123-zugriff-auf-uebergeordnete-units.html)

TRBB 10. Nov 2007 13:18


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:
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.
In einem der Frames (z.B. SearchFrame) soll jetzt auf die Klasse xml zugegriffen werden.
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;

mkinzler 10. Nov 2007 13:23

Re: Zugriff auf übergeordnete Units
 
Ohne die Unit einzubinden wird das nicht gehen.

Bbommel 10. Nov 2007 14:51

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:
 TSearchFrame = class(TFrame)
           // irgendwelche anderen Definitionen...
           public
             xmlHandlerLink: TXMLHandler;
           end;
Dein FormCreate musst du dann leicht anpassen:

Delphi-Quellcode:
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;
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.

Bis denn
Bommel

TRBB 10. Nov 2007 16:56

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

Bbommel 10. Nov 2007 17:07

Re: Zugriff auf übergeordnete Units
 
Zitat:

Zitat von TRBB
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?

Nein, weil du dir die Variable eines Objektes im Prinzip als einen Zeiger vorstellen kannst. Durch meine Zuweisung wird also dann der Zeiger - und eben nicht das Objekt selbst - kopiert und beide Objekt-Variablen zeigen nachher auf das selbe Objekt.

Bis denn
Bommel

TRBB 10. Nov 2007 17:27

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 02:22 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