AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Überprüfen ob ein Objekt existiert aber wie?

Überprüfen ob ein Objekt existiert aber wie?

Ein Thema von Schuster · begonnen am 3. Jan 2005 · letzter Beitrag vom 27. Dez 2020
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Furtbichler
(Gast)

n/a Beiträge
 
#11

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

  Alt 8. Jun 2013, 09:58
Es ist beim 1.Mal einfach <> nil. Du solltest 'mPlayer' (und generell alle Variablen) initialisieren.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#12

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

  Alt 8. Jun 2013, 09:58
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#13

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

  Alt 8. Jun 2013, 10:13
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.
??
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#14

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

  Alt 8. Jun 2013, 10:16
Das hat aber doch mit der Variablen mPlayer nichts zu tun, die fragst Du doch ab.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 8. Jun 2013, 10:23
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.
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 Auto := nil; zuweisen, sofern das Objekt nicht ohnehin gleich richtig erzeugt wird.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#16

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

  Alt 8. Jun 2013, 10:25
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#17

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

  Alt 8. Jun 2013, 21:15
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...
MFG
Steffen
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#18

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

  Alt 8. Jun 2013, 22:45
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.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#19

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

  Alt 9. Jun 2013, 00:04
Ahhh..dumm Danke!

Geändert....läuft...Tag gerettet!
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

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

  Alt 9. Jun 2013, 00:19
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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