![]() |
eigener Typ in Form1, wie von einer Unit zugreifen?
Hallo,
ich habe ein kleines Problem mit einen eigenen Typ, es ist eine Klasse. Ich habe eine einzelne Unit in der einige Prozeduren sind, nun kann ich aber leider nicht auf den Typ zugreifen, obwohl ich die Form1 in der uses Klausel eingebunden habe:
Delphi-Quellcode:
//Form1
unit Form_1; interface uses Windows, Messages, SysUtils, ..., Graphics, Controls, Forms; type TMediaObject = class //mein eigener Typ private { Private-Deklarationen } PCharFileName: PChar; FileName: String; FileExt: String; FileType: Integer; public { Public-Deklarationen } end; type TForm1 = class(TForm) MainMenu: TMainMenu; FileM: TMenuItem; .. .. var Form1: TForm1; MediaObject: TMediaObject;
Delphi-Quellcode:
Wie kann ich auf den Typ bzw. auf die Variable "MediaObject", die global in der Form1 deklariert ist, in der Unit1 zugreifen? Muss ich dazu den Typ woanders hinterlegen, wenn ja: wo?
unit Unit1;
interface uses Forms, Form_1, ..., UnitConst, IniFiles Dialogs, ComCtrls; function SetData(FileName: String): Boolean; function InstallExt(Ext, ExtDescr, FileDescr, OpenWith: String): Boolean; function UnInstallExt(Ext, ExtDescr: String): Boolean; procedure GetError(Msg, Code: String); procedure SetFormsPosition(TopForm, X1, X2, X3: Integer); procedure RestoreSettings; implementation function SetData(FileName: String): Boolean; begin If MediaObject.FileName = FileName then Result:=True; //Hier ist das Problem end; Gruß Mazel |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Delphi-Quellcode:
Es wäre Zuckersüß von dir, wenn du uns jetzt auch noch sagen würdest was das für ein Problem ist, was sagt denn der Compiler da es eigentlich funktionieren müsste...
If MediaObject.FileName = FileName then Result:=True; //Hier ist das Problem
|
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Wurde das Objekt irgendwo erzeugt?
Hats du die Unit in deiner zweiten Unit eingebunden(in der Uses-klausel)? Edit: zum Erzeugen würde ich den Initialization-Bereich nehmen, da du das Objekt scheinbar dauerhaft/von Anfang an brauchst. |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Oh,
sorry, habe ich vergessen:
Delphi-Quellcode:
[Fehler] Unit1.pas(1080): Undefinierter Bezeichner: 'FileName'
//auch in der Unit1
MediaObject:=TMediaObject.Create; //erzeugen kann ich es aber nicht auf die Variablen zugreifen MediaObject.FileName:='test'; //hier der Fehler |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Du musst die var Filename als public deklarieren
Delphi-Quellcode:
public
filename: string; ... |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Weil die Variablen Private sind ;-) tu sie in den public Block dann gehts ;-)
mfg //ROT |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Jetzt will ich aber auch noch ;-)
In private kannst du nur im TMediaObject zugreifen, nicht außerhalb. |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
:wall:
Ja, danke. Da der Type ganz oben in der Form deklariert ist, habe ich alle Variablen private deklariert, weil ich dachte die würden dann sowieso public sein. Ich weis nicht wie ich auf den Gedanken gekommen bin ;) Danke Gruß Mazel |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Grüße,
das problem ist, dass FileName: String; im private-Bereich deklariert ist. Das ist nicht unbedingt ein Problem aber nur die halbe Miete. 1. Benenne aber vorher FileName in FFileName um! Das ist Delphikonform. Attribute einer Klasse gehen ein F zuvor. 2. Erstelle im public- Bereich eine property für FileName:
Delphi-Quellcode:
Über diese Property kannst du dann aus anderen Units darauf zugreifen.
property FileName: String read FFileName write FFileName;
Alles was im private erstellt ist kann nur innerhalb derselben unit verwendet werden. PS: Zitat:
Du kannst innerhalb der selben unit überall darauf zugreifen. In D06 (vielleicht auch D05 ?) wurde ein neuer Bereich strictprivate eingeführt. Attribute in diesem Bereich können nur von dem Objekt gesehen werden |
Re: eigener Typ in Form1, wie von einer Unit zugreifen?
Hi,
warum muss ich eine property erstellen, dass kenn ich nur aus dem Erstellen eigener Komponenten, dort verwende ich auch das "F" vor dem eigentlichen Bezeichner. In einm eigenen Typ hab ich das noch nie gemacht. Die Form ist doch auch eine Klasse vom Typ TForm
Delphi-Quellcode:
Button1 ist zwar keine Variable aber trägt hier auch kein "F".
type
TForm1 = class(TForm) private Button1: TButton; { Private-Deklarationen } public { Public-Deklarationen } end; OffTopic: Wenn ich Variablen deklariere, wo soll ich sie deklarieren? Ich kenne viele Sourecodes bei denen die Variablen im private oder public Abschnitt oder unter var (global oder lokal) deklariert werden. ich selber deklariere sie immer unter var. Was ist nun richtig (bzw. Delphikonform) ;) ? Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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