Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   [gelöst] Binärdaten in Quellcode (https://www.delphipraxis.net/193808-%5Bgeloest%5D-binaerdaten-quellcode.html)

Schwedenbitter 11. Sep 2017 21:37


[gelöst] Binärdaten in Quellcode
 
Hallo,

ich bastel an einer Klasse, die von TBitBtn abgeleitet ist. Die Glyphs lade ich derzeit aus zur Laufzeit aus externen Dateien. Um Platz zu sparen sind das PNG-Dateien.
Ich meine irgendwo mal gesehen zu haben, dass man solche Daten (oder Streams?) in den Code mit aufnehmen kann. Die PNG-Bilder sind in Summe lächerliche 583 Bytes. Die kann ich locker abtippen. Ich möchte ausdrücklich keine res-Datei beim Compilieren mit einbinden. Ich meine ich so etwas als array in der const-Definition gesehen.

Daher meine Frage:
Gibt es irgend eine Möglichkeit, diese Daten in den Programmcode mit aufzunehmen?

stahli 11. Sep 2017 21:45

AW: Binärdaten in Quellcode
 
Du könntest die Daten in Base64 umwandeln und z.B. in einem nicht sichtbaren Memo oder Label speichern.
Wäre zwar unüblich, sollte aber gehen.

Luckie 11. Sep 2017 21:52

AW: Binärdaten in Quellcode
 
Darf man fragen warum keine Ressourcendatei? Die Ressourcen werden ja auch in das Kompilat einkompiliert.

nahpets 11. Sep 2017 22:05

AW: Binärdaten in Quellcode
 
Lade mal ein Bild in der IDE und schaue Dir dann in der DFM an, wie es dort abgelegt ist.

Das kannst Du dann analog auch als Konstante im Quelltext ablegen.

Oder benutze eine ImageList, in die Du in der IDE die Bilder lädst, sie werden dann Teil des Formulars.

Zur Laufzeit kannst Du dann die Bilder den TBitBtn nach Bedarf zuweisen.

Schwedenbitter 11. Sep 2017 22:40

AW: Binärdaten in Quellcode
 
Zitat:

Zitat von Luckie (Beitrag 1380850)
Darf man fragen warum keine Ressourcendatei? Die Ressourcen werden ja auch in das Kompilat einkompiliert.

Wenn ich das weitergebe, möchte ich nur eine Unit als pas-Datei haben und nicht noch 2 Bilddateien, eine RC-Datei etc.
Die Idee mit der ImageList fand ich sofort toll. Allerdings fiel mir dann ein, dass die Dateien dort als bmp-Dateien mit mehreren KBytes "gespeichert" werden.

Manchmal versuche ich Sachen auch nur, weil ich der Meinung bin, dass es gehen muss. Häufig fällt mir so etwas später wieder ein, wenn ich das wirklich mal brauche...

Redeemer 11. Sep 2017 23:25

AW: Binärdaten in Quellcode
 
Bilder in DFMs zu speichern, benötigt allerdings in der EXE auch deutlich mehr Platz als Ressourcen.

Du kannst natürlich ein Array nehmen. Schön ist das alles nicht.
Delphi-Quellcode:
const
  size = 4711;
  bild: array[0..size-1] of Byte = (42, ...);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.Write(bild[0], size);
  ms.position := 0;
  // usw.
end;

Uwe Raabe 12. Sep 2017 07:42

AW: Binärdaten in Quellcode
 
Zitat:

Zitat von Schwedenbitter (Beitrag 1380856)
Die Idee mit der ImageList fand ich sofort toll. Allerdings fiel mir dann ein, dass die Dateien dort als bmp-Dateien mit mehreren KBytes "gespeichert" werden.

Vielleicht sind die PngComponents hier besser geeignet. Die dort vorhandene PngImageList speichert eben keine BMPs sondern direkt das PNG-Format. Falls die Bilder unterschiedlich groß sind, kannst du auch die PngImageCollection verwenden.

Schwedenbitter 12. Sep 2017 16:14

AW: Binärdaten in Quellcode
 
Zitat:

Zitat von Redeemer (Beitrag 1380861)
...
Du kannst natürlich ein Array nehmen. Schön ist das alles nicht.

Habe ich gemacht. Danke für den Code. Ich habe es durchprobiert. Die exe-Datei ist mit der Konstante sogar geringfügigst kleiner geworden (2.126.407 vs. 2.126.336). Ich bin bei kleinen Programmen Befürworter der Eine-exe-Datei. Dort besteht nicht die Gefahr, dass man Dateien verliert oder über Manipulationen das Programm verändert wird; Gleiches gilt für die Weitergabe von pas-Dateien.
Das Problem war mir erstmals vor Jahren über den Weg gelaufen im Zusammenhang mit der Einbindung einer wav-Datei. Wie es genau ging, weiß ich nicht mehr. Aber ich dachte mir eben, dass es dann mit kleinen PNG-Dateien erst Recht irgendwie gehen muss.
Ich finde das also schon schön. :lol:

Zitat:

Zitat von Uwe Raabe (Beitrag 1380873)
Vielleicht sind die PngComponents hier besser geeignet.
...

Danke für diesen Tipp! Ich habe es mir runtergeladen und angesehen. Sehr schöne Arbeit.
Aber in meinem Fall ist das echt mit Kanonen auf Spatzen zu schießen.

Danke für Eure wertvollen Tipps. Für mich sind die Antworten mehr als ausreichend.

himitsu 12. Sep 2017 17:05

AW: [gelöst] Binärdaten in Quellcode
 
Du kannst mit einem Res-Editor direkt die "eine" RES bearbeiten/erstellen, ohne ein RC zu benötigen.

In einem RC kannst du Bilder/Daten nicht nur verlinken, sondern auch direkt einfügen.
PS: siehe Hier im Forum suchenManifest-Creator ... das ICON, was man da einfügen kann.

Und ImageList ... da brauchst du auch noch eine DFM zu deiner PAS. :zwinker:



PS: Die RC ist für die RES das, was deine PAS für eine DCU ist.

mensch72 12. Sep 2017 17:11

AW: [gelöst] Binärdaten in Quellcode
 
wer das "Problem" hat, für IOS eigene beliebige binäre einfach ohne ITunes simpel per (Bild)File oder Drag&Drop zum/vom PC zu nutzen... der denke mal etwas um die Ecke:
- IOS erlaubt den Transfer von BILD Dateien, das PNG Format ist also erlaubt
- Im PNG Format gibt es UserTags oder PrivateTags...
- was liegt also näher ein kleines aussagekräftiges ICON im PNG Format um einen PNG.ORG konform ZIP komprimierten ZusatzTag mit privatem binärem Inhalt zu erweitern
- so kann man komplette SQlite DBfiles, Updatefiles für Geräte mit denen sich ein APP per BLE verbindet überall vor Ort ganz ohne ITunes von&zum IOS Gerät bekommen
- aber es muß PNG konform sein, einfach eine SQliteDB in .PNG umbenennen... das klappt nicht und wird von Apple/IOS abgewehrt

=> der Weg binäre Daten über PNG-Files zu speichern, egal ob separat oder direkt im Quelltext ist also durchaus nützlich:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.
Seite 1 von 2  1 2      

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