Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   dfm property streamen (https://www.delphipraxis.net/157752-dfm-property-streamen.html)

snook 23. Jan 2011 21:36

dfm property streamen
 
abend,

ich habe jetzt ewiglkeiten gesucht...wohl unter den falschen stichwörtern, also nciht aufschreien, bin mir sihcer das wurde schon tausend mal erklärt...

ich möchte eine published property einer komponente aus der dfm des zugehörigen formulars auslesen, ohne das formular zu erstellen! wie geht das???? stichwörter die ich gefundne habe: TFiler, TReader, aber ihc blicke nicht durch!

ich habe:

Delphi-Quellcode:
published
  property parameter: TStrings read GetParameter write SetParameter;
und hätte gerne etwas wie:
Delphi-Quellcode:
class function GetParameter: TStringList;
viele grüße

rollstuhlfahrer 23. Jan 2011 21:58

AW: dfm property streamen
 
Willst du jetzt die DFM-Datei im Klartext über das Netzwerk senden? ODER willst du Getter- und Setter-Methoden einer Property mit Namen haben? Letzteres ist leider nicht möglich.

Außerdem wird es mit zugewiesenen Werten sehr schwer, wenn das Objekt zu der Klasse nicht existiert.

Bernhard

snook 23. Jan 2011 22:31

AW: dfm property streamen
 
oh war etwas verwirrend, was ich möchte ist

Delphi-Quellcode:
class function LoadParameter: TStringList
sodass ich über die Klassenfunktion zur laufzeit die werte der property Parameter (die ja in der dfm stehen) laden kann, ohne die klasse erst instanzieren zu müssen.

ich mein, im prinzip ist es bei gegebener datenstruktur von aussen recht simpel einfach die dfm als textdatei einzulesen und dann
die werte der property zu suchen und zu lesen...ABER ich weiß ja nicht WO die dfm liegt! daher dachtr ich, ich löse das ganze komponentenseitig, denn die komponente, bzw das formular auf dem die komponente liegt, kennt ja ihre eigene dfm

rollstuhlfahrer 23. Jan 2011 22:35

AW: dfm property streamen
 
Also das geht nicht. Die Werte werden ja erst zugewiesen, nachdem das Objekt existiert. Also erst Objekt erstellen und dann lädt das Objekt seine Eigenschaften.

Was jetzt möglich ist: Du übergibst die Klasse des Objektes. Mit Hilfe der RTTI kannst du dann aus der Klasse den Klassennamen (als String) erhalten. Daraus kannst du den Ressourcennamen berechnen (die Delphi-VCL muss ja so etwas ähnliches machen). Jetzt musst du nur noch die Ressource parsen. Dann hast du es.

Bernhard

snook 23. Jan 2011 22:37

AW: dfm property streamen
 
dem verständnis halber etwas code

Delphi-Quellcode:
type
  TParameterList = class(TComponent) // <-- registrierte Komponente
    private
    FValues: TStringList;
    .
    .
    .
    published
    property Parameter: TStrings read GetParameter write SetParameter;

type
  Form1 = class(TForm)
    ParameterLis: TParameterList;
    public
    class function LoadParameter: TStringList; // <-- hier soll jetzt aus der Komp ParameterList die "gestreamte?" property Parameter geladen werden
...@ bernhard, danke, aber DAS mit dem ressourcen ladne ist ja genau was ich machen will, aber ich blicke bei den gefundenen erklärungen einfach nciht durch...vielleicht nen link für ein gutes tut?

rollstuhlfahrer 23. Jan 2011 22:42

AW: dfm property streamen
 
Dann mach dich mal mit RessourceStreams vertraut. Außerdem solltest du die Quelltexte der Delphi-VCL haben und kannst dir mal anschauen, was passiert, wenn du TForm.Create() aufrufst und was in TForm.AfterConstruction(); steht.

Bernhard

snook 23. Jan 2011 23:02

AW: dfm property streamen
 
bin also wieder bei TReader gelandet...hat jemand nen brauchbares tutorial dazu?

rollstuhlfahrer 23. Jan 2011 23:34

AW: dfm property streamen
 
So wie ich das verstehe, ist Treader nur ein Caching-Aufsatz für den normalen Delphi-TStream. Fang doch mal ganz einfach an: Schau dir an, welche Ressourcen deine EXE hat (Bei Google suchenXN Ressource Editor), danach suchst du dir eine (aus dem Zweig RCData) aus. Dann nimmst du einen TRessourceStream und erzeugst ihn mittels
Delphi-Quellcode:
.Create(hInst, 'NAME', RT_RCDATA);
(Parameter musst du nachschlagen). Dann kopierst du das ganze in einen TFileStream und hast schon mal die Ressourcen auf der Platte. Dann kannst du weiter machen.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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-2025 by Thomas Breitkreuz