Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

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 Überprüfen ob ein Objekt existiert aber wie? (https://www.delphipraxis.net/37259-ueberpruefen-ob-ein-objekt-existiert-aber-wie.html)

Furtbichler 8. Jun 2013 08:58

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Es ist beim 1.Mal einfach <> nil. Du solltest 'mPlayer' (und generell alle Variablen) initialisieren.

DeddyH 8. Jun 2013 08:58

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Das ist eine lokale Variable, richtig? Die werden im Gegensatz zu globalen Variablen oder privaten Klassenfeldern nicht initialisiert, d.h. es steht irgendetwas drin, deshalb ist die Referenz nicht nil, obwohl das Objekt nicht existiert.

WIng2005 8. Jun 2013 09:13

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Hallo zusammen,

danke für die Antworten.....ich blicke irgendwie nicht ganz durch:
Meine Klasse TMPlayer (gekürzt):

Delphi-Quellcode:
type
  TMPlayer = class
  Private
    playlist:TStringlist;
  public
    constructor create();
    //
    //
    destructor Destroy(); override;
  end;
Der Konstruktor wird auch erst aufgerufen, wenn ich das Objekt explizit erzeuge. Dies ist beim Start des Programmes nicht der Fall.
??

DeddyH 8. Jun 2013 09:16

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Das hat aber doch mit der Variablen mPlayer nichts zu tun, die fragst Du doch ab.

stahli 8. Jun 2013 09:23

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Schreib nochmal, was Du genau tun willst.

Die Klasse ist ja nur der Bauplan(Beschreibung) eines Objektes. Das Objekt muss dann noch erzeugt und einer Variablen zugewiesen werden.
Delphi-Quellcode:
Auto := TAuto.Create(Besitzer);
Dabei wird der Constructor ausgeführt, der ja ansonsten einfach eine Methode ist.
Dann kannst Du mit dem Auto arbeiten (fahren ;-) ).

Ob die Variable Auto vorher nil ist oder irgendwelche zufälligen Daten darin stehen hängt davon ab, wo sie deklariert ist.
Am sichersten einfach mal als erstes
Delphi-Quellcode:
Auto := nil;
zuweisen, sofern das Objekt nicht ohnehin gleich richtig erzeugt wird.

DeddyH 8. Jun 2013 09:25

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Zur Verdeutlichung des eben Gesagten:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FBla: TStringlist; //wird automatisch mit nil initialisiert
  public
    { Public-Deklarationen }
  end;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  Bla: TStringlist; //wird NICHT initialisiert, enthält Zufallswert
begin
  if Assigned(Bla) then
    ShowMessage('*Oops*, ein wilder Zeiger');
  if Assigned(FBla) then
    ShowMessage('*Oops*, noch ein wilder Zeiger')
  else
    ShowMessage('Hier ist alles OK');
end;
Der Compiler gibt für die lokale Variable auch eine entsprechende Warnung aus.

WIng2005 8. Jun 2013 20:15

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Hallo zusammen,

danke für eure Unterstützung.

Vorhaben (ganz kurz):
Ich schreibe gerade an einer Haussteuerung. Ein Hauptrechner (vermutl. ein Tablet), der div. Mikrocontroller im Haus via LAN ansteuert. Prinzipiell funktioniert das ganze schon recht gut. Nun möchte ich auch ein Webradio mit einbinden. Am Panel soll dieses aber separat an bzw. ausgeschaltet werden, da ich die Endstufen, die daran hängen gleich mit an bzw. ausschalte. Meine Idee war nun, mit dem Erzeugen des Objektes (mPlayer) aus der zugehörigen Klasse (TMplayer) die Controller anzusteuern. Im Konstruktor an, im Destruktor aus. Das ganze wird dann per Schalter im Programm realisiert. Folglich soll beim 1. Druck das ganze an und bei erneutem Drücken halt aus geschaltet werden. Dazu möchte ich prüfen, welchen Zustand das ganze hat und war der Meinung, dass ich dies idealerweise damit erledigen kann, indem ich prüfe, ob das Objekt erzeugt ist, oder eben nicht.

Klasse:
Delphi-Quellcode:

type
  TMPlayer = class
  Private
    playlist:TStringlist;
  public
    constructor create();
    //Methoden / Eigenschaften
    destructor Destroy(); override;
  end;
Das Objekt:

Delphi-Quellcode:
procedure TMainform.spSkinButtonMplayer3Click(Sender: TObject);
var mPlayer:TMPlayer;
begin
if not assigned(mPlayer) then
  mPlayer:=TMPlayer.create
else freeandnil(mplayer);
end;
Irgendwie zerstört ihr gerade meine Philosophie... :?

schöni 8. Jun 2013 21:45

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Zitat:

Zitat von WIng2005 (Beitrag 1217883)
Hallo zusammen,

danke für eure Unterstützung.

Vorhaben (ganz kurz):
Ich schreibe gerade an einer Haussteuerung. Ein Hauptrechner (vermutl. ein Tablet), der div. Mikrocontroller im Haus via LAN ansteuert. Prinzipiell funktioniert das ganze schon recht gut. Nun möchte ich auch ein Webradio mit einbinden. Am Panel soll dieses aber separat an bzw. ausgeschaltet werden, da ich die Endstufen, die daran hängen gleich mit an bzw. ausschalte. Meine Idee war nun, mit dem Erzeugen des Objektes (mPlayer) aus der zugehörigen Klasse (TMplayer) die Controller anzusteuern. Im Konstruktor an, im Destruktor aus. Das ganze wird dann per Schalter im Programm realisiert. Folglich soll beim 1. Druck das ganze an und bei erneutem Drücken halt aus geschaltet werden. Dazu möchte ich prüfen, welchen Zustand das ganze hat und war der Meinung, dass ich dies idealerweise damit erledigen kann, indem ich prüfe, ob das Objekt erzeugt ist, oder eben nicht.

Klasse:
Delphi-Quellcode:

type
  TMPlayer = class
  Private
    playlist:TStringlist;
  public
    constructor create();
    //Methoden / Eigenschaften
    destructor Destroy(); override;
  end;
Das Objekt:

Delphi-Quellcode:
procedure TMainform.spSkinButtonMplayer3Click(Sender: TObject);
var mPlayer:TMPlayer;
begin
if not assigned(mPlayer) then
  mPlayer:=TMPlayer.create
else freeandnil(mplayer);
end;
Irgendwie zerstört ihr gerade meine Philosophie... :?

Im obigen Listing ist aber ganz eindeutig mPlayer eine lokale Variable für die Instanz des zu testenden Objektes. Ganz so, wie meine Vorgänger schon sagten. mPlayer muss aber global zur Anwendung definiert werden, zum Beispiel im Anwendungsformular. Sonst ist mPlayer nur innerhalb der Methode TMainform.spSkinButtonMplayer3Click() gültig und das reicht für den Test nicht aus.

WIng2005 8. Jun 2013 23:04

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Ahhh..dumm :wall: Danke!

Geändert....läuft...Tag gerettet!

Luckie 8. Jun 2013 23:19

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Wie gibst du das Objekt frei? Nur Free reich6t nicht. Du musst den Zeiger auf das Objekt auch auf nil setzen, damit die Überprüfung mit Assign funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Seite 2 von 5     12 34     Letzte »    

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