Autor Beitrag
Sal-9000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 25.06.09 16:38 
Hi

Habe da mal wieder eine Frage: gibt es eine Möglichkeit, wie ich mir Ressourcen die ich wärend der Laufzeit zusammenstelle, auch wären der Laufzeit in eine Art Ressourcen-Datei zu packen, so das ich diese dann wärend der Laufenden Session und beim dem nächsten Programmstart einlesen kann?

Bsp.: Ich stelle mir zur Laufzeit eine Sammlung von zb 5 Icons, 2 Bitmaps und einer Soundfile zusammen und will diese dann in einer Datei zusammenfassen, damit sie nicht "lose" im Prog-Verzeichniss rumliegen. Ich möchte aber auch wärend das Prog noch läuft auf diese Ressourcen zugreifen können!

Dachte da an etwas wie eine DLL oder dergleichen zur Laufzeit zu erstellen und zu füllen, nur wie? :)

Hat jemand eine Idee??


Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Do 25.06.2009 um 17:13
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 25.06.09 16:43 
user profile iconSal-9000 hat folgendes geschrieben Zum zitierten Posting springen:
damit sie nicht "lose" im Prog-Verzeichniss rumliegen.

Erstell doch einfach ein Unterverzeichnis, in das du die Dateien speicherst. Wo ist das Problem? :gruebel:

Ressourcen sind nicht dazu da, nachträglich bearbeitet zu werden. Es geht, aber IMHO nur solange das Programm nicht läuft. Du müsstest also eine andere Anwendung erstellen, die die Ressourcen verändert. Und das ist ganz sicher nicht schön.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.06.09 16:46 
Mein ExeDataStream wäre da vielleicht geeignet, damit kannst du beliebige Daten anhängen. Dafür brauchst du aber natürlich Adminrechte, wenn das Programm unter c:\programme liegt. (Aber die Adminrechte brauchst du natürlich auch für das Verzeichnis der Exe an sich.)

Die normale Vorgehensweise wäre aber die von Yogu genannte. Und bei einem fest installierten Programm gehören die Dateien dann ins Anwendungsdatenverzeichnis.

Man kann theoretisch auch Ressourcen in der Exe verändern, dafür gibt es eine API, aber das ist nicht so ganz einfach und leider wird die Exe nicht mehr kleiner auch wenn die Ressourcen kleiner werden.
Sal-9000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 25.06.09 16:50 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Erstell doch einfach ein Unterverzeichnis, in das du die Dateien speicherst. Wo ist das Problem? :gruebel:


1.: Weil ich den direkten Zugriff und damit eine Fehlerquelle ausschalten möchte, und
2.: Fänd ich es hübscher, 2 Dateien weiter zu geben, als zb 30 oder wie in meinem Bsp oben 9

Gibt es nicht irgendeinen "Container", in dem ich sie bündeln und dann wie "normale" Ressourcen benutzen kann? ICh meine ... man kann doch auch Icon-Libs erstellen ... müsste doch mit gemischtem Inhalt auch klappen, oder?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.06.09 16:53 
Wie gesagt, nimm einfach meinen Stream, da kannst du hineinlegen was du willst wie in einen normalen TStream, und das Ding hängts automatisch an bzw. löscht es wenn die Größe auf 0 gesetzt wird.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 25.06.09 17:06 
user profile iconSal-9000 hat folgendes geschrieben Zum zitierten Posting springen:
1.: Weil ich den direkten Zugriff und damit eine Fehlerquelle ausschalten möchte, und
2.: Fänd ich es hübscher, 2 Dateien weiter zu geben, als zb 30 oder wie in meinem Bsp oben 9

Ok, wenn dein Programm sonst recht klein ist, und du es auch weniger erfahrenen Computernutzern geben willst, mag das die einfachere Möglichkeit sein. Aber sonst stellt sich die Frage, warum du es nicht einfach archivierst. Dann musst du nur eine Datei weitergeben, und der Anwender sieht außerdem gleich, wieso das Programm denn so groß ist. Außerdem können Benutzereinstellungen besser weitergegeben werden, wenn die Dateien einfach zu erreichen sind.

Bzw.: Die Dateien, die von Anfang an dabei sind, kannst du ja mit einem Ressourceneditor bzw. dem Ressourcencompiler von Delphi anfügen. Das Programm kann dann zur Laufzeit, wenn etwas geändert wurde, Kopien der Ressourcen in Dateien speichern. So braucht man nur die erstellten Dateien zu löschen, um den Urzustand des Programmes zu bekommen.
Sal-9000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 25.06.09 17:24 
@jaenicke:
Hab mir mal deinen Source geladen und schau ihn mir in Ruhe an, danke schonmal!

@Yogu:
Der gedanke mit dem archivieren kam mir auch schon, hätte es eben nur schön gefunden, wenn ich die zusammengestellten Reccourcen dynamisch in eine einzige Datei packen kann.


Die Idee von jaenicke ist auf jeden fall schon mal gut, werde sie dann auch heute abend mal ausprobieren! Aber dazu vorab schonmal ne frage: Bekomme ich nicht schwierigkeiten mit Vierenscanner, wenn ich das auf die Art löse?

Davon ab, ob das nun für mein Prog noch sinnvoll ist, oder nicht, grundprinzipiell würd ich doch gerne noch wissen, ob es nciht doch ieine möglichkeit gibt, mir eine art ressourcen-Datei zur Laufzeit zu erstellen ..... könnt ich die nciht (bin gerade durch jaenicke inspiriert :D ) alle mittles TStream in eine File packen und auch auslesen? Also ... in eine andere File, als die Exe selbst?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 25.06.09 17:28 
user profile iconSal-9000 hat folgendes geschrieben Zum zitierten Posting springen:
Bekomme ich nicht schwierigkeiten mit Vierenscanner, wenn ich das auf die Art löse?
Wenn du die Exe veränderst, werden Virenscanner natürlich misstrauisch.

Zudem brauchst du Adminrechte, wenn du die Exe oder Dateien im Verzeichnis der Exe verändern willst.

user profile iconSal-9000 hat folgendes geschrieben Zum zitierten Posting springen:
alle mittles TStream in eine File packen und auch auslesen? Also ... in eine andere File, als die Exe selbst?
Sicher kannst du das. Einfach z.B. immer die Größenangabe vor jedes Datenpaket usw., oder ein richtiges Inhaltsverzeichnis an den Anfang der Datei (des Streams). Dafür gibt es ja TFileStream.

Aber wenn du die Datei ins Verzeichnis der Exe legen willst, brauchst du auch wieder Adminrechte.
Sal-9000 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 25.06.09 18:36 
Ich danke euch nochmals für eure Antworten .. nun kann ich endlich wieder weiterbasteln :D

Werde mich nun mal mit TFileStream auseinandersetzen!

Schönen Abend wünsch ich noch :D