Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bitmap in Exe (https://www.delphipraxis.net/10678-bitmap-exe.html)

PlanLos 23. Okt 2003 11:02


Bitmap in Exe
 
Hallo,

Ich habe versucht mit Updateresource eine Bmp in eine Exe zu bringen. Zwar legt er dann in die exe die resource an, aber sie enthält nicht dass bild dass ich versuche implementieren. Die resource enthält keine Daten. Muss man ein Bild vorher irgendwie umwandeln damit Updateresource das bild richtig in die exe hineinfügt?

PlanLos 24. Okt 2003 10:41

Re: Bitmap in Exe
 
hier ist mein versuch

Delphi-Quellcode:
var
   stream : TFilestream;
   hInst: THandle;
   ptr : PWideChar;
begin
   Stream := TFileStream.Create('C:\test.bmp',fmOpenRead);
   getmem (ptr,Stream.size+1);
   try
      Stream.Seek(soFromBeginning,0);
      stream.read(ptr,Stream.size);
      hInst:=BeginUpdateResource(Pchar(Test.exe), False);
      if hInst > 0 then
         begin
         UpdateResource(hInst, RT_Bitmap,'Test',
         MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),ptr,Stream.size);
         EndUpdateResource(hInst, False);
         end;
   finally
      freemem (ptr,Stream.size+1);
      stream.Free;
   end;
end;
[edit=r_kerber]Delphi-Tags gesetzt. Mfg, r_kerber[/edit]

Christian Seehase 24. Okt 2003 13:30

Re: Bitmap in Exe
 
Moin Planlos,

Moin Planlos,

probier's mal so:

Code:
var
   stream : TFilestream;
   hInst: THandle;
   ptr : [color=red]Pointer[/color];
begin
   Stream := TFileStream.Create('C:\test.bmp',fmOpenRead);
   getmem (ptr,Stream.size+1);
   try
      Stream.Seek(soFromBeginning,0);
      stream.read(ptr[b][color=red]^[/color][/b],Stream.size); [color=red]// <== [/color]
      hInst:=BeginUpdateResource(Pchar(Test.exe), False);
      if hInst > 0 then
         begin
         UpdateResource(hInst, RT_Bitmap,'Test',
         MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),ptr[b][color=red]^[/color][/b],Stream.size); [color=red]// <== [/color]
         EndUpdateResource(hInst, False);
         end;
   finally
      freemem (ptr,Stream.size+1);
      stream.Free;
   end;
end;

PlanLos 27. Okt 2003 07:13

Re: Bitmap in Exe
 
Moin

Geht Danke :mrgreen:
Du bist wie immer eine grosse Hilfe.

PlanLos 31. Okt 2003 14:57

Re: Bitmap in Exe
 
Hi Christian,

Ich habe mich doch zu früh gefreut. Zwar wird mir in ResourceHacker das Bild das ich in die Exe reinmache angezeigt, aber wenn ich das Bild ausgeben will funktioniert das nicht. ich Habe mal das bild mit ResourceHacker als Datei speichern lasse. Das Ergebnis ist ein Leeres Bild. Warum ?
Hat jemand da ne Idee?

PlanLos 17. Nov 2003 08:18

Re: Bitmap in Exe
 
das Problem hat sich erledigt.

Es lag nur daran, dass in den stream noch die Fileheader Information von dem Bild vorhanden war.
Wenn man dementsprechend alles nach den Fileheader auliest funktioniert es.

Uncle Cracker 18. Nov 2003 15:09

Re: Bitmap in Exe
 
Ich hab' da mal 'ne Frage:

Wieso kommt an dieser Stelle

Delphi-Quellcode:
MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),ptr^,Stream.size);
die Meldung das MAKELANGID ein undefinierbarer Bezeichner ist?

Muss ich dafür vielleicht noch irgendeine Uses einbinden?


:love: Danke UC

Christian Seehase 18. Nov 2003 18:57

Re: Bitmap in Exe
 
Moin UC,

ich konnte keine Deklaration dafür in Delphi finden.
Es ist eigentlich ein Makro, dass in Delphi als Funktion deklariert werden müsste:

Delphi-Quellcode:
function MAKELANGID(const usPrimaryLanguage : WORD;const usSubLanguage : WORD) : WORD;
begin
  Result := (usSubLanguage shl 10) or usPrimaryLanguage;
end;

fxbasic 20. Nov 2003 11:38

Re: Bitmap in Exe
 
Zitat:

Zitat von PlanLos
Es lag nur daran, dass in den stream noch die Fileheader Information von dem Bild vorhanden war.
Wenn man dementsprechend alles nach den Fileheader auliest funktioniert es.

Daran scheitert's bei mir im Moment noch.

Bei welcherr Stream-Position muss ich ansetzen, damit die Fileheaderinfos übersprungen worden? Gibt's da irgend einen fixen Wert?

Vielleicht könnte jemand mal einen definitiven Code für die Bitmap-In-Exe-Funktion liefern, w+ürde mir sehr helfen. Oder funktion für's auslesen der länge des fileheaders!

Vielen Dank im Voraus!

fxbasic 20. Nov 2003 11:56

Re: Bitmap in Exe
 
Könnten's evtl. 14 Bytes sein???


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Seite 1 von 2  1 2      

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