Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Resbinder (https://www.delphipraxis.net/77656-resbinder.html)

Carlo91 22. Sep 2006 14:58


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

_frank_ 22. Sep 2006 16:34

Re: Resbinder
 
hier ist das erklärt:
http://msdn.microsoft.com/library/de.../resources.asp

mal ein auszug aus meinem DFMedit zum ändern der form-resource:
Delphi-Quellcode:
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;
den rest musst du probieren/googlen ;)

HTH Frank

Carlo91 22. Sep 2006 17:54

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

_frank_ 22. Sep 2006 18:12

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
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm

Gruß Frank

Carlo91 22. Sep 2006 18:15

Re: Resbinder
 
so hab den code mal getestet und hab ein problem festgestellt

Delphi-Quellcode:
EnumResourceNames(hModule, RT_RCDATA,@EnumDfmNameProc, Integer(ListBox1.Items));
was ist das @EnumDfmNameProc :?: :?: :?: Das wird bei mir als falsch angezeigt :!:

und nein ich will keinen reseditor schreiben :!:

MfG Carlo

_frank_ 22. Sep 2006 18:28

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:
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;
Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 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