AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Externe Resource zur Laufzeit verwenden

Ein Thema von messinger · begonnen am 14. Mär 2012 · letzter Beitrag vom 1. Feb 2016
Thema geschlossen
Seite 1 von 2  1 2      
messinger

Registriert seit: 17. Sep 2008
13 Beiträge
 
#1

Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 12:46
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.
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 13:57
Kompilier Linke die Ressource in eine DLL und schon kannst du alles Bekannte nutzen, womit man Resourcen auslesen kann.
$2B or not $2B
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 14:13
Und Ressourcen bekommt man genauso in eine DLL wie in eine Exe.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
messinger

Registriert seit: 17. Sep 2008
13 Beiträge
 
#4

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 16:21
Vielen Dank - schaue ich mir mal an.

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

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 16:58
Klar - z.B. per ResourceUtils. Nur ist das um Längen umständlicher als ein LoadLibrary und ein TResourceStream.
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 17:03
Ansonsten:
Wenn du keine (richtigen) Resourcen verwenden willst, dann nimm was Anderes. (zip, xml oder sonstewas)
$2B or not $2B
 
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Externe Resource zur Laufzeit verwenden

  Alt 14. Mär 2012, 18:30
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
Andreas
 
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Externe Resource zur Laufzeit verwenden

  Alt 15. Mär 2012, 14:21
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.

Geändert von ASM (15. Mär 2012 um 14:22 Uhr) Grund: Rechtschreibfehler korrigiert
 
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Externe Resource zur Laufzeit verwenden

  Alt 15. Mär 2012, 14:37
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.
Andreas
 
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Externe Resource zur Laufzeit verwenden

  Alt 15. Mär 2012, 14:47
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
 
Thema geschlossen
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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