Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Grafik in Resource zur Laufzeit ersetzen... (https://www.delphipraxis.net/59671-grafik-resource-zur-laufzeit-ersetzen.html)

FriFra 27. Dez 2005 00:04


Grafik in Resource zur Laufzeit ersetzen...
 
Ich will zur Laufzeit eine Grafik in einer Bitmap Resource ersetzen. Ich will dabei NICHT die Datei ändern...
Wie das ganze mit Strings funktionieret weiß ich, aber mit Grafiken hab ich das noch nicht hinbekommen...
Procedure zum überschreiben von Strings:
Delphi-Quellcode:
procedure HookResourceString(rs: PResStringRec; newStr: PChar);
  var
    oldprotect: DWORD;
  begin
    VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
    rs^.Identifier := Integer(newStr);
    VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
  end;

SirThornberry 27. Dez 2005 07:29

Re: Grafik in Resource zur Laufzeit ersetzen...
 
wie kommst du an den PResStringRec der originalressource? könntest du mal bitte einen Beispielaufruf posten wie man so eine Stringressource damit austauscht. Ich wollte das ganze gerade probieren denn eigentlich sollte der Ressourcentyp ja egal sein, das Prinzip müsste das gleiche sein aber konnte eben nichts probieren da mir selbst der Ansatz für die Stringressource fehlt.

FriFra 27. Dez 2005 10:10

Re: Grafik in Resource zur Laufzeit ersetzen...
 
Delphi-Quellcode:
var
  { Resourcen überschreiben }
  PMsgDlgOK, PMsgDlgAbort, PMsgDlgYes, PMsgDlgNo, PMsgDlgWarning, PMsgDlgError,
    PMsgDlgInformation, PMsgDlgConfirm: array[0..255] of AnsiChar;

...

  try
    { B E G I N N - Vorblegte Resourcen überschreiben }
    { Hookvariablen initialisieren }
    PMsgDlgOK := #0;
    PMsgDlgAbort := #0;
    PMsgDlgYes := #0;
    PMsgDlgNo := #0;
    PMsgDlgWarning := #0;
    PMsgDlgError := #0;
    PMsgDlgInformation := #0;
    PMsgDlgConfirm := #0;
    { Hookvariablen belegen }
    StrCopy(PMsgDlgOK, PAnsiChar(GetResTxt(LangDll, 1)));
    StrCopy(PMsgDlgAbort, PAnsiChar(GetResTxt(LangDll, 2)));
    StrCopy(PMsgDlgYes, PAnsiChar(GetResTxt(LangDll, 3)));
    StrCopy(PMsgDlgNo, PAnsiChar(GetResTxt(LangDll, 4)));
    StrCopy(PMsgDlgWarning, PAnsiChar(GetResTxt(LangDll, 5)));
    StrCopy(PMsgDlgError, PAnsiChar(GetResTxt(LangDll, 6)));
    StrCopy(PMsgDlgInformation, PAnsiChar(GetResTxt(LangDll, 7)));
    StrCopy(PMsgDlgConfirm, PAnsiChar(GetResTxt(LangDll, 8)));
    { Hookvariablen einschleusen }
    HookResourceString(@SMsgDlgOK, PMsgDlgOK);
    HookResourceString(@SMsgDlgAbort, PMsgDlgAbort);
    HookResourceString(@SMsgDlgCancel, PMsgDlgAbort);
    HookResourceString(@SMsgDlgYes, PMsgDlgYes);
    HookResourceString(@SMsgDlgNo, PMsgDlgNo);
    HookResourceString(@SMsgDlgWarning, PMsgDlgWarning);
    HookResourceString(@SMsgDlgError, PMsgDlgError);
    HookResourceString(@SMsgDlgInformation, PMsgDlgInformation);
    HookResourceString(@SMsgDlgConfirm, PMsgDlgConfirm);
    { E N D E - Vorblegte Resourcen überschreiben }

...


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