![]() |
AW: Überprüfen ob ein Objekt existiert aber wie?
Es ist beim 1.Mal einfach <> nil. Du solltest 'mPlayer' (und generell alle Variablen) initialisieren.
|
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.
|
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:
Der Konstruktor wird auch erst aufgerufen, wenn ich das Objekt explizit erzeuge. Dies ist beim Start des Programmes nicht der Fall.
type
TMPlayer = class Private playlist:TStringlist; public constructor create(); // // destructor Destroy(); override; end; ?? |
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.
|
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:
Dabei wird der Constructor ausgeführt, der ja ansonsten einfach eine Methode ist.
Auto := TAuto.Create(Besitzer);
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:
zuweisen, sofern das Objekt nicht ohnehin gleich richtig erzeugt wird.
Auto := nil;
|
AW: Überprüfen ob ein Objekt existiert aber wie?
Zur Verdeutlichung des eben Gesagten:
Delphi-Quellcode:
Der Compiler gibt für die lokale Variable auch eine entsprechende Warnung aus.
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; |
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:
Das Objekt:type TMPlayer = class Private playlist:TStringlist; public constructor create(); //Methoden / Eigenschaften destructor Destroy(); override; end;
Delphi-Quellcode:
Irgendwie zerstört ihr gerade meine Philosophie... :?
procedure TMainform.spSkinButtonMplayer3Click(Sender: TObject);
var mPlayer:TMPlayer; begin if not assigned(mPlayer) then mPlayer:=TMPlayer.create else freeandnil(mplayer); end; |
AW: Überprüfen ob ein Objekt existiert aber wie?
Zitat:
|
AW: Überprüfen ob ein Objekt existiert aber wie?
Ahhh..dumm :wall: Danke!
Geändert....läuft...Tag gerettet! |
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 20:19 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