Delphi-PRAXiS

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 Ursprünglichen Wert eines Properties ermitteln. (https://www.delphipraxis.net/98110-urspruenglichen-wert-eines-properties-ermitteln.html)

bernau 21. Aug 2007 15:47


Ursprünglichen Wert eines Properties ermitteln.
 
Ich erstelle eine Form mit einem TLabel drauf. Die Caption von diesem Label habe ich mit einem bestimten Wort belegt. An verschiedenen Stellen im Programm wird während der Laufzeit für diese Caption ein anderes Wort zugewiesen. Zu einem bestimmten Zeitpunkt möchte ich den ursprünglichen Wert wieder herstellen.

Wie kann ich nun herausfinden, welchen Wert die Caption beim Start des Forms hatte. Also der Wert, der in der DFM-Datei des Forms vorhanden ist?


Gerd

s-off 21. Aug 2007 15:57

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Hallo,

wieso merkst Du Dir diesen Wert nicht einfach, bevor er das erste Mal geändert wird?

Edit: Denkbar wäre soetwas:

Delphi-Quellcode:
Type
   TMyLabel = Class(TLabel)
   private
      FOriginIn: Boolean;
      FOriginCaption: String;
      Procedure CaptionChange(Var Message: TMessage); message CM_TEXTCHANGED;
   published
      Property OriginCaption: String read FOriginCaption;
   End;

Procedure TMyLabel.CaptionChange(Var Message: TMessage);
Begin
   If Not FOriginIn Then
      FOriginCaption := Caption;

   Inherited;
   FOriginIn := True;
End;

[...]

Procedure TForm1.Button1Click(Sender: TObject);
Begin
   LBL.Caption := 'Ich ändere mal die Caption';
End;

Procedure TForm1.Button2Click(Sender: TObject);
Begin
   LBL.Caption := LBL.OriginCaption;
End;

bernau 21. Aug 2007 16:35

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Zitat:

Zitat von s-off
wieso merkst Du Dir diesen Wert nicht einfach, bevor er das erste Mal geändert wird?

Gute Frage :-)

Erst mal war die Frage nur eine "retorische" Frage und sehr vereinfacht dargestellt. Ich wollte einfach wissen wie ich auf die Daten der DFM-Datei, die ja in irgend einer Art wohl als Ressource in die EXE-Datei eingebunden wird, zugreifen kann.

Es geht darum, daß ich eine Form habe, die als Grundlage für weitere abgeleitete Forms genommen wird. Dort möchte ich eine Art Reset-Funktion einbauen, die alle oder einen Teil der Komponenten auf den ursprünglichen Wert zurück setzt. Dazu gehören auch Tedit, TCombobox etc.

Da die Ursprungsform erst mal gar nicht weis, welche Komponenten in der abgeleiteten Form sind, ist ein direkter Zugriff auf die entsprechenden Controls nicht möglich. (Nur so als Info. Einen direkten Zugriff wollte ich sowiso nicht machen)

Ich könnte natürlich im create der Form mit Form.Components auf alle Controls zugreifen und speichen. Aber ich finde es eleganter direkt auf die ursprünglichen Daten der Controls, die sowiso irgendwo in der EXE-Datei vorhanden sein müssen, zuzugreifen.




Gerd

Hawkeye219 21. Aug 2007 16:55

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Hallo Gerd,

der Beitrag von Peter Below in diesem Thread zeigt eine Möglichkeit, die unter gewissen Bedingungen funktioniert.

Gruß Hawkeye

OG Karotte 21. Aug 2007 17:14

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Vielleicht ist PE File Format (Portable Executable File Format) und dann der Bereich .rsrc das gesuchte???

Ich meine da sind auch ein paar diesbezügliche Routinen / Funktionen in der JCL. Ansonsten vielleicht mal diesen Code "scannen".

Ansonsten findest Du sicher auch einen Ansatz hier.

Allerdings müsste dann noch der Textteil (also die Resource) auf irgendeine Art und weise von Dir geparst werden, um die gewünschte Info zu bekommen.

[EDIT:] ähem, geht nicht auch einfach TResourceStream bzw. ReadComponentRes :gruebel:

Ja, ich glaub' das müsste gehen (guckst Du hier)
[/EDIT]

bernau 22. Aug 2007 07:38

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Hallo an alle,

danke für euere Antworten. Insgesamt stellt sich heraus, daß es nicht so einfach ist die "initial property-values" irgendwo herauszulesen. Dachte, daß es irgenwo eine einfache Funktion (in der Art Label.RestoreInitialValue) gibt, die das macht. Dem ist aber nicht so. Schade.

Der Hinweis auf Peter Belows Thread hat mich aber etwas weiter gebracht.

Danke für euere Mühe


Gerd

SirThornberry 22. Aug 2007 08:48

Re: Ursprünglichen Wert eines Properties ermitteln.
 
eine Art "Label.RestoreInitialValue" gibt es nicht. Wie sollte diese auch funktionieren wenn das Label zur Laufzeit erstellt wird? Und wenn du ein Formular automatisch erstellen lässt passiert auch nichts anderes als das die DFM-abgearbeitet wird und anhand des inhaltes die Objecte erzeugt werden etc.

Wenn du Objectorientiert arbeitest wäre eine Möglichkeit einfach noch eine Objectinstanz zu erzeugen und von der neuen Instanz die werte lesen.

Oder einfach mit TResourceStream die DFM-Datei aus der Resource laden und die Eigenschaften lesen.

bernau 22. Aug 2007 09:03

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Zitat:

Zitat von SirThornberry
eine Art "Label.RestoreInitialValue" gibt es nicht. Wie sollte diese auch funktionieren wenn das Label zur Laufzeit erstellt wird? Und wenn du ein Formular automatisch erstellen lässt passiert auch nichts anderes als das die DFM-abgearbeitet wird und anhand des inhaltes die Objecte erzeugt werden etc.

Weist du, ich habe mir bei vielen Dingen auch schon gesagt, das etwas eigendlich nicht gehen kann. Dann habe ich zufällig etwas hier im Forum gelesen und war überrascht, daß es doch eine einfache Funktion für dieses oder jeden Problem gibt. Warum nicht auch eine Funktion "RestoreInitialValue".


Zitat:

Zitat von SirThornberry
Wenn du Objectorientiert arbeitest wäre eine Möglichkeit einfach noch eine Objectinstanz zu erzeugen und von der neuen Instanz die werte lesen.

Das war der Hinweis von Peter Below, den ich auch favorisiere. Allerdings könnte es dann ein Performanceproblem geben, wenn man eine komplexe Form hat, bei der auch noch im create/oncreate viel abgearbeitet wird.


Zitat:

Zitat von SirThornberry
Oder einfach mit TResourceStream die DFM-Datei aus der Resource laden und die Eigenschaften lesen.

Das habe ich mir auch überlegt. Und daraus einfach eine "funktion RestoreInitialValue" machen :-)


Gruß

Gerd

shmia 22. Aug 2007 09:17

Re: Ursprünglichen Wert eines Properties ermitteln.
 
Zitat:

Zitat von bernau
Es geht darum, daß ich eine Form habe, die als Grundlage für weitere abgeleitete Forms genommen wird. Dort möchte ich eine Art Reset-Funktion einbauen, die alle oder einen Teil der Komponenten auf den ursprünglichen Wert zurück setzt.

Alle Properties rücksetzen geht so:
http://www.delphipraxis.net/internal...t.php?t=104591


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 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