Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Externe Resource zur Laufzeit verwenden (https://www.delphipraxis.net/167119-externe-resource-zur-laufzeit-verwenden.html)

messinger 14. Mär 2012 11:46

Externe Resource zur Laufzeit verwenden
 
Hallo Leute,

ich würde gern Inhalte einer Resourcen-Datei verwenden, um bspw. die Glyphs oder Captions von Buttons zu ändern. Die Resourcen-Datei habe ich. Die soll aber nicht mit in die exe compiliert werden, sondern neben der exe weiter gegeben (und ggf. vom Nutzer angepasst) werden könnnen. Die Inhalte möchte ich mir dann erst zur Laufzeit holen (um bspw. einen dynamisch erzeugten Button entsprechend anzupassen).
Solange ich die Resource in die exe mit rein compiliere, ist das Ganze unproblematisch. Ich finde nur irgendwie nichts, um die externe Resource "zu laden".
Auf keinen Fall möchte ich die ganzen Bilder als einzelne Dateien mitgeben. Gestolpert bin ich schon über den Hinweis, es mit einer dll zu versuchen, eine direkte Verwendung einer res oder rc wäre mir aber deutlich lieber.

Wäre für Vorschläge dankbar.

himitsu 14. Mär 2012 12:57

AW: Externe Resource zur Laufzeit verwenden
 
Kompilier Linke die Ressource in eine DLL und schon kannst du alles Bekannte nutzen, womit man Resourcen auslesen kann.

Luckie 14. Mär 2012 13:13

AW: Externe Resource zur Laufzeit verwenden
 
Und Ressourcen bekommt man genauso in eine DLL wie in eine Exe.

messinger 14. Mär 2012 15:21

AW: Externe Resource zur Laufzeit verwenden
 
Vielen Dank - schaue ich mir mal an.

Gibt's aber auch ne Möglichkeit, direkt mit den res- oder rc-Files zu arbeiten?

CCRDude 14. Mär 2012 15:58

AW: Externe Resource zur Laufzeit verwenden
 
Klar - z.B. per ResourceUtils. Nur ist das um Längen umständlicher als ein LoadLibrary und ein TResourceStream.

himitsu 14. Mär 2012 16:03

AW: Externe Resource zur Laufzeit verwenden
 
Ansonsten:
Wenn du keine (richtigen) Resourcen verwenden willst, dann nimm was Anderes. (zip, xml oder sonstewas)

neo4a 14. Mär 2012 17:30

AW: Externe Resource zur Laufzeit verwenden
 
Zitat:

Zitat von himitsu (Beitrag 1156575)
Ansonsten:
Wenn du keine (richtigen) Resourcen verwenden willst, dann nimm was Anderes. (zip, xml oder sonstewas)

Oder: Nimm etwas anderes und binde es als richtige Resource ein.

Wenn Du in Deinem Programm z.B. mehrere ClientDataSets oder MemTables verwendest und dazu noch ein paar TMemIni's, dann speichere ein Set davon mittels SaveToStream in ein Zip-File (was noch nicht einmal so heißen muss). Abbrevia ist aktuell, Open Source und unterstützt Delphi bis XE2 (auch 64bit). Diese Zip-Datei kannst Du auch mit einem beliebigen Programm weiter bearbeiten und/oder auch mit einem Passwort schützen, wenn genau das nicht durch Fremde passieren soll. Die Zip-Vorlage bindest Du als Resource mit in das Programm ein, das es dann bei Bedarf als Initialisierung am Zielsystem auspackt. Mit diesem Archiv kannst Du nur lesend, aber auch schreibend arbeiten und so z.B. ein compressed, encrypted Single-File-Database-System zum Nulltarif bauen (mit TkbMemTable 7 auch mit SQL-Syntax). Ohne zusätzliche DLL. Kein bischen.

Also ich wäre davon nun überzeugt ;)

ASM 15. Mär 2012 13:21

AW: Externe Resource zur Laufzeit verwenden
 
Zitat:

Zitat von neo4a (Beitrag 1156591)
Wenn Du in Deinem Programm z.B. mehrere ClientDataSets oder MemTables verwendest und dazu noch ein paar TMemIni's, dann speichere ein Set davon mittels SaveToStream in ein Zip-File (was noch nicht einmal so heißen muss). Ohne zusätzliche DLL. Kein bischen.

Also ich wäre davon nun überzeugt ;)

Also ich ganz und gar nicht. Denn das geht ja ganz offensichtlich an dem vorbei, was hier erfragt worden ist, und ist außerdem einfach nur sehr unprofessionell.
1) Er hat doch deutlich geschrieben, dass er einfach nur Glyphs und/oder Captions von Buttons als Resourcen speichern will (und selbst im Falle komplexerer Resourcen wäre das nach der unten folgenden Lösung kein Problem).
2) Zitat: "Die Zip-Vorlage bindest Du als Resource mit in das Programm ein"
Vor allem aber hat er doch unmissverständlich erklärt, dass er die Resourcen eben gerade nicht in die EXE compilieren will.

Optimale Lösung, wie bereits vorgeschlagen worden ist: Erstelle eine reine Resourcen-DLL.
Code:
library ResLib;
 
{$R ResDLL.res} // erstellt mit "brcc32.exe ResDLL.rc"

begin
end.
Binde dort mit der ResDLL.rc -> ResDLL.res alle benötigten Icons, Bitmaps, usw. ein und die Strings entweder als ein Textfile (siehe RCDATA) mit den aufgelisteten Strings oder - fast noch einfacher - in der Struktur einer Stringtable.

Lade diese Resourcen-DLL dann dynamisch in das eigentliche Programm:
Code:
ResLibHandle := Loadlibrary(PChar(ResDLLfilename));
Mit diesem Handle lässt sich mit einem ResourceStream, einem LoadIcon(), LoadBitmap() bzw. einem GetResString() jede der verschiedenen Resourcen mühelos aus der Resourcen-DLL zur Verwendung im Programm herausholen

Durch einfachen Austausch der DLL gegen eine neue (mit gleichen Filenamen) und mit verschiedenen (aber mit jeweils gleichem Namen bezeichneten!) Resourcen ist die Aufgabe absolut flexibel, ohne großen Aufwand, schnell und unproblematisch gelöst.

Die Resourdcen-DLL kann ratz-fatz nach dem gerade aktuellen Bedarf erstellt werden, wozu allein nur die RC-Datei entsprechend verändert und als RES-Datei neu in die DLL eingebunden werden muss.

Das eigentliche Programm braucht für alle diese verschiedenen Resourcen-DLLs überhaupt nicht verändert zu werden.

neo4a 15. Mär 2012 13:37

AW: Externe Resource zur Laufzeit verwenden
 
Zitat:

Zitat von ASM (Beitrag 1156696)
einfach nur sehr unprofessionell.

Es war (m)ein Vorschlag, die Sache etwas anders anzugehen. Wenn der Fragende etwas besser als Du darin geübt ist, sinnentnehmend zu lesen, wird er für sich schon die richtige Auswahl treffen.

CCRDude 15. Mär 2012 13:47

AW: Externe Resource zur Laufzeit verwenden
 
Zitat:

Zitat von neo4a (Beitrag 1156705)
Es war (m)ein Vorschlag, die Sache etwas anders anzugehen.

Also wenn jemand Texte und Grafiken will, eine verschlüsselte Datenbank anzubieten, ist das auch mMn schon nicht mehr "die Sache" anders anzugehen, sondern eine ganz andere Sache anzugehen. Ich denke ASM hatte nur sofort des Eindruck, dass Du eigentlich gar nicht wirklich auf die Frage eingehen, sondern mit Deinem Wissen angeben willst. Dieser Eindruck ist auch bei mir irgendwie nicht gaz wegzuwischen ;)


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