| |
| |
|
 H.Brill | Hallo, Ab XProfan X2 wurden ja manche der internen, eingebauten Icons (21 Stück) geändert. Da gefielen mir die Icons von Profan-Version 11.2a eigentlich besser. Der Drucker sieht z.b. besser aus, der Sand ist gelber, das Gesicht ist anders u.v.m Nun möchte ich nicht jedes einzelne Icon rauspicken. Die gibt es ja in der Icon Group und als RT_Icon. Mit dem ResHacker gelingt es mir nicht, diese Gruppen als Gesamtes zu extrahieren und zu speichern.
XProfan in der Version X4 bietet ja einige Ressourcen-Funktionen an. Wäre es damit möglich, die Icons von der Version X4 gegen die Icons der Version 11.2a in einem Rutsch zu tauschen ? Oder zweimal : einmal mit ResType 3 und dann mit ResType 14 ?
Declare String INamen, update
Declare Long restype, result
update = "C:\Sprachen\XProfanX4\Change\Leer32.dll"
restype = 3' Icon-Group = 14
Window 600, 400
Inamen = "A,MUELL,BAUM,MUENZE,COMPUTER,PROFAN,DOS,SAND,DRUCKER,STEIN,EDITOR,TEXT,EIMER,WASSER,EIS,WEG,FILEICON,WINDOWS,GESICHT,KNOPF1,KNOPF2"
WhileLoop 1, 21
result = Res("Load", update, restype, SubStr$(INamen, &LOOP, ","), "C:\Sprachen\XProfan11\Profan.exe")
Print "Ergebnis : ", &LOOP, ":", If(result = 1, "OK !", "Fail !")
EndWhile
Print "Fertig..."
WaitEnd
So geht es mal jedenfalls nicht. Die Gruppen sind zwar vorhanden, aber die Icons werden nicht im ResHacker angezeigt. Hat da jemand eine Idee, das zu verwirklichen ? |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 23.03.2026 ▲ |
|
| |
|
|
 Georg Teles | Guten Morgen,
H.Brill (23.03.2026)
XProfan in der Version X4 bietet ja einige Ressourcen-Funktionen an. Wäre es damit möglich, die Icons von der Version X4 gegen die Icons der Version 11.2a in einem Rutsch zu tauschen ? Oder zweimal : einmal mit ResType 3 und dann mit ResType 14 ?
das ginge, wie du erkannt hast, müsstest du die Icons (ResType 3) und Icon Group (ResType 14) als eigene Ressourcen behandeln - der Tipp hier kam auch von dir ;) [...] 
Aber mit ResHacker dürfte es sehr wohl am einfachsten gehen. Habe es gerade getestet (beim Export von Icon Group allein bekomme ich allerdings eine Fehlermeldung hmm)
Wenn du alle Ressourcen aus der EXE exportierst, wo die bevorzugten Icons sind und dann in die neue EXE importierst (nur die Icon Group auswählst), dürfte es klappen - habs bei EXE und DLL ausprobiert:
EXE mit bevorzugten Icons laden und alle Ressources als RES exportieren:

Deine EXE öffnen und die RES Datei einlesen (hier habe ich leer32.dll genommen, mit EXE klappts aber auch, habe es auch getestet):

Beim Einlesen nur Icon Group auswählen:

Voila:

Deine EXE, in die du die Icons einfügen willst, dürfte eventuell keine Icons haben, zumindest nicht, die gleich heißen weil Kollision.
Im Vorfeld die Icon Group aus der EXE mal löschen und die EXE zwischenspeichern/neu öffnen und danach die RES einlesen/Icons importieren.
Grüße Georg |
|
| |
| |
| |
|
|
 H.Brill |
