![]() |
Object in Variable sichern?
Moin !
Ich stehe da mal wieder vor einem kleinen Object bzw. Klassen Problem :roll: Also wir haben da ein paar Klassen für Geräte. die nennen sich dann z.B. TLVSpectraII und TLVPowerPeak. Je nachdem welches Gerät wir nun gerade bedienen müssen wir ein Object von der Klasse erzeugen. Bis hierhin noch einfach ... SpectraII := TLVSpectraII.Create(Self); Nun würde ich aber gerne irgendwie das zuletzt erzeugte Object sichern. Weil wenn ich ein anderes Gerät lade, dann möchte ich in dieser Variable nachsehen welches Object aktuell ist und dieses dann löschen. Danach kann dann das neue Object angelegt werden. Ich hatte es hiermit versucht: LastObject := SpectraII; Wobei folgendes definiert ist: LastObject : TObject; Aber so scheint es nicht wirklich zu funktionieren. Denn ein LastObject.Destroy bewirkt gonix. Kann mir da jemand einen Tip geben? Greetz Dominik |
Re: Object in Variable sichern?
Ja, verwende niemals, nie Destroy direkt, sondern Free.
|
Re: Object in Variable sichern?
Zitat:
Delphi-Quellcode:
Oder sind es visuelle Komponenten (=Steuerelemente)?
var
LastObject : TComponent; // besser man nimmt den gemeinsamen Vorfahren aals Datentyp Dann wäre TControl die passende Klasse. |
Re: Object in Variable sichern?
Moin !
Zitat:
Zitat:
Zitat:
|
Re: Object in Variable sichern?
Zitat:
1.) von TPersistent statt TObject abzuleiten (die Vorteile merkst du aber erst mit zunehmender Erfahrung) 2.) eine gemeinsame Basisklasse für alle Geräte schaffen
Delphi-Quellcode:
3.) überlegen, welche Eigenschaften um Methoden allen Klassen gemeinsam sind
TLVDevice = class(TPersistent)
end; TLVSpectraII = class(TLVDevice) um diese in die Basisklasse zu verlagern z.B. könnte jedes Gerät einen Gerätenamen haben (property DeviceName) oder jedes Gerät muss geöffnet und geschlossen werden
Delphi-Quellcode:
procedure Open; virtual;
procedure Close; virtual; |
Re: Object in Variable sichern?
Zitat:
Delphi-Quellcode:
TKlasseA = class(TObject)
public destructor Destroy; override; end; TKlasseB = class(TObject) public destructor Destroy; override; end; implementation destructor TKlasseA.Destroy; begin ShowMessage('Klasse A sagt Bye-bye...'); inherited; end; destructor TKlasseB.Destroy; begin ShowMessage('Klasse B sagt Bye-bye...'); inherited; end; [...] var KlasseA: TKlasseA; Klasse: TObject; begin KlasseA := TKlasseA.Create; Klasse := KlasseA; Klasse.Free; end; |
Re: Object in Variable sichern?
Moin !
@shmia: Danke für den Tip. Das kann man machen. So in etwa wäre es bei uns der nächste Schritt gewesen. Aber das kann man ja auch vorziehen. Zitat:
Die Sache mit Open und Close würde sicher funktionieren. Ist aber mit Mehraufwand verbunden, der irgendwann überflüssig wird. Wir wollen irgendwann mehrere Geräte parallel bedienen. Dazu muss ich mir dann eh irgendwo merken welche Objekte existieren. Also mein Grundproblem besteht nach wie vor. Wie kann ich ein Object in einer Varible sichern? Ich denke das geht mit einem Zeiger. Weiss aber nicht wie ... @rwachtel: Zitat:
Delphi-Quellcode:
Danach habe ich eine Datei geladen die das Objekt SpectraII verwendet. Aber da ich keine Exception bekommen habe muss es immer noch existent gewesen sein.
SpectraII := TLVSpectraII.Create(Self);
LastObject := SpectraII; LastObject.free; |
Re: Object in Variable sichern?
Zitat:
|
Re: Object in Variable sichern?
Aha, also funktioniert das so wie ich es gemacht habe?
Also erst ...
Delphi-Quellcode:
und dann halt
var
LastObject: TObject;
Delphi-Quellcode:
Wenn ich dann ein neues Gerät bedienen will tue ich folgendes:
SpectraII := TLVSpectraII.Create(Self);
LastObject := SpectraII;
Delphi-Quellcode:
LastObject.free;
neuesGeraet := TLVneuesGeraet.Create(Self); LastObject := neuesGeraet; |
Re: Object in Variable sichern?
Zitat:
Delphi-Quellcode:
TKlasseA = class(TObject)
public destructor Destroy; override; procedure WhoAmI; end; implementation destructor TKlasseA.Destroy; begin ShowMessage('Klasse A sagt Bye-bye...'); inherited; end; procedure TKlasseA.WhoAmI; begin ShowMessage('Ich bin Klasse A.'); end; [...] var KlasseA: TKlasseA; Klasse: TObject; begin KlasseA := TKlasseA.Create; Klasse := KlasseA; Klasse.Free; KlasseA.WhoAmI; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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 by Thomas Breitkreuz