AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ursprünglichen Wert eines Properties ermitteln.
Thema durchsuchen
Ansicht
Themen-Optionen

Ursprünglichen Wert eines Properties ermitteln.

Ein Thema von bernau · begonnen am 21. Aug 2007 · letzter Beitrag vom 22. Aug 2007
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Ursprünglichen Wert eines Properties ermitteln.

  Alt 21. Aug 2007, 15:47
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 21. Aug 2007, 15:57
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;
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 21. Aug 2007, 16:35
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 21. Aug 2007, 16:55
Hallo Gerd,

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

Gruß Hawkeye
  Mit Zitat antworten Zitat
OG Karotte
(Gast)

n/a Beiträge
 
#5

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 21. Aug 2007, 17:14
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

Ja, ich glaub' das müsste gehen (guckst Du hier)
[/EDIT]
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 22. Aug 2007, 07:38
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 22. Aug 2007, 08:48
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 22. Aug 2007, 09:03
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 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 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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
shmia

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

Re: Ursprünglichen Wert eines Properties ermitteln.

  Alt 22. Aug 2007, 09:17
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
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:38 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