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 1 von 2  1 2      
fredel007

Registriert seit: 29. Okt 2003
Ort: Wörth am Rhein
25 Beiträge
 
#1

feststellen ob Object existiert!

  Alt 16. Dez 2003, 12:58
Hi Leute,
ich hab gerade versucht herauszufinden wie ich feststellen
kann ob ein objeckt existiert, bin aber leider zu keinem ergebniss gekommen!
kann mir jemand von euch helfen?




Delphi-Quellcode:
if "Objekt existiert" then
begin
  //source
end;
ich suche nur den befehl um festzustellen ob das gewünschte object z.B. ein Tshape bereits
existiert!



schon mal vielen dank!
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: feststellen ob Object existiert!

  Alt 16. Dez 2003, 12:59
Delphi-Quellcode:
if assigned(meinObjkt) then
.
.
.
Gruß
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#3

Re: feststellen ob Object existiert!

  Alt 16. Dez 2003, 13:02
Hallo fredel007,

dürfte auf TShape auch anwendbar sein:

Code:
  if (FindComponent('lbl821') is TLabel) then begin
mfg
eddy
  Mit Zitat antworten Zitat
fredel007

Registriert seit: 29. Okt 2003
Ort: Wörth am Rhein
25 Beiträge
 
#4

Re: feststellen ob Object existiert!

  Alt 16. Dez 2003, 13:06
ihr seid echt super!!!!

jetzt klappts!

danke!
  Mit Zitat antworten Zitat
choose

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

Re: feststellen ob Object existiert!

  Alt 16. Dez 2003, 13:06
Hallo fredel007,

solltest Du eine Referenz auf das Objekt besitzen und handelt es sich um eine globale Variable oder eine Exemplarvariable ist sie mit nil vorbelegt. Der Test könnte dann lauten
if FMyShape <> nil then oder if Assigned(FMyShape) then allerdings funktioniert dieser Test nur, wenn das Objekt nicht zwischenzeitlich freigegen worden ist, ohne dass diese Referenz zurück auf nil gesetzt wurde.
Solltest Du das Objekt "beim Namen" kennen, sollte TComponent.FindComponent (siehe OH) weiterhelfen...

Kannst Du Deine Situation noch etwas genauer schildern?
gruß, choose
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: feststellen ob Object existiert!

  Alt 16. Dez 2003, 16:13
Moin Fredel,

und wenn Du das Objekt freigibst, dann mit

Code:
FreeAndNil(Objektbezeichner);
// oder
Objektbezeichner.Free;
Objektbezeichner := nil;
ansonsten würde nach einer Freigabe des Objektes noch ein Wert in der Variablen stehen, der dann aber auf einen ungültigen Speicherbereich zeigt, was zur Folge hätte, dass die Abfrage <> nil bzw. Assigned true zurückliefert obwohl nicht mehr auf ein Objekt gezeigt wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#7

Re: feststellen ob Object existiert!

  Alt 20. Nov 2005, 23:50
Servus!

Das Thema hier ist zwar sehr alt, aber interessant für mein Problem. Und warum einen Thread nochmal eröffnen:

Ich muss prüfen ob eine Variablenreferenz existiert bevor ich sie mit Create neu erstelle.

Soll in etwa so aussehen:

Delphi-Quellcode:
...
var
  StringList : TStrings;
...
if (not (Exists (StringList))) then
 begin
  StringList := TStringList.Create;
 end;
...
Ich dachte erst, ich kann das mit StringList <> nil prüfen. Assigned funktioniert auch nicht so recht. Jedesmal tritt eine Exception auf (EAccessViolation). Gibt es noch andere Möglichkeiten?

Gruß, Robert
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 00:05
Moin Robert,

wenn Du in dem Falle eine AV bekommst, dann enthält StringList einen Wert <> nil zeigt aber nicht auf eine Instanz des Objektes.
Der gezeigte Sourcecodeabschnitt lässt da allerdings keine Aussage zu (mal abgesehen davon dass die Exists-Abfrage wohl als Metacode zu verstehen ist.)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 00:06
Das Problem mit <>NIL und Assigned wurde ja schon erörtert ... wenn die Variable nicht mit NIL initialisiert, oder das Objekt beim Freigeben wieder auf NIL gesetzt wurde, dann ist in der Variable ja noch ein Pointer auf etwas, welches aber nichtmehr das uhrsprüngliche Objekt enthält, sondern irgendwas anderes.


Die einzige wirkliche Lösung ist undbleibt halt immernoch dafür zu sorgen, das die Variable auf NIL steht, wenn kein Objekt enthalten ist.

Eine Möglichkeit, welche mir gerade einfällt ist allerdings etwas radikal.
Und zwar kannst du ja einfach mal etwas von dem Objekt aufrufen und bei einem Fehler existiert es nicht.
Delphi-Quellcode:
Try
  If StringList.Count <> 0 Then ;
Except
  StringList := TStringList.Create;
End;
Delphi-Quellcode:
If StringList <> NIL Then Begin
  Try
    If StringList.Count <> 0 Then ;
  Except
    StringList := TStringList.Create;
  End;
End Else StringList := TStringList.Create;
Delphi-Quellcode:
Try
  If StringList.Count <> 0 Then ;
Except
  StringList := NIL;
End;
If StringList = NIL Then StringList := TStringList.Create;
Es gibt dabei allerdings ein Problem (welches aber auch alle anderen Testverfahren haben werden, welche nachschauen, ob das Objekt, welches in einer Variable steckt auch wirklich existiert.
Und zwar, wenn rein zufällig ein anderes Objekt an der selben Stelle im RAM rumliegt, worauf die Variable(Pointer) zeigt, dann wird jedes Testverfahren ein "Ja, es existiert" zurückliefern,
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
 
#10

Re: feststellen ob Object existiert!

  Alt 21. Nov 2005, 00:22
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.

Ich hab etwas weiter überlegt und gesucht und bin auf den Operator is gekommen.

Delphi-Quellcode:
if (not (StringList is TStrings)) then
 begin
  StringList := TStringList.Create;
 end;
Damit sollte es doch gehen oder?

Das Abfangen der Exception mit try...except bzw. try...finally wäre allenfalls eine Notlösung.
Aber selbst bevor die Exception ausgelöst wird wurde ja irgendwie festgestellt, dass das Objekt nicht existiert. Oder registriert der Compiler einfach nur, dass "irgendwas" auf "irgendwas" zugreifen wollte was gar nicht existiert?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:10 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