Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigener Typ in Form1, wie von einer Unit zugreifen? (https://www.delphipraxis.net/74762-eigener-typ-form1-wie-von-einer-unit-zugreifen.html)

Mazel 8. Aug 2006 12:56


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:
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;
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?

Gruß
Mazel

arbu man 8. Aug 2006 12:59

Re: eigener Typ in Form1, wie von einer Unit zugreifen?
 
Delphi-Quellcode:
If MediaObject.FileName = FileName then Result:=True; //Hier ist das Problem
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...

Angel4585 8. Aug 2006 13:01

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.

Mazel 8. Aug 2006 13:04

Re: eigener Typ in Form1, wie von einer Unit zugreifen?
 
Oh,

sorry, habe ich vergessen:

Delphi-Quellcode:
//auch in der Unit1
 MediaObject:=TMediaObject.Create; //erzeugen kann ich es aber nicht auf die Variablen zugreifen
 MediaObject.FileName:='test'; //hier der Fehler
[Fehler] Unit1.pas(1080): Undefinierter Bezeichner: 'FileName'

arbu man 8. Aug 2006 13:08

Re: eigener Typ in Form1, wie von einer Unit zugreifen?
 
Du musst die var Filename als public deklarieren
Delphi-Quellcode:
public
  filename: string;
  ...

EDatabaseError 8. Aug 2006 13:10

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

ManuMF 8. Aug 2006 13:10

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.

Mazel 8. Aug 2006 13:11

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

angos 8. Aug 2006 13:14

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:
property FileName: String read FFileName write FFileName;
Über diese Property kannst du dann aus anderen Units darauf zugreifen.
Alles was im private erstellt ist kann nur innerhalb derselben unit verwendet werden.


PS:
Zitat:

In private kannst du nur im TMediaObject zugreifen, nicht außerhalb.
ist fast richtig ;)
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

Mazel 8. Aug 2006 15:57

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:
type
   TForm1 = class(TForm)
   private
     Button1: TButton;
     { Private-Deklarationen }
   public
     { Public-Deklarationen }
   end;
Button1 ist zwar keine Variable aber trägt hier auch kein "F".

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 13:01 Uhr.
Seite 1 von 2  1 2      

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