AGB  ·  Datenschutz  ·  Impressum  







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

Object in Variable sichern?

Ein Thema von moelski · begonnen am 17. Aug 2006 · letzter Beitrag vom 17. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Object in Variable sichern?

  Alt 17. Aug 2006, 13:30
Moin !

Ich stehe da mal wieder vor einem kleinen Object bzw. Klassen Problem

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
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#2

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 13:37
Ja, verwende niemals, nie Destroy direkt, sondern Free.
Robert Wachtel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 13:37
Zitat von moelski:
Wobei folgendes definiert ist: LastObject : TObject;
Deine Klassen sind von TComponent abgeleitet ?
Delphi-Quellcode:
var
LastObject : TComponent; // besser man nimmt den gemeinsamen Vorfahren aals Datentyp
Oder sind es visuelle Komponenten (=Steuerelemente)?
Dann wäre TControl die passende Klasse.
Andreas
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 13:40
Moin !

Zitat:
Ja, verwende niemals, nie Destroy direkt, sondern Free.
Ok, aber das ist ja noch keine Antwort auf meine Frage

Zitat:
Deine Klassen sind von TComponent abgeleitet ?
Ja erstmal ist das so: TLVSpectraII = class(TObject)

Zitat:
Oder sind es visuelle Komponenten (=Steuerelemente)?
Nein sind keine visuelen Komponenten.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 13:49
Zitat von moelski:
Ja erstmal ist das so: TLVSpectraII = class(TObject)
Ich würde empfehlen:
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:
TLVDevice = class(TPersistent)
end;
TLVSpectraII = class(TLVDevice)
3.) überlegen, welche Eigenschaften um Methoden allen Klassen gemeinsam sind
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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#6

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 13:55
Zitat von moelski:
[...] LastObject := SpectraII;

Wobei folgendes definiert ist: LastObject : TObject;

Aber so scheint es nicht wirklich zu funktionieren. Denn ein LastObject.Destroy bewirkt gonix.[...]
Wie hast Du das festgestellt? Folgendes funktioniert:

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;
Robert Wachtel
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:00
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:
überlegen, welche Eigenschaften um Methoden allen Klassen gemeinsam sind
Eigentlich haben die garnix gemein. Jede Klasse hat ihre speziellen Funktionen. Gemein ist nur Create, Free, etc ... Aber das ist ja soweiso durch die Vererbung in der Klasse vorhanden.

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:
Wie hast Du das festgestellt?
Nuja, ich habe folgendes probiert:
Delphi-Quellcode:
  SpectraII := TLVSpectraII.Create(Self);
  LastObject := SpectraII;
  LastObject.free;
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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:02
Zitat von moelski:
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.
Nein, das bedeutet nur, das der Speicherbereich noch nicht erneut verwendet wird bzw. der Inhalt sich noch nicht geändert hat und du somit pures Glück hattest, das es zu keinem Absturz kam.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:04
Aha, also funktioniert das so wie ich es gemacht habe?

Also erst ...
Delphi-Quellcode:
var
  LastObject: TObject;
und dann halt
Delphi-Quellcode:
  SpectraII := TLVSpectraII.Create(Self);
  LastObject := SpectraII;
Wenn ich dann ein neues Gerät bedienen will tue ich folgendes:

Delphi-Quellcode:
LastObject.free;
neuesGeraet := TLVneuesGeraet.Create(Self);
LastObject := neuesGeraet;
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#10

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:05
Zitat von moelski:
[...] ich habe folgendes probiert:
Delphi-Quellcode:
  SpectraII := TLVSpectraII.Create(Self);
  LastObject := SpectraII;
  LastObject.free;
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.
Ups, wahrscheinlich war einfach der Speicherbereich zufällig noch nicht überschrieben. Folgendes "funktioniert" auch:

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;
Robert Wachtel
  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 08:46 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