Deine EXE, in die du die Icons einfügen willst, dürfte eventuell keine Icons haben, zumindest nicht, die gleich heißen weil Kollision.
Im Vorfeld die Icon Group aus der EXE mal löschen und die EXE zwischenspeichern/neu öffnen und danach die RES einlesen/Icons importieren.
Grüße Georg
Ja, genau darum ging es ja auch. Ich will ja die Profan.exe und Prfrun32.exe (X4) und die älteren Icons aus Version 11.2a haben. Also muß ich dann halt die Icon Group vorher löschen, .exe speichern und neu impotieren.
Danke für den Vorschlag.
Ich dachte halt, mit hätte ich es leichter. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 23.03.2026 ▲ |
|
| |
|
|
 H.Brill | Erfolg. Ich hatte den ResHacker Version 3.6. Der konnte kein .res Dateien speichern. Mit der Version 5.2 geht es jetzt aber. Vorgehensweise ist, wie du oben schon erwähnt hast. Vor dem Importieren muß man tatsächlich die Icon Group erst löschen und dann speichern. Dann kann man sie importieren.
Der Interpreter funktioniert schon mal. Bei der Runtime wird es wohl ähnlich sein. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 23.03.2026 ▲ |
|
| |
|
|
 Georg Teles | Irgendwie struggle ich ziemlich mit dem Load Befehl - er scheint nicht ausgereift zu sein oder wir benutzen diesen falsch hehehe, habe nicht fuktionierende Variante mit LOAD beigefügt ...
Der Change Befehl für Icons und Icon Group funktioniert übringens wunderbar, wenn diese ersetzt werden.
Aber auch wenn man Zieldatei ohne Icons und Icon Group angibt, fügt CHANGE Befehl diese einfach hinzu (Sprache beachten!) so ist es auch in der Hilfe beschrieben, wenn die Sprache beachtet werden soll 
Grüße Georg |
|
| |
| |
| |
|
|
 H.Brill | Was Res("Load",...) anbetrifft, ist das eher im Zusammenhang mit Res("Save",...) zu sehen. So, wie ich es aus der Hilfe ersehen kann, kann man zuerst mit Res("save",...) binäre Abbilder einzelner Ressourcen als Dateien speichern und diese später mit Res("Load",...) wieder einlesen und als Ressource in der .exe oder .dll speichern. Also müßte man in meinem Falle erst alle Icons von Profan.exe (Version 11.2a) mit Res("save",...) als binäres Abbild in einen Ordner speichern und dann mit Res("Load",...) in die andere Profan.exe bzw.Prfrun32.exe(X4) wieder einfügen.
Was die Sprache (1031) betrifft : Vielleicht kann da der Befehl AdRes H1, T nützlich sein. In der Listboxliste (3.Spalte) steht sie ja. Da bräuchtest du nicht mehr die genaue Position zu kennen, sondern könntest mit InStr() und SubStr$(zeile, 3, "|") diese abfragen. Außerdem hätte man mit GetCount(0) die genaue Anzahl, falls es mal mehr Icons werden. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 24.03.2026 ▲ |
|
| |
|
|
 H.Brill | Hier habe ich mal eine Gridbox mit Checkboxen und den Internen Icons gemacht. Den ursprünglichen Code habe ich hier im Forum gefunden und für meine Bedürfnisse abgeändert.
$H Windows.ph
$H Commctrl.ph
Declare String zeile
Declare IcoList&, lv&
Window 600, 400
AddRes %Hinstance, 14
def ImageList_AddIcon(2) !"comctl32","ImageList_AddIcon"'--Diese API ist nirgendwo definiert
Lv&=create("GridBox",%hwnd,"Icon;0;80;Name;0;100;Sprache;0;150",0,10,50,320,200)
WhileLoop 0, GetCount(0) - 1
zeile = " " + "|" + SubStr$(GetString$(0, &LOOP), 2, "|") + "|" + SubStr$(GetString$(0, &LOOP), 3, "|")
AddString(lv&, zeile)
EndWhile
def LvGetCheck(2) testbit(sendmessage(&(1),~LVM_GETITEMSTATE,%(2),~LVIS_STATEIMAGEMASK),13)
proc LvSetCheck'---------------------------------LvSetCheck------------------------------
parameters Lv&,Item&,Mode%
Lv#.StateMask&=~LVIS_STATEIMAGEMASK
Lv#.State& =$1000 *(Mode% + 1)
sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,Lv#)
endproc'---------------------------------------------------------------------------------
IcoList&=~ImageList_Create(32,32,33,0,0)'--Icons Grösse 32*32 (3.Parameter: Farbtiefe)
'--Die Höhe der Lv-Zeilen passt sich der Grösse der Icons an!
WhileLoop 0, GetCount(0) - 1
zeile = SubStr$(GetString$(0, &LOOP), 2, "|")
ImageList_AddIcon(IcoList&,~LoadIcon(%hinstance,zeile))'--Icons in IcoList
EndWhile
'--IcoList für Tabellenansicht mit ListView verbinden
sendmessage(Lv&,~LVM_SETIMAGELIST,~LVSIL_SMALL,IcoList&)
'--Checkboxen + Icons in SubItems + Gitterlinien
sendmessage(Lv&,~LVM_SETEXTENDEDLISTVIEWSTYLE,0,~LVS_EX_CHECKBOXES | ~LVS_EX_SUBITEMIMAGES | ~LVS_EX_GRIDLINES)
declare Lv#
struct Lvi=Mask&,Item&,SubItem&,State&,StateMask&,Text&,TextMax&,Image&,Param&
dim Lv#,Lvi
WhileLoop 0, GetCount(0) - 1
clear Lv#
Lv#.Mask& = ~LVIF_IMAGE
Lv#.Item& = &LOOP'-----------------------------Zeile 0
Lv#.SubItem& = 0'-----------------------------Spalte 0
Lv#.Image& = &LOOP'-----------------------------Icon 1
sendmessage(Lv&, ~LVM_SETITEM, 0, Lv#)
/*
Lv#.Item& =0 '-----------------------------Zeile 0
Lv#.SubItem&=1 '-----------------------------Spalte 1
Lv#.Image& = &LOOP '-----------------------------Icon 2
sendmessage(Lv&,~LVM_SETITEM,0,Lv#)
Lv#.Item& =0 '-----------------------------Zeile 0
Lv#.SubItem&=2 '-----------------------------Spalte 2
Lv#.Image& = &LOOP '-----------------------------Icon 0
sendmessage(Lv&,~LVM_SETITEM,0,Lv#)
*/
EndWhile
'LvSetCheck(Lv&,1,1) '---Eintrag abhaken (0 als 3.Parameter löscht den Haken)
usermessages 16'--Close abfangen
while 1
waitinput
locate 0,0
print "Gewählt:",getcursel(Lv&)
print "Check :",LvGetCheck(Lv&,getcursel(Lv&))
case %umessage=16:break
endwhile
'--Aufrufen, wenn das Grid nicht mehr gebraucht wird:
destroywindow(Lv&)
~ImageList_Destroy(IcoList&)
dispose Lv#
End
Sowas wäre z.b. gut, wenn man die zu tauschenden Icons auswählen möchte. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 28.03.2026 ▲ |
|
| |
|
|
 Georg Teles | Das lässt sich leicht umsetzen, dazu brächte man nur einige Routinen um eine Quelldatei zu laden und eine Zieldatei bestimmen.
Als Bonus könnte man ein Häckchen hinzufügen für die Option, das Icon zu ersetzen oder neu hinzuzufügen (obwohl mit Change egal ist, ob das Icon vorhanden ist oder nicht, wird ersetzt/andernfalls hinzugefügt) plus eventuell optional einen neuen Namen für das Icon vergeben (ein Edit vorausgefüllt mit dem Originalnamen)
Schaue es mir an, wie schnell das geht, lässt sich sicherlich ein Tool für das fertigen 
Grüße Georg |
|
| |
| |
| |
|
|
 H.Brill | Ich denke, da bekommt man bestimmt was hin. Was mir noch fehlt, wäre eine Funktion, die nicht nur einzelne Icons (und sonstige) sondern die ganze Icon -Group als binäres Abbild in eine Datei spreichert und eine, die das lädt. So, wie es der neue ReHacker ja auch kann. Da hätte man das Durch-Iterieren gespart.
Ich hatte damals schon Roland gefragt, ob er nicht den Borland Ressourcen-Compiler (BRC.EXE) zu seiner Installation dazu packen kann. Der ist ja frei erhältlich und außerdem gibt es noch den kostenlosen GORC Ressourcencompiler. Den könnte er ja auch über seine Funktionen bestimmt aufrufen. Hatte aber leider keine Antwort dazu bekommen. Und jetzt braucht man ihn sowieso nicht mehr fragen. Der antwortet nicht mehr, weder im Forum noch per E-Mail. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 29.03.2026 ▲ |
|
| |
|
|
 Georg Teles | H.Brill (29.03.2026)
Ich hatte damals schon Roland gefragt, ob er nicht den Borland Ressourcen-Compiler (BRC.EXE) zu seiner Installation dazu packen kann. Der ist ja frei erhältlich und außerdem gibt es noch den kostenlosen GORC Ressourcencompiler. Den könnte er ja auch über seine Funktionen bestimmt aufrufen. Hatte aber leider keine Antwort dazu bekommen. Und jetzt braucht man ihn sowieso nicht mehr fragen. Der antwortet nicht mehr, weder im Forum noch per E-Mail.
Naja, der Res Compiler ist nicht kostenlos, zumindest finde ich keine Quelle, wo man den herbekommt ? Mit dem Gorc muss man sich beschäftigen, ist ein Aufwand auf jeden Fall.
Selbst mit den vorhandenen Befehlen in X4 sollte man aber einen eigenen ResHacker schreiben können, ist auch ein Aufwand, da man sich schon allein mit Datenstrukturen der verschiedenen Ressourcen beschäftigen muss ich versuche mal, ein Tool für deine Bedürfnisse zu schreiben und melde mich nochmal ...
Grüße |
|
| |
| |
| |
|
|
 H.Brill | Ja da hast du Recht. Der BRCC.exe ist Teil der Delphi-Installation. Den bekommt man nur, wenn man Delphi hat. Genauso, wie der MS RC.exe mit Visual Studio. Ich hatte mal Ende der 90er ein Delphi gekauft, glaube Version 3. Von daher kannte ich den BRC auch. Beide werden wahrscheinlich in der IDE vorm eigentlichen Compilieren aufgerufen und erzeugen dann aus einer .rc eine .res, die dann der Compiler einbinden kann. XProfan kann das ja auch : $RES RessourcenDatei
Da bleibt wohl nur der freie GORC über oder halt ein kostenpflichtiges Tool. Aber der neue Reshacker kann ja auch mit .rc Dateien umgehen.
Wäre ja auch mal interessant, neue Controls hinzuzufügen.Die Listboxen der internen Listboxliste und die Editboxen sind ja ein Beispiel dazu. Findet man in der Ressource DIALOG. |
|
| |
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 29.03.2026 ▲ |
|
| |
|
|
 Georg Teles | H.Brill (29.03.2026)
XProfan kann das ja auch : $RES RessourcenDatei
Naja soweit ich weiß, bindet der Compiler/Linket eine RES Datei an die Runtime, wenn du aus dem Kompilat eine EXE machst.
Bevor du dich mit dem GORC auseinandersetzt, kann man beim ResHacker über die Parameter Befehle übergeben [...] das habe ich bis jetzt nie gemacht, der Aufwand sich mit zu beschäftigen ist aber wesentlich geringer
---
Hier, habe mal etwas gebastelt, war mir neu das Thema ... bis auf die Sprache / Sprach-ID habe ich über LoadLibraryEx und das Laden der Ressourcen das Nötigste gefunden.
Die AddRes Funktion habe ich jetzt nur zum Auslesen der Sprach-ID / Sprache benutzt und nach den Icon Group Namen aus der geladenen Bibliothek abgeglichen, damit nichts verrutscht ...
Die CHANGE Funktion habe ich noch nicht hinzugefügt, ist auch "nur noch" ein Klacks, das mache ich die Tage und teste es mal gründlich, dann wird ein ordentliches Tool draus ... zum Auslesen der EXE und DLLs habe mal das Testprogramm angehängt 
Hab die Icons BAUM (Group BAUM mit Icon ID 5, Auflösung manuell 32x16 Pixel) und MUELL (Group MUELL mit Icon IDs 17 und 26, 32x32 und 16x16 Pixel) bei "neue icons.dll" mal geändert um die Auslesefunktion zu testen
Herunterladen
Grüße Georg |
 |
| |
| |
| |
|