AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Resbinder

Ein Thema von Carlo91 · begonnen am 22. Sep 2006 · letzter Beitrag vom 22. Sep 2006
Antwort Antwort
Carlo91

Registriert seit: 3. Jun 2006
Ort: Bremen
107 Beiträge
 
Delphi 2006 Architect
 
#1

Resbinder

  Alt 22. Sep 2006, 14:58
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
Thorben
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Resbinder

  Alt 22. Sep 2006, 16:34
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
  Mit Zitat antworten Zitat
Carlo91

Registriert seit: 3. Jun 2006
Ort: Bremen
107 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Resbinder

  Alt 22. Sep 2006, 17:54
Danke für die schnelle antwort und für deinen code


P.S. konnte den code noch nicht testen weil ich grade was mit VMware teste.

MfG Carlo
Thorben
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Resbinder

  Alt 22. Sep 2006, 18:12
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
  Mit Zitat antworten Zitat
Carlo91

Registriert seit: 3. Jun 2006
Ort: Bremen
107 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Resbinder

  Alt 22. Sep 2006, 18:15
so hab den code mal getestet und hab ein problem festgestellt

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
Thorben
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#6

Re: Resbinder

  Alt 22. Sep 2006, 18:28
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 = 'TPF0then // is it a DFM resource?
      begin
        TStrings(lParam).Add(StrPas(lpszName));
      end;
    except
      raise;
    end;
  finally
    rs.free;
  end;
  Result := True;
end;
Gruß Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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