Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Schuster 3. Jan 2005 14:10


Überprüfen ob ein Objekt existiert aber wie?
 
Wie kann ich feststellen ob ein Bestimmtes Button oder TPanel existiert?? :gruebel:

Ich erstelle die Komponenten zur Laufzeit.

Mein Problem ist das ich ein Panel.hide machen will --> aber wenn noch nicht erstellt --> Fehlermeldung

Aenogym 3. Jan 2005 14:11

Re: Überprüfen ob ein Objekt existiert aber wie?
 
hi,

Delphi-Quellcode:
if assigned(myButton) then
  //existiert
else
  //existiert nicht
Aenogym

Dax 3. Jan 2005 14:12

Re: Überprüfen ob ein Objekt existiert aber wie?
 
Objekte sind generell Pointer. Deshalb ist ein nicht erstelltes Objekt immer nil ;)
Einfach mit if Objekt <> nil oder Delphi-Referenz durchsuchenAssigned checken (eigentlich das selbe). Sollte bei dem Vergelich true raus kommen, exisitert das Objekt.

Christian Seehase 3. Jan 2005 14:18

Re: Überprüfen ob ein Objekt existiert aber wie?
 
Moin Dax,

Zitat:

Zitat von Dax
Sollte bei dem Vergelich true raus kommen, exisitert das Objekt.

vorsicht.
Wenn das Objekt mit

Delphi-Quellcode:
Objekt.Free;
freigegeben wird, oder lokal deklariert wird, stimmt die Aussage nicht, da dann der Pointer immer noch einen Wert enthält, aber nicht mehr (zumindest zwingend) auf das Objekt verweist.

Sprint 3. Jan 2005 14:30

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

Zitat von Dax
Objekte sind generell Pointer.

:shock:
Du sprichst von einer Variable die eine Objektreferenz beinhaltet.

Zitat:

Deshalb ist ein nicht erstelltes Objekt immer nil
:shock:
Mit Assigned und/oder nil kannst du nur eine Variable prüfen, ob sie eine Objektreferenz beinhaltet oder halt nicht.

Zitat:

Sollte bei dem Vergelich true raus kommen, exisitert das Objekt.
:shock:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
begin

  if Assigned(List) then
  begin
    List.Add('So kann man nicht prüfen, ob ein Objekt existiert.');
    List.Free;
  end;

end;

Dax 3. Jan 2005 14:38

Re: Überprüfen ob ein Objekt existiert aber wie?
 
Vergesst, was ich gesagt habe :roll:

Aenogym 3. Jan 2005 15:12

Re: Überprüfen ob ein Objekt existiert aber wie?
 
oha, okay. dann muss ich micha uch entschuldigen :roll:

Aenogym

choose 3. Jan 2005 15:47

Re: Überprüfen ob ein Objekt existiert aber wie?
 
Vielleicht können die Beiträge im Thread IsObject/IsClass dem Fortkommen dieser Diskussion dienen.

Boombuler 4. Jan 2005 08:11

Re: Überprüfen ob ein Objekt existiert aber wie?
 
Is zwar nich der beste Style aber funktionieren müsste das auch so:
Delphi-Quellcode:
try
  Panel.hide
except end;
denn das sollte in diesem Fall schon ausreichen oder?

Greetz
Boombuler

WIng2005 8. Jun 2013 08:50

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

ich greife dieses Thema nochmal auf, da ich irgendwie hier nicht weiterkomme:
Ich möchte eine Art Toggle erstellen, der per Button ein Objekt erzeugt oder, wenn es schon vorhanden ist freigibt. Eigentlich ging ich davon aus, dass ich dies mit:

Delphi-Quellcode:
var mPlayer:TMPlayer;
begin
if not assigned(mPlayer) then
  mPlayer:=TMPlayer.create
