Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 15.05.10 10:04 
Hallo!

Ich brauche für mein Programm eine Möglichkeit, die Daten eines Icons (oder, wenn das einfacher ist, eines Bitmaps) in einen String umzuwandeln, den ich in eine StringList einfügen kann und den ich auch wieder aus dieser StringList auslesen und als Grafik darstellen kann.
Also so etwas wie eine Funktion IconToString und eine Funktion StringToIcon.

Kann mir da jemand Tipps geben?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Sa 15.05.10 11:03 
TStringList.AddObject() ist vermutlich die bessere Variante um ein Objekt darin unterzubringen.
Was hast Du denn überhaupt vor, das Bitmap als Text zu haben ist doch vermutlich nicht das entgültige Ziel?

Grüsse, Dirk
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 15.05.10 11:14 
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
TStringList.AddObject() ist vermutlich die bessere Variante um ein Objekt darin unterzubringen.

Die StringList dient lediglich als "Behälter" für die Daten, die daraus dann in ein RxRichEdit (kann Text und Grafiken anzeigen) eingelesen werden. Die Daten der Datei liegen zeilenweise vor.
Mit TStringList.AddObject werden die Grafikdaten beim Speichern der TStringList als Datei nicht mitgespeichert.

user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
Was hast Du denn überhaupt vor, das Bitmap als Text zu haben ist doch vermutlich nicht das entgültige Ziel?

Das Ganze ist ein eigenes Hilfedateisystem, ein eigenes Dateiformat, eine Mischung aus RTF und INI. Es gibt zwei Programme: Mit einem kann man die Hilfedateien erstellen, das andere ist das Hilfeprogramm. Das erste ist also ein Editor, der soll nun die Icon-Daten in einen String umwandeln und diesen in die StringList schreiben. Beim Speichern werden sie dann eben als Datei geschrieben.

Das Hilfeprogramm soll diesen String dann wieder in Grafikdaten konvertieren und in einem TImage als Icon darstellen.
Alles andere funktioniert, und ich dachte halt, ein Icon wäre auch ganz nett!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Sa 15.05.10 11:46 
RxRichEdit kenne ich nicht, aber ähnlich dem TJVRichEdit aus den Jedis wird es vermutlich in der Lage sein den kompletten Inhalt als RTF zu speichern (inklusive der Bilder). Die Property Lines[] ist in TJVRichEdit publiziert als "TStrings", intern aber vom Typ TJVRichEditStrings.
TJVRichEditStrings (bzw. den im RxRichEdit verwendeten Typ) an Stelle der TStringlist sollte das Problem doch auf die einfachste Weise lösen, da hier das Speichern als RTF implementiert ist. Alles andere würde bedeuten das RTF-Format neu zu erfinden, wozu sich dann vermutlich ein Stream (TFileStream, TMemoryStream) besser eignen würde als eine TStringlist.

Grüsse, Dirk
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 15.05.10 11:55 
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
TJVRichEditStrings (bzw. den im RxRichEdit verwendeten Typ) an Stelle der TStringlist sollte das Problem doch auf die einfachste Weise lösen, da hier das Speichern als RTF implementiert ist. Alles andere würde bedeuten das RTF-Format neu zu erfinden, wozu sich dann vermutlich ein Stream (TFileStream, TMemoryStream) besser eignen würde als eine TStringlist.

Ja, RxRichEdit speichert alles im RTF-Format. Im Moment mache ich es so: Ich habe eine Funktion BitmapToRTF - www.swissdelphicente...rintcode.php?id=1332 - mit der ich den String erzeuge. Das Hilfeprogramm muss nun ein RxRichEdit zur Anzeige des Icons bzw. Bitmaps verwenden, weil dieses den RTF-Code lesen kann. Idealerweise nimmt man ein TImage für Grafiken, aber das geht so ja nicht.

Ausserdem hat ein TImage die Eigenschaft "Transparent", ein RxRichEdit nicht. Meine Lösung ist also nicht gerade ideal.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Sa 15.05.10 12:23 
Das Jedi-Richedit bietet die einfache Funktion .InsertGraphic(), da braucht man kein Workaround von den Schweizern ;)

Irgendwie hab ich die ganze Zeit im Kopf gehabt das Bild im Richedit anzuzeigen, um es unabhängig anzuzeigen ist es natürlich sinnvoll über einen Stream zu gehen und hinter dem Text die Anzahl der Bilder und dann die Bilder abzulegen, alle beteiligten Komponenten sollten ja ein SaveToStream() unterstützen (und wenn sie sauber programmiert sind den Stream immer ab der aktuellen Position lesen/schreiben ohne sich gegenseitig zu behindern).

Grüsse, Dirk
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 15.05.10 14:22 
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
Das Jedi-Richedit bietet die einfache Funktion .InsertGraphic(), da braucht man kein Workaround von den Schweizern ;)

Allerdings ist es mir nie gelungen :oops: , die Jedi-Komponenten zu installieren, daher verwende ich die älteren Rx-Komponenten!

Die Delphi-Welt kann ja so einfach sein, user profile iconalzaimar weiss das, und man sieht mal wieder, was mit Delphi alles möglich ist, sogar Bitmaps als String! Geht, wenn man den Code entsprechend ändert, auch mit Icons:
www.delphipraxis.net/topic79543.html

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Sa 15.05.10 14:39 
Wobei du beachten solltest das ein eventuelles #13#10 im Bild dafür sorgt sich das Bild nach dem Speichern/Laden der Stringlist auf zwei Zeilen verteilt.

Grüsse, Dirk
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 15.05.10 20:47 
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
Wobei du beachten solltest das ein eventuelles #13#10 im Bild dafür sorgt sich das Bild nach dem Speichern/Laden der Stringlist auf zwei Zeilen verteilt.

Ja, auch #0 kommt im String vor, diese Zeichen müssen in andere konvertiert werden, die jedoch keinesfalls in den Daten der Grafik vorkommen dürfen!

Danke!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!