Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   clColor und TFontStyle in Stream von Virtualstringtree (https://www.delphipraxis.net/142507-clcolor-und-tfontstyle-stream-von-virtualstringtree.html)

stho 29. Okt 2009 14:02


clColor und TFontStyle in Stream von Virtualstringtree
 
Hallo Leute

Ich habe einen VirtualStringTree und möchte die Nodes Farbig oder sonst anderst aussehen lassen (sprich: Fett gedruckt, Kursiv, ...)
Klappt auch alles ganz wunderbar. Doch jetzt komme ich an den punkt so einen VST zu speichern.
Wie mache ich das?

Die Caption speichere ich mit

Delphi-Quellcode:
  //Caption
  Len := Length(Data.FCaption);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.FCaption)^, Len);
bei dem VSTSaveNode-Ereigniss. Doch wie fühe ich noch einen Farbwert oder ähnliches hinzu und lese das wieder aus?!

himitsu 29. Okt 2009 14:26

Re: clColor und TFontStyle in Stream von Virtualstringtree
 
im Prinzip so
Delphi-Quellcode:
Stream.write(Data.Color, SizeOf(Data.Color));
oder einfach so
Delphi-Quellcode:
Stream.write(Data.Color, SizeOf(TColor));
oder wie/wo auch immer die Farbe abgelegt ist

alles was direkt als Daten vorliegt (Integer, Farben, ...) kann auch direkt gespeichert werden

stho 29. Okt 2009 14:36

Re: clColor und TFontStyle in Stream von Virtualstringtree
 
:-) das ist toll

so hats funktioniert :

Delphi-Quellcode:
  //Color
  Len := Length(IntToStr(Data.clColor));
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Data.clColor)^, Len);


nur jetzt haperts beim auslesen :gruebel:

Ich probier mal weiter rum... wenn jemandem etwas einfällt, ich bin gerne für eine Lehrreiche stunde zu haben :-) (als Zühörer!)

himitsu 29. Okt 2009 16:07

Re: clColor und TFontStyle in Stream von Virtualstringtree
 
wenn schon, dann so
Delphi-Quellcode:
S := IntToStr(Data.clColor);
Len := Length(S);
Stream.write(Len, SizeOf(Len));
Stream.write(PChar(S)^, Len);
du hattest die Länge des in einen String umgewandelten Integers gespeichert
und dann versucht den Integer als Pointer anzusehn und das zu speichern, auf was dieser zufällig zeigt.
Also sei froh, daß es nicht schon beim Speichern geknallt hat.

Die Länge kennst du SizeOf(TColor) = immer 4 Byte
also brauchst du diese nicht zu speichern, da sie sich nicht ändern wird.

Siehe oben (Beitrag #2):
- dein Len ist ein Integer
- TColor ist im Prinzip auch ein Integer
> also einfach genauso speichern und auslesen, wie du es mit Len auch schon machst :zwinker:


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