udres- was ist das?
udres- was ist das?
Hallo,
in zwei Beiträgen wird von UDRES-Lib und einer Funktion "UDRES_ADDFILEID" geschrieben.
Was ist das? Wie wird es erstellt? Was sind die Vorteile. Ist die DLL mit in der EXE?
Mit dem Beitrag von TS-SOFT konnte ich nichts anfangen., war mir zu kompliziert. Kann man das einem Anfänger mal verklickern.
in zwei Beiträgen wird von UDRES-Lib und einer Funktion "UDRES_ADDFILEID" geschrieben.
Was ist das? Wie wird es erstellt? Was sind die Vorteile. Ist die DLL mit in der EXE?
Mit dem Beitrag von TS-SOFT konnte ich nichts anfangen., war mir zu kompliziert. Kann man das einem Anfänger mal verklickern.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
>> Mit dem Beitrag von TS-SOFT konnte ich nichts anfangen
Soso, es ist eine ausreichend beschreibende Hilfe bei. Es sind mehrere
Beispiele bei. Wo ist das Problem?
UDRes_AddFile fügt eine Datei hinzu, FileID wird durch anfängliches
UDRes_Create oder UDRes_Open ermittelt. Mit UDRes_Close wirds am Ende
geschlossen. Wenn Du jetzt noch in die PB Hilfe siehst, wirste sehen, das es
genauso funktioniert wie in der File Lib von PB
Die einzelnen Files (Resourcen) werden nicht mit einem Namen gespeichert,
sondern nummeriert. Hierfür darfste Nummern zwischen 1-32767 wählen,
aber alle einmalig.
// Nachtrag: Beispiel
Normal in PB:
Sieht mit UDRes so aus:
Der Source um die Res-Datei zu erstellen:
Vorteil:
- halber Speicherverbrauch
- problemlos auch komprimiert
- kann auch mit DLLs umgehen
Nachteil:
- Windows only
- Resfile muß einmalig extra erstellt werden.
Soso, es ist eine ausreichend beschreibende Hilfe bei. Es sind mehrere
Beispiele bei. Wo ist das Problem?
UDRes_AddFile fügt eine Datei hinzu, FileID wird durch anfängliches
UDRes_Create oder UDRes_Open ermittelt. Mit UDRes_Close wirds am Ende
geschlossen. Wenn Du jetzt noch in die PB Hilfe siehst, wirste sehen, das es
genauso funktioniert wie in der File Lib von PB
Die einzelnen Files (Resourcen) werden nicht mit einem Namen gespeichert,
sondern nummeriert. Hierfür darfste Nummern zwischen 1-32767 wählen,
aber alle einmalig.
// Nachtrag: Beispiel
Normal in PB:
Code: Alles auswählen
Image = CatchImage(#PB_Any, ?Image)
If OpenWindow(0, #PB_Ignore, 0, 168, 35, "Include-Binary")
CreateGadgetList(WindowID(0))
ImageGadget(0, 0, 0, 168, 35, ImageID(Image))
While WaitWindowEvent() <> 16 : Wend
EndIf
DataSection
Image:
IncludeBinary #PB_Compiler_Home + "Examples\Sources\Data\PureBasic.bmp"
EndDataSection
Code: Alles auswählen
Import "Image.res" : EndImport ; Ersatz für Datasection
Image = UDRes_CatchImage(#PB_Any, 1)
If OpenWindow(0, #PB_Ignore, 0, 168, 35, "UDRes")
CreateGadgetList(WindowID(0))
ImageGadget(0, 0, 0, 168, 35, ImageID(Image))
While WaitWindowEvent() <> 16 : Wend
EndIff
Code: Alles auswählen
File = UDRes_Create("Image.res")
If File
UDRes_AddFile(File, #PB_Compiler_Home + "Examples\Sources\Data\PureBasic.bmp", 1)
; ... weitere Dateien
UDRes_Close(File)
EndIf
- halber Speicherverbrauch
- problemlos auch komprimiert
- kann auch mit DLLs umgehen
Nachteil:
- Windows only
- Resfile muß einmalig extra erstellt werden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hallo TS-SOFT,
wenn ich das richtig verstanden habe ist der Sachstand folgender:
was man sonst in der Datasection eingefügt hat, macht man jetzt mit der *.RES-Datei = Resourcendatei. Außer Bilder kann man auch DLL-Dateien einfügen. Somit hat man bei der Weitergabe eines erstellten Programmes nicht eine Vielzahl an Dateien, sondern nur eine Datei, außer der EXE natürlich. Man kann zwar die DLL etc. auch in der Datasection aufnehmen, aber dadurch bläht sich die Exe-Datei auf und verbraucht mehr Speicherplatz. Durch die RES-Datei halbiert sich der Speicherbedarf.
Ich hoffe ich habe das richtig gerafft.
wenn ich das richtig verstanden habe ist der Sachstand folgender:
was man sonst in der Datasection eingefügt hat, macht man jetzt mit der *.RES-Datei = Resourcendatei. Außer Bilder kann man auch DLL-Dateien einfügen. Somit hat man bei der Weitergabe eines erstellten Programmes nicht eine Vielzahl an Dateien, sondern nur eine Datei, außer der EXE natürlich. Man kann zwar die DLL etc. auch in der Datasection aufnehmen, aber dadurch bläht sich die Exe-Datei auf und verbraucht mehr Speicherplatz. Durch die RES-Datei halbiert sich der Speicherbedarf.
Ich hoffe ich habe das richtig gerafft.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Die Res-datei wird beim Importieren durch den Linker an die Exe
gehangen. Beim laden der Exe wird der Res-Teil nicht automatisch mit in
den RAM geladen, wie es bei Include-Binary der Fall ist. Erst wenn Du eine
Res verwendest, wird diese geladen, gecatched und freigegeben, so das
nur das gecatchte Bild im Speicher ist
Du brauchst also nur eine Datei weitergeben, die Exe, diese enthält die Resourcen.
Alles was Du mit IncludeBinary einbinden kannst, geht hiermit auch, also
jeder Dateityp, den Du nutzen kannst. Für Bilder und Sounds bietet es sich
natürlich an. Die Resourcen können auch durch Speicherung
wiederhergestellt werden (UDRes_Save)
Ausserdem können diese auch gepackt in der Res gespeichert werden, nur
entsprechend die Funktionen mit Pack im Namen verwenden.
Für DLLs ist in etwa dieselbe Funktionalität, wie in LoadDLLMemory-Lib
integriert, nur noch einfacher.
Gruß
Thomas
gehangen. Beim laden der Exe wird der Res-Teil nicht automatisch mit in
den RAM geladen, wie es bei Include-Binary der Fall ist. Erst wenn Du eine
Res verwendest, wird diese geladen, gecatched und freigegeben, so das
nur das gecatchte Bild im Speicher ist

Du brauchst also nur eine Datei weitergeben, die Exe, diese enthält die Resourcen.
Alles was Du mit IncludeBinary einbinden kannst, geht hiermit auch, also
jeder Dateityp, den Du nutzen kannst. Für Bilder und Sounds bietet es sich
natürlich an. Die Resourcen können auch durch Speicherung
wiederhergestellt werden (UDRes_Save)
Ausserdem können diese auch gepackt in der Res gespeichert werden, nur
entsprechend die Funktionen mit Pack im Namen verwenden.
Für DLLs ist in etwa dieselbe Funktionalität, wie in LoadDLLMemory-Lib
integriert, nur noch einfacher.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

UDRes Manager
Hallo,
kannst ja meinen UDRes - Manager verwenden. Den benutze
ich immer wieder, zur Erstellung meiner Resourcen. Ist so
vielleicht einfacher für dich.
kannst ja meinen UDRes - Manager verwenden. Den benutze
ich immer wieder, zur Erstellung meiner Resourcen. Ist so
vielleicht einfacher für dich.
Code: Alles auswählen
Global pfile.s, rfile.s, dfile.s, daten.s, item.s
Global nr.l, count.l, erfolg.l, Quit.l
Declare CompileRes(fname.s)
Declare SaveProjekt(pfile.s)
Declare LoadProjekt(pfile.s)
#MyWindow = 0
#MyGadget = 100
If OpenWindow(#MyWindow,100,100,800,400,"Resourcen - Manager",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#MyWindow))
ButtonGadget(1, 450, 10, 100, 25, "Ende")
ButtonGadget(2, 10, 10, 100, 25, "Speichere Projekt")
ButtonGadget(3, 10, 40, 100, 25, "Lade Projekt")
ButtonGadget(4, 150, 10, 100, 25, "Datei einfügen")
ButtonGadget(5, 150, 40, 100, 25, ".Res Datei erstellen")
ButtonGadget(6, 290, 10, 100, 25, "Liste löschen")
ListIconGadget(#MyGadget,5, 100, 700, 280,"Pack",80,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_CheckBoxes)
AddGadgetColumn(#MyGadget, 1, "Nummer", 60)
AddGadgetColumn(#MyGadget,2,"Dateiname",520)
Quit = 0
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Quit = 1
Case 2
; Neues Projekt speichern
Pattern$ = "Resource - Dateien (*.prj)|*.prj"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
pfile = SaveFileRequester("Bitte Datei zum Laden auswählen", "C:\", Pattern$, Pattern)
If pfile
erfolg = CreatePreferences(pfile)
If erfolg = 0
MessageRequester("Projekt", "Datei : " + pfile + " konnte nicht erstellt werden !", #PB_MessageRequester_Ok)
Else
SaveProjekt(pfile)
EndIf
EndIf
Case 3
; Lade Projekt
Pattern$ = "Resource - Dateien (*.prj)|*.prj"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
pfile = OpenFileRequester("Bitte Datei zum Laden auswählen", "C:\", Pattern$, Pattern)
If pfile
erfolg = OpenPreferences(pfile)
If erfolg <> 0
LoadProjekt(pfile)
Else
MessageRequester("Projekt", "Datei : " + pfile + " konnte nicht gefunden werden !", #PB_MessageRequester_Ok)
EndIf
EndIf
Case 4
; Datei einfügen
Pattern$ = "Alle Dateien (*.*)|*.*"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
dfile = OpenFileRequester("Bitte Datei zum Laden auswählen", "C:\", Pattern$, Pattern)
If dfile
count = CountGadgetItems(#MyGadget)
item = "Gepackt" + Chr(10) + Str(count + 1) + Chr(10) + dfile
AddGadgetItem(#MyGadget, -1, item)
EndIf
Case 5
; Res - Datei kompileren
Pattern$ = "Resource - Dateien (*.res)|*.res"
Pattern = 0 ; wir verwenden den ersten von drei möglichen Pattern als Standard
rfile = SaveFileRequester("Bitte Datei zum Laden auswählen", "C:\", Pattern$, Pattern)
If rfile
CompileRes(rfile)
EndIf
Case 6
; Liste löschen
ClearGadgetItemList(#MyGadget)
Case 100 ; ListIcon - Gadget
; wenn ein Eintrag gewählt wurde, werden die Eingabefelder
; entsprechend gefüllt.
EndSelect
EndSelect
Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf
EndIf
CloseWindow(#MyWindow)
End
Procedure CompileRes(fname.s)
Protected i.l, gepackt.l, check.l, FileID.l, lfnr.l
Protected tempfile.s
count = CountGadgetItems(#MyGadget)
If count > 0
If fname <> ""
FileID = UDRes_Create(fname)
If FileID
For i = 0 To count - 1
gepackt = 0
check = GetGadgetItemState(#MyGadget, i)
If check & #PB_ListIcon_Checked
gepackt = 1
Else
gepackt = 0
EndIf
tempfile = GetGadgetItemText(#MyGadget, i, 2)
lfnr = Val(GetGadgetItemText(#MyGadget, i, 1))
Select gepackt
Case 0
UDRes_AddFile(FileID, tempfile, lfnr)
Case 1
UDRes_AddPackFile(FileID, tempfile, lfnr)
EndSelect
Next i
UDRes_Close(FileID)
MessageRequester("Packen...", "Datei : " + fname + " compiliert !", #PB_MessageRequester_Ok)
EndIf
EndIf
Else
MessageRequester("Packen...", "Keine Einträge vorhanden !", #PB_MessageRequester_Ok)
EndIf
EndProcedure
Procedure SaveProjekt(pfile.s)
Protected i.l, gepackt.l, check.l, FileID.l, lfnr.l
Protected tempfile.s
count = CountGadgetItems(#MyGadget)
If count > 0
For i = 0 To count - 1
gepackt = 0
check = GetGadgetItemState(#MyGadget, i)
If check & #PB_ListIcon_Checked
gepackt = 1
Else
gepackt = 0
EndIf
tempfile = GetGadgetItemText(#MyGadget, i, 2)
lfnr = Val(GetGadgetItemText(#MyGadget, i, 1))
PreferenceGroup(Str(lfnr))
WritePreferenceString("Gepackt", Str(gepackt))
WritePreferenceString("File", tempfile)
Next i
ClosePreferences()
MessageRequester("Info", "Datei : " + pfile + " gespeichert !", #PB_MessageRequester_Ok)
EndIf
EndProcedure
Procedure LoadProjekt(pfile.s)
Protected file.s, gepackt.s, stdwert.s, Gruppe.s
Protected k.l
k = 0
stdwert = " "
ClearGadgetItemList(#MyGadget)
If ExaminePreferenceGroups() <> 0
While NextPreferenceGroup() <> 0
Gruppe = PreferenceGroupName()
gepackt = ReadPreferenceString("Gepackt", stdwert)
file = ReadPreferenceString("File", stdwert)
item = "Gepackt" + #LF$ + Gruppe + #LF$ + file
AddGadgetItem(#MyGadget, -1, item)
If gepackt = "1"
SetGadgetItemState(#MyGadget, k, #PB_ListIcon_Checked)
EndIf
k = k + 1
Wend
EndIf
ClosePreferences()
EndProcedure
PB 6.10
Hallo H.Brill,
genau durch diesen Manager bin ich ja darauf aufmerksam geworden.
Hatte ich durch Zufall entdeckt und mich weiter informiert.
Ah ja, du warst das doch auch mit der listview.dll. War schon etwas länger her, habe es totzdem beantwortet. Im Listviewforum ist mir aufgefallen, das TS-SOFT zwar mit Linux arbeitet, offentsichtlich auch mit XP-HOME und Profan und auch die listview.dll benutzt. Aber das nur nebenbei.
Auf jeden Fall danke. Jetzt bin ich schlauer und weiß Bescheid. Es ist genau das, was ich gesucht habe. Toll von euch beiden was ihr das gemacht habt.
genau durch diesen Manager bin ich ja darauf aufmerksam geworden.
Hatte ich durch Zufall entdeckt und mich weiter informiert.
Ah ja, du warst das doch auch mit der listview.dll. War schon etwas länger her, habe es totzdem beantwortet. Im Listviewforum ist mir aufgefallen, das TS-SOFT zwar mit Linux arbeitet, offentsichtlich auch mit XP-HOME und Profan und auch die listview.dll benutzt. Aber das nur nebenbei.
Auf jeden Fall danke. Jetzt bin ich schlauer und weiß Bescheid. Es ist genau das, was ich gesucht habe. Toll von euch beiden was ihr das gemacht habt.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
hmodule
Hallo TS-Soft,
Ich benutze ja schon seit einiger Zeit die UDRes-Lib. Nun wollte
ich mal wissen, was genau mit dem optionalen Parameter
hmodule.l anzufangen ist.
Dazu folgender Hintergrund : Da meine Arbeitskollegen dauernd
ihre Datendateien (etliche Preislisten) versehentlich löschen, habe
ich sie als Resource mit eingepackt. Nun ist aber das Problem, daß
sich öfter Preise ändern. Da ich ja im laufenden Programm die
Resourcen nicht ändern darf, möchte ich dies mit einem zusätzl.
Programm machen, d. h. mein Preislistenprogramm beenden, das
Zusatzprogramm aufrufen, die Resourcen ändern und die .res wieder
mit meinem Preislistenprogramm verlinken.
Geht sowas oder ist das nur mit Neucompilerung durch PB möglich ?
PS: Du hast was ähnliches mit XDATA_LinkToExe() für XProfan gemacht.
Wenn das mit dem Reshacker auch für PB - Executables gilt, kann ich
ja die include als Vorlage nehmen.
Ich benutze ja schon seit einiger Zeit die UDRes-Lib. Nun wollte
ich mal wissen, was genau mit dem optionalen Parameter
hmodule.l anzufangen ist.
Dazu folgender Hintergrund : Da meine Arbeitskollegen dauernd
ihre Datendateien (etliche Preislisten) versehentlich löschen, habe
ich sie als Resource mit eingepackt. Nun ist aber das Problem, daß
sich öfter Preise ändern. Da ich ja im laufenden Programm die
Resourcen nicht ändern darf, möchte ich dies mit einem zusätzl.
Programm machen, d. h. mein Preislistenprogramm beenden, das
Zusatzprogramm aufrufen, die Resourcen ändern und die .res wieder
mit meinem Preislistenprogramm verlinken.
Geht sowas oder ist das nur mit Neucompilerung durch PB möglich ?
PS: Du hast was ähnliches mit XDATA_LinkToExe() für XProfan gemacht.
Wenn das mit dem Reshacker auch für PB - Executables gilt, kann ich
ja die include als Vorlage nehmen.
PB 6.10
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
hModule erhälste als Ergebnis von LoadLibrary_()
Mit anderen Worten, fremde DLL oder Exe laden und Resourcen verwenden.
Ich hoffe das hilft Dir weiter
Gruß
Thomas
//Nachtrag:
Wenn Du eine Resourcen DLL erstellen möchtest, einfach die Res
importieren, Projectoptionen Shared DLL wählen und kompilieren
Mit anderen Worten, fremde DLL oder Exe laden und Resourcen verwenden.
Ich hoffe das hilft Dir weiter
Gruß
Thomas
//Nachtrag:
Wenn Du eine Resourcen DLL erstellen möchtest, einfach die Res
importieren, Projectoptionen Shared DLL wählen und kompilieren

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
