![]() |
Resbinder
Hi,
ich möchte ein programm schreiben womit man zu andern programmen resourcen hinzufügen kann! meine problem ist das ich kein plan hab wie das gehn soll hab schon gegooglet aber nichts gefunden. schon mal DANKE im voraus :!: MfG Carlo |
Re: Resbinder
hier ist das erklärt:
![]() mal ein auszug aus meinem DFMedit zum ändern der form-resource:
Delphi-Quellcode:
den rest musst du probieren/googlen ;)
function TForm_DFMChooseRes.loadFile(filename:string):integer;
begin freelibrary(hModule); Listbox1.Clear; hModule:=LoadLibraryEx(PCHAR(filename),0,LOAD_LIBRARY_AS_DATAFILE); if hModule <> 0 then begin fName:=filename; EnumResourceNames(hModule, RT_RCDATA,@EnumDfmNameProc, Integer(Listbox1.Items)); end; result:=hModule; end; procedure TForm_DFMChooseRes.ReplaceRes(s:TStrings;resname:string); var h :THandle; ms:TStringStream; ms2: TMemoryStream; begin if hModule<>0 then begin createbackup(fname); freelibrary(hModule); ms:=TStringStream.create(s.Text); ms2:=TMemoryStream.create; ObjectTextToBinary(ms,ms2); ms2.Position:=0; if resname='' then resname:=FormName; h := BeginUpdateResource(PChar(fname), false); UpdateResource(h, RT_RCData, PCHAR(ResName), 0, ms2.Memory, ms2.size); EndUpdateResource(h, false); ms2.Free; ms.free; end; end; HTH Frank |
Re: Resbinder
Danke für die schnelle antwort und für deinen code :!: :!: :!:
:-D :-D :-D :thumb: :thumb: :thumb: :-D :-D :-D P.S. konnte den code noch nicht testen weil ich grade was mit VMware teste. MfG Carlo |
Re: Resbinder
der code in dieser form wird dir nicht viel nutzen.
er ist für einen anderen Zwecke geschrieben als du es brauchst und soll dir nur zeigen, wie du an das benötigte handle kommst und in welcher Form die parameter der resourcen-funktionen sein müssen. also nix mit copy&paste&fertig ;) Wenn du sowas wie einen resourceneditor schreiben willst...das gibts schon ;p ![]() Gruß Frank |
Re: Resbinder
so hab den code mal getestet und hab ein problem festgestellt
Delphi-Quellcode:
was ist das @EnumDfmNameProc :?: :?: :?: Das wird bei mir als falsch angezeigt :!:
EnumResourceNames(hModule, RT_RCDATA,@EnumDfmNameProc, Integer(ListBox1.Items));
und nein ich will keinen reseditor schreiben :!: MfG Carlo |
Re: Resbinder
das brauchst du nicht (denke ich) das ist ein Pointer auf eine function zum enumerieren aller Resourcen einer Datei.
diese funktion wird für jede gefundene Resource aufgerufen und regelt, was damit passieren soll (in meinem Fall gebe ich einen Zeiger auf eine Listbox mit und hänge die gefilterten Resourcen an diese an). Wenn es dich trotzdem interessiert oder du es brauchst...hier meine ;)
Delphi-Quellcode:
Gruß Frank
function EnumDfmNameProc(hModule: THandle; lpszType, lpszName: PChar;
lParam: Integer): Boolean; stdcall; var rs: TResourceStream; Buf: String; begin rs := TResourceStream.Create(hModule, lpszname, lpszType); // load resource in memory try try setlength(buf,4); rs.Read(Buf[1], 4); // read the first 4 bytes if Buf = 'TPF0' then // is it a DFM resource? begin TStrings(lParam).Add(StrPas(lpszName)); end; except raise; end; finally rs.free; end; Result := True; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz