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/)
-   -   kompoenenten Eigenschaft speichern (https://www.delphipraxis.net/45352-kompoenenten-eigenschaft-speichern.html)

arturx 4. Mai 2005 16:43


kompoenenten Eigenschaft speichern
 
Delphi 7
Ich möchte eine Komponente schreiben und eine nicht-published Eigenschaft in der
Formular Datei speichern. Folgender Code funktioniert nur, wenn ich einen
integer Wert abspeichere (dieses Beispiel findet man in allen Büchern).
Ersetzt man writeint durch writestr, bricht das Ganze ab beim Laden des Formulars, welches diese komponente nutzen soll. Wo liegt der Fehler ??
Delphi-Quellcode:
type tkomponente = class(tpersistent)
    private
       fbackstr : string;
       fbackint : integer;
      .....
   end
//=================================================================
//=================================================================
procedure tkomponente.defineproperties(filer: tfiler);
begin
       inherited;
       filer.defineproperty('Backupval',Readpropsyncarr,writepropSyncarr,true);
end;
//===================================================================
procedure tkomponente.Readpropsyncarr(reader: treader);
      begin
                fbackstr := reader.ReadString; //  :wall: löst den Fehler aus.. !!!!!!
{               fbackint := reader.ReadInteger; // geht
end;
//===================================================================
procedure tkomponente.writepropSyncarr(writer: twriter);
    begin
            writer.WriteString('Hallo'); // Fehler behaftet
{           writer.writeinteger(22);    // geht }
end;
//===================================================================
Hat einer eine Idee ?

arturx

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

MaBuSE 4. Mai 2005 17:20

Re: kompoenenten Eigenschaft speichern
 
Zuerst ein mal Herzlich willkommen in der Delphi Praxis :dp:

Zu Deinem Problem kann ich leider nicht viel Produktives beitragen.
Ich kenne nur den Weg mit stored, aber das funktioniert ja nicht im protected.
(Hab ich gerade ausprobiert)

Aber zu Deiner Frage:

Zitat:

Zitat von arturx
...Wo liegt der Fehler ?? ...

Dein Fehler liegt in der falschen Gruppe.

Du hast den Beitrag in die Gruppe Freeware geposted.
  • Freeware
    Freeware-Programme (mit oder ohne Sourcecode) zum Testen und Diskutieren
Dein Beitrag wäre in folgender Gruppe besser aufgehoben:
  • VCL / WinForms / Controls
    Fragen rund um VCL- und WinForms-Komponenten einschließlich der Common Controls
    (z.B. deren Benutzung und/oder Weiterentwicklung)
Diese Gruppe wird von mehr Leuten gelesen, die mit Deiner Frage aus was anzufangen wissen ;)
Jetzt aber bitte nicht das Selbe noch mal in die "richtige" Gruppe posten, das wäre ein Crossposting und die sind ebenfalls nicht gern gesehen.

Ein Moderator wird Deinen Beitrag schon in die richtige Gruppe verschieben ;)

Dei Regeln zum glücklichen Zusammenleben kannst Du hier nachlesen: Verhaltenskodex & FAQ

DP-Maintenance 4. Mai 2005 17:51

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Freeware" nach "VCL / WinForms / Controls" verschoben.

SirThornberry 4. Mai 2005 18:55

Re: kompoenenten Eigenschaft speichern
 
benutze anstelle von
Delphi-Quellcode:
filer.defineproperty('Backupval',Readpropsyncarr,writepropSyncarr,true);
einfach
Delphi-Quellcode:
AFiler.DefineBinaryProperty('Backupval', Readpropsyncarr,writepropSyncarr, true);
deine read und write procedure musst du dann wie folgt abändern
Delphi-Quellcode:
procedure tkomponente.Readpropsyncarr(AStream : TStream);
[...]
procedure tkomponente.writepropSyncarr(AStream : TStream);
und in den Übergabestream kannst du dann beliebige Daten schreiben bzw. lesen

zum schreiben deines stirngs
Delphi-Quellcode:
var LInt: Integer;
begin
  LInt := length(fbackstr);
  AStream.Write(LInt, SizeOf(Integer));
  AStream.Write(fbackstr[1], LInt);
zum lesen deines strings
Delphi-Quellcode:
var LInt: Integer;
begin
  AStream.Read(LInt, SizeOf(Integer));
  SetLength(fBackStr, LInt);
  AStream.Read(fbackstr[1], LInt);

arturx 7. Mai 2005 08:12

Re: kompoenenten Eigenschaft speichern
 
Danke für die Idee. Ich frage mich nur, wie geht die direkte Lösung ?
(Einen String zu speichern ist doch offensichtlich Standard in allen Formularen.
siehe Caption usw.)
Irgendwie muss da noch ein Verständnisfehler bei mir vorliegen.
Kennt Ihr ein Buch oder einen Link für Komponenten Entwicklung auf der Basis von
Delphi 6 oder 7 ?
Alles was ich so an tiefergehender Literatur kenne (Ray conopka usw.) stammt
aus der Zeit von Delphi 3 od. max. Delphi 5.
Danke im Voraus :roll:


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