AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

feststellen ob Object existiert!

Ein Thema von fredel007 · begonnen am 16. Dez 2003 · letzter Beitrag vom 21. Nov 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 06:16
Zitat:
Es ging darum zu prüfen ob das Objekt (die Komponente) irgendwann bereits mit Create erstellt wurde. Unabhängig davon ob sie noch nie erstellt wurde oder irgendwann mal mit Free bzw. FreeAndNil freigegeben wurde.
Das widerspricht sich.

Der Operator is nützt Dir an dieser Stelle gar nix. So wirst Du nie

StringList := TStringList.Create; erreichen, denn StringList : TStringList ist immer vom Typ TStrings.

Der Operator is dient nur der Klassentypüberprüfung einer Variable. Um zu prüfen, ob eine Instanz von StringList existiert, musst Du dich an die obige Antwort halten.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#12

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 06:24
ich würde es so machen:
Delphi-Quellcode:
if (not (StringList is TStringsList)) then
begin
  StringList := TStringList.Create;
end;
Dabei jedoch die Variable StringList vom Typ TStrings deklarieren, aber als eine TStringList erzeugen. Also so:
Delphi-Quellcode:
var StringList: TStrings; // so deklarieren
{...}
proecedure TForm1.FormCreate(Sender: TObject);
begin
  StringList := TStringList.Create; // so erzeugen
end;
Das müsste funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 06:31
leider nein,

*/meineantwortkopier/*
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 06:50
Hallo Puhbaehr,
man sollte sich angewöhnen, Objekte, welche dynamisch erzeugt werden, immer mit nil zu initialisieren.
Jetzt ist natürlich wichtig, wo deine Variable des Typs TStrings definiert ist.
Gehört sie global zur Unit des Forms, so sollte man das im Constructor mit:
StringList := nil;
erledigen. Die Prüfung mit Assigned(StringList) ist üblich und funktioniert, solange man das Freigeben der Stringlist, wie schon im Thread erläutert, mit FreeAndNil(StringList) erledigt.
Ist StringList eine lokale Variable in einer Procedure, so ist eine Prüfung auf die Existenz dieser eh unsinnig.
Also musst du nur die richtige Stelle für die Initialisierung auf nil finden!
Gruß, Frank
Frank Reim
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#15

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 07:18
Vielleicht hilft Dir der Thread IsObject/IsClass weiter, eine "endgültige" Lösung gibt es aber leider auch dort (noch) nicht.
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#16

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 09:14
@malo:

wenn ich aber jetzt auf ein noch nicht initialisiertes Objekt (in 'ner lokalen Variable) prüfen lassen, dann bekomm ich aber einen netten Fehler und dat Programm verreckt.

Delphi-Quellcode:
var StringList: TStringList;
begin
  // StringList := Pointer($12314564); // notfalls könnte man ja auch seber mal einen undefinierten Wert einfügen
  if (not (StringList is TStringList)) then
  begin
    StringList := TStringList.Create;
  end;
  StringList.Free;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#17

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 20:40
Zitat von dataspider:
...man sollte sich angewöhnen, Objekte, welche dynamisch erzeugt werden, immer mit nil zu initialisieren...
Naja, leuchtet mir erstmal ein. Sozusagen setze ich das Objekt im Constructor (bzw. FormCreate) auf nil. Anschließend kann ich beliebig prüfen ob das Objekt bereits existiert. Aber somit müsste ich trotzdem sicherstellen, dass das Objekt mit nil initialisert wurde. Oder anders: Ich könnte das Objekt gleich im Constructor erstellen (Create). Somit wäre das Problem hinfällig.
Ich hab aber leider nicht immer die Möglichkeit den Constructor aufzurufen. Ich könnte ja auch eine typungebundene Funktion haben die beliebig aufgerufen werden kann und die das Objekt benutzt.

Ich möchte halt nur prüfen ob das Objekt das ich gleich erstelle schonmal erstellt wurde.
Der Operator is funktioniert dahingehend schoneinmal. Bis jetzt zumindest.
Aber es muss doch etwas geben, dass hunderprozentig sicherstellt, dass das Objekt existiert.
In JavaScript kann ich das mit if (Object) ... tun.
Wie mach ich das in Delphi?

Gruß, Robert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:19 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