else freeandnil(mplayer);
end;
erreichen könnte. Jedoch bekomme ich schon beim 1. Aufruf im Else-Zweig eine Zugriffsverletzung. Dabei ist mir nur nicht ganz klar, warum Assigned schon beim 1. Prüfen das Objekt als erzeugt erkennt (?). Wo liegt hier mein Denkfehler?

Danke für eure Hilfe!!

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.

WIng2005 9. Jun 2013 00:29

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

Delphi-Quellcode:
freeandnil(mplayer)
Delphi-Quellcode:
destructor TMPlayer.destroy;
 begin
 try
  // Abschalten + div Einstellungen zurücksetzen
 finally
  mplayer:=nil;
  inherited destroy;
 end;
 end;
Hoffe mal, das passt so..

Sir Rufo 9. Jun 2013 00:38

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

Eine globale Variable ist schon mal pauschal pfui.
Eine globale Variable innerhalb des
Delphi-Quellcode:
destructors
(so) auf
Delphi-Quellcode:
nil
zu setzen ist der totale SuperGAU und daher immer falsch (selbst wenn es compiliert und anscheinend läuft).

WIng2005 9. Jun 2013 00:50

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Guten Morgen ;)
Wie wäre es dann besser?

DeddyH 9. Jun 2013 09:29

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Delphi-Quellcode:
destructor TMPlayer.destroy;
begin
  // Abschalten + div Einstellungen zurücksetzen
  inherited destroy;
end;
Und dort, wo Du die Objektinstanz freigibst, dann
Delphi-Quellcode:
FreeAndNil(mPlayer);

WIng2005 9. Jun 2013 16:36

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

danke für die Antwort. Das Ganze hatte ich nach ein wenig drüber nachdenken schon geändert. Nun würde ich gern noch das "Eine globale Variable ist schon mal pauschal pfui" angehen. Ich hatte mir mal das Buch "Class in a box" gekauft. Dort ist das gängige Praxis, was ja nicht heißen muss, dass es "optimal" ist.
Momentan habe ich die Variable im Interface-Abschnitt meines Hauptprogrammes deklariert:

Delphi-Quellcode:
unit Main;

interface
uses
//

type
  TMainform = class(TForm)
   //
   //
 private
   //
  public
   //
  end;

var
  Mainform: TMainform;
  mPlayer: TMPlayer;

implementation

//usw.
Spricht da prinzipiell was dagegen?
Danke für eure Hilfe!!

DeddyH 9. Jun 2013 16:43

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Damit hat jede Unit, die Main einbindet, uneingeschränkten Zugriff auf die Instanz. Willst Du das? Oder wäre es nicht besser, sie als privates Feld des Formulars zu deklarieren und den Zugriff nur über definierte Schnittstellen (wenn überhaupt) zu erlauben?

Furtbichler 9. Jun 2013 18:28

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Ein Singleton wäre hier noch eine Alternative. Eine Unit verwaltet Instantiierung, Zugriff und Freigabe. So etwa:

Delphi-Quellcode:
Unit MPlayer;
interface

function MediaPlayer : TMediaPlayer;
implementation
var
  _mediaPlayer : TMediaPlayer;
  _finalized : boolean;

Function MediaPlayer : TMediaPlayer;
Begin
  if _mediaPlayer=nil then
   if _finalized then
     Raise Exception.Create('Application has shut down.')
   else
     _mediaPlayer := TMediaPlayer.Create;

  result = _mediaPlayer;
end;

initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end.
Der Zugriff erfolgt nur über die Funktion 'MediaPlayer', die bei Bedarf eine -und nur eine- Instanz erstellt.

Ich persönlich würde den Zugriff auf ein Gerät nicht in einem Formular kapseln, denn das ist dafür nicht zuständig. Das Gerät selbst muss wissen, ob es nur von einer Entität bedient werden kann oder ob es mit mehreren Anwendern klar kommt.

Sir Rufo 10. Jun 2013 08:28

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Also speziell in diesem Fall mit dem MediaPlayer würde ich ein Facade Design Pattern wählen.

Mal vereinfacht angenommen, der MediaPlayer soll sich nachher bedienen lassen mit den Funktionen Play, Stop, Power (zum Ein-/Ausschalten), dann würde die Facade so aussehen:
Delphi-Quellcode:
IMediaPlayerFacade = interface
  {GUID}
  procedure Play;
  procedure Stop;
  procedure Power;
end;
Eine konkrete Facade wäre dann z.B.
Delphi-Quellcode:
TMediaPlayerFacade = class( TInterfacedObject, IMediaPlayerFacade )
private
  FPlayer : TMPlayer;
protected
  procedure Play;
  procedure Stop;
  procedure Power;
end;

procedure TMediaPlayerFacade.Play;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu starten }
    end;
end;

procedure TMediaPlayerFacade.Stop;
begin
  if Assigned( FPlayer )
  then
    begin
      { Hier der Code um den Player zu stoppen }
    end;
end;

procedure TMediaPlayerFacade.Power;
begin
  if Assigned( FPlayer )
  then
    begin
      FreeAndNil( FPlayer );
    end
  else
    begin
      FPlayer := TMPlayer.Create;
    end;
end;
Da der MediaPlayer aber nur eine Komponente von der Haussteuerung ist (nehme ich mal an), brauchen wir ein globales Steuerung-Element, wo alle anderen Facades gesammelt werden
Delphi-Quellcode:
IHausSteuerung = interface
  {GUID}
  function GetMediaPlayer : IMediaPlayerFacade;
  property MediaPlayer : IMediaPlayerFacade read GetMediaPlayer;
end;
Konkret kann das jetzt wie folgt umgesetzt werden
Delphi-Quellcode:
unit HausSteuerungSingleton;

interface

uses
  HausSteuerungIntf;

function HausSteuerung : IHausSteuerung;

implementation

uses
  MediaPlayerFacadeIntf,
  MediaPlayerFacade;

var
  _HausSteuerung : IHausSteuerung;

type
  THausSteuerung = class( TInterfacedObject, IHausSteuerung )
  private
    FMediaPlayer : IMediaPlayerFacade;
  protected
    function GetMediaPlayer : IMediaPlayerFacade;
  public
    constructor Create;
  end;

constructor THausSteuerung.Create;
begin
  inherited;
  FMediaPlayer := TMediaPlayerFacade.Create;
end;

function THausSteuerung.GetMediaPlayer : IMediaPlayerFacade;
begin
  Result := FMediaPlayer;
end;

function HausSteuerung : IHausSteuerung;
begin
  if not Assigned( _HausSteuerung )
  then
    _HausSteuerung := THausSteuerung.Create;

  Result := _HausSteuerung;
end;
Der Lohn der Mühe ist dann die vereinfachte Benutzung der Module.

3 Button auf die Form geklatscht, die Unit
Delphi-Quellcode:
HausSteuerungSingleton
in die
Delphi-Quellcode:
implementation
Uses-Liste aufnehmen und die Button-OnClick Ereignisse jeweils mit
Delphi-Quellcode:
HausSteuerung.MediaPlayer.Power;
// bzw.
HausSteuerung.MediaPlayer.PLay;
// bzw.
HausSteuerung.MediaPlayer.Stop;
verdrahten

WIng2005 11. Jun 2013 21:49

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

vielen Dank für die Ansätze/Vorschläge. Die letzten beiden werde ich mir wohl mal als "Bettlektüre" drucken müssen....(um sie zu verstehen ;) )

WIng2005 11. Jun 2013 22:21

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

Kannst du mal bitte kurz erläutern, welchen Zweck dieser Bereich erfüllt, bzw. wann dieser aufgerufen wird?:

Delphi-Quellcode:
initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end
Danke euch allen!!!

Sir Rufo 11. Jun 2013 23:13

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Doku http://docwiki.embarcadero.com/RADSt...amme_und_Units ;)

Furtbichler 12. Jun 2013 07:33

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

Zitat von WIng2005 (Beitrag 1218312)
@Furtbichler

Kannst du mal bitte kurz erläutern, welchen Zweck dieser Bereich erfüllt, bzw. wann dieser aufgerufen wird?:

Delphi-Quellcode:
initialization
  _finalized := false;
  _mediaplayer := nil;
finalization
  _finalized := true;
  FreeAndNil(_mediaplayer);
end
Danke euch allen!!!

Klar:
Beim Starten der Anwendung werden alle 'Initialization'-Bereiche aller eingebundenen (explizit und implizit) Units aufgerufen: der richtige Ort, um Variablen zu initialisieren. Global ist 'böse' bzw. sollte vermieden werden, aber wer statische Klassen albern findet, kann hier in the old fashioned way seine statischen Felder initialisieren.

Beim Beenden wird der 'Finalization'-Abschnitt aller Units aufgerufen. Hier kann man aufräumen.

Ich initialisiere die Variable '_mediaplayer' mit nil. Beim ersten Aufruf der Funktion 'Mediaplayer' wird sie initialisiert. Aber nur dann, wenn der Finalization-Abschnitt noch nicht durchlaufen wurde.

WIng2005 14. Jun 2013 09:05

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Danke euch beiden!
Werde mir das heute abend mal anschauen bzw. ausprobieren.

derMischka 14. Jun 2013 13:06

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Darlo 14. Jun 2013 19:21

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

Zitat von derMischka (Beitrag 1218610)
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Leere Exception-Blöcke sind doch noch böser als globale Vars. :duck:

Furtbichler 14. Jun 2013 20:00

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

Zitat von Darlo (Beitrag 1218635)
Zitat:

Zitat von derMischka (Beitrag 1218610)
Hier noch ein weiter Ansatz:

Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := False;
  if aObj = nil then exit;
  try
    Result := aObj.InheritsFrom(TObject);
  except
  end;
end;
derMischka

Leere Exception-Blöcke sind doch noch böser als globale Vars. :duck:

Absolut korrekt, obwohl hier 'eigentlich' eine scheinbar gute Absicht dahinter steckt, nämlich auch nicht genullte, aber ungültige Zeiger als solche zu erkennen.

Aber das kaschiert ja nur den eigentlichen Fehler. Und *das* ist sogar noch schlimmer als leere exception-Blöcke.

Namenloser 14. Jun 2013 23:32

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Das ganze Konstrukt ist böse. An der Stelle im Speicher kann ja gerade rein „zufällig“ was stehen, was so aussieht wie ein Objekt. Und ausgerechnet in dem Fall, dass das Objekt gerade freigegeben wurde, ist es sehr wahrscheinlich, dass die Daten noch 1:1 dort stehen, obwohl das Objekt theoretisch nicht mehr existiert (es sei denn, Delphi nullt den Speicherbereich nach der Freigabe, tut es aber soweit ich weiß nicht).

Furtbichler 14. Jun 2013 23:45

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Wie böser kann man eigentlich werden, also böser als *Böse*? Nicht das das hier abfärbt und irgendwie ein Eigenleben entwickelt.

Nichtsdestotrotz: Richtiger Einwand.

derMischka 15. Jun 2013 16:37

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

Da das Ergebnis mit False oben initialisiert ist, braucht man die "nur lesende" Funktion in der Exception-Klammer ncht weiter behandeln --> es wurde kein Code verändert (da nur gelesen) und bei einer Exception ist das richtige Ergebnis (False) ja schon im Register eax.

der Mischka

nahpets 15. Jun 2013 17:14

AW: Überprüfen ob ein Objekt existiert aber wie?
 
Besser? Oder auch noch böse? ;-)
Delphi-Quellcode:
function ObjectExists(aObj: TObject): boolean;
begin
  Result := aObj <> nil;
  if Result then
  try
    Result := aObj.InheritsFrom(TObject);
  except
    Result := false;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr.
Seite 1 von 2  1 2      

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