![]() |
Neues Icon für Messagebox
Hey,
hab folgendes Problem. Will bei einer messagebox das Standardicon (wie z.b. Fragezeichen,...) durch ein eigenes neues Ersetzten. Dabei bin ich jedoch nur so weit gekommen, dass ich das Programmsymbol anstatt den anderen anzeigen lassen kann. Den untenstehenden Quellcode habe ich dafür auf einer Website gefunden.
Delphi-Quellcode:
Wenn ich jetzt jedoch die Zeile "lpszIcon:=Pointer(PWideChar(WideString('MAINICON' )));" umschreiben würde, sodass ein symbol aus einer resourcen-datei geladen werden soll, so wird kein Symbol in der messsagebox angezeigt.
procedure TForm1.Button1Click(Sender: TObject);
var MsgParams: TMsgBoxParams; begin with MsgParams do begin cbSize:=SizeOf(TMsgBoxParams); hwndOwner:=Application.MainForm.Handle; hInstance:=MainInstance; lpszText:='Lobby Broadcaster'+ #13 +'Version: 1.1.0'+ #13 +''+ #13 +'Copyright © 2000 - 2005 by Me.'+ #13 +'All Rights Reserved.'; lpszCaption:='About Product'; dwStyle:=MB_OK or MB_USERICON; lpszIcon:=Pointer(PWideChar(WideString('MAINICON'))); dwContextHelpId:=0; lpfnMsgBoxCallback:=nil; dwLanguageId:=DWORD(MAKEINTRESOURCE(LANG_NEUTRAL)); end; MessageBoxIndirect(MsgParams); end; Weiß jemand vielleicht eine Lösung für das Problem? |
Re: Neues Icon für Messagebox
Der Beitrag
![]() |
Re: Neues Icon für Messagebox
Nein leider verliere ich irgendwie den Überblick bei dem Beispielprogramm und außerdem kann ich es mit delphi 5 nich compilieren, sodass ich sehen kann, wie sich veränderungen auswirken.. z.b. ein eigenes icon einsetzten..
Meine frage war wohl eher darauf bezogen, wie ich durch die Makierte Quelltextzeile auf ein icon zugreifen kann, ich habe es mehrfach versucht, jedoch klappt es leider nicht :(..
Delphi-Quellcode:
Daher hat jemand viell. einen Tipp, wie ich eine ressource in der exe ansprechen kann, wenn ich z.b. den namen der souce [z.b. "101"] durch reshack-Editor weiß/bzw. auch verändern kann?
MsgInfo.cbSize := SizeOf(TMsgBoxParams);
MsgInfo.hwndOwner := hWnd; MsgInfo.hInstance := GetWindowLong(hWnd, GWL_HINSTANCE); MsgInfo.lpszText := @Text[1]; MsgInfo.lpszCaption := @Caption[1]; MsgInfo.dwStyle := MB_USERICON; MsgInfo.lpszIcon := MAKEINTRESOURCE(IDICON); // <===== Diese Zeile MessageBoxIndirect(MsgInfo); Vielen Dank schon einmal! |
Re: Neues Icon für Messagebox
IDICON ist die ID des Icons aus deiner Ressource. Du müsstest also evebtuell noch eine zusätzliche Ressource mit deinem Icon erstellen.
|
Re: Neues Icon für Messagebox
ich hab das Gefühl du verstehst den Quelltext nicht sondern hast ihn einfach nur kopiert.
Delphi-Quellcode:
Der Quelltext macht nichts anderes als 'MainIcon' zu einem WideString zu casten, davon die Adresse zu holen und diese auf einen Pointer zu casten um sie zuweisen zu können.
Pointer(PWideChar(WideString('MAINICON')));
Wenn du also ein Icon in einer Ressource hast, hat diese Ressource einen Namen. Diesen Namen musst du zu einem WideString wandeln und die Adresse des WideStrings kannst du dann lpszIcon zuweisen. |
Re: Neues Icon für Messagebox
sagen wir mal diese neue Test.res Datei liegt im gleichen verzeichnis wie das Programm.
Dann muss ich ja {$R Test.res} unter implementation einfügen, um die Ressourcendatei anzusprechen, oder? jetzt nenn ich das icon in der ressource beispielsweise "101", wie müsste ich es dann ansprechen? Habs mit MsgInfo.lpszIcon := MAKEINTRESOURCE(101); probiert, hat aber nicht geklappt? Hab ich was falsch gemacht? @SirThornberry: soweit hab ich das schon verstanden.. müsste also in meinem beispiel oben Pointer(PWideChar(WideString('101'))); sein, oder geht das ausschließlich mit 'MainICON'? Denn meine Variante hat nicht funktioniert.. |
Re: Neues Icon für Messagebox
wenn du mit Icon-Indexes arbeitest gehts so:
Delphi-Quellcode:
oder laut msdn anstelle von:
MsgParams.cbSize:=SizeOf(TMsgBoxParams);
MsgParams.hwndOwner:=Self.Handle; MsgParams.hInstance:=GetModuleHandle('shell32.dll'); MsgParams.lpszText:='Lobby Broadcaster'+ #13 +'Version: 1.1.0'+ #13 +''+ #13 +'Copyright © 2000 - 2005 by Me.'+ #13 +'All Rights Reserved.'; MsgParams.lpszCaption:='About Product'; MsgParams.dwStyle:=MB_OK or MB_USERICON; MsgParams.lpszIcon:=Pointer(13); //Icon13 aus IconGroup verwenden MsgParams.dwContextHelpId:=0; MsgParams.lpfnMsgBoxCallback:=nil; MsgParams.dwLanguageId:=0; //0 = Neutral MessageBoxIndirect(MsgParams);
Delphi-Quellcode:
lieber
MsgParams.lpszIcon:=Pointer(13); //Icon13 aus IconGroup verwenden
Delphi-Quellcode:
wobei MAKEINTRESOURCE auch nur ein PChar ist was wiederum ein Pointer ist was also nichts anderes macht als die 13 zu einem Pointer zu casten.
MsgParams.lpszIcon:=MAKEINTRESOURCE(13); //Icon13 aus IconGroup verwenden
|
Re: Neues Icon für Messagebox
Antwort der NAme des Icons in deinem Beispiel ist also "13" und befindet sich in der IconGroup.
Ich habe den Quelltext jetzt deinem Vorschlag angepasst, es funktioniert jedoch weder mit MsgParams.hInstance:=GetModuleHandle('shell32.dll' ); noch mit MsgParams.hInstance:=GetModuleHandle('101.res'); . Er zeigt dann bei mir ein transparentest [also eigentlich kein Icon] an :(.. das gleiche gilt für MsgParams.lpszIcon:=Pointer(1); oder MsgParams.lpszIcon:=MAKEINTRESOURCE(1); |
Re: Neues Icon für Messagebox
Delphi-Quellcode:
völlig falsch!
MsgParams.hInstance:=GetModuleHandle('101.res'); .
eine Ressorucendatei ist eine Datei die ähnlich wie .pas-Dateien in das Projekt einkompiliert werden. Sie sind also dann ein Teil deines Programmes. (womit dann hInstance = SysInit.HInstance wäre). Am besten du fängst mal ganz von vorn an. Du hast also ein Icon welches du anzeigen willst. Wo befindet sich dieses Icon? In einer DLL oder ist es in deine Exe eincompiliert? Wenn du es über eine Ressourcen-Datei (*.res) eingebunden hast wie sieht dann bei dir die .rc-Datei aus? |
Re: Neues Icon für Messagebox
Gut, ich wills ja auch verstehen:
meine 101.rc hat folgeden Text: 101 ICON "Icon_2.ico" und dann wollte ich sie unter CMD: mit dem befehl: BRC32 -r 101.rc [umwandeln zu res, was ja auch klappt] und danach wollte ich sie dann in die exe einbinden, was mir jedoch wie du siehst probleme bereitet :) Grade hab ich was hinbekommen.. jetzt kann ich schonmal ein anderes icon anzeigen lassen.. :) hoffe nur ich bekomm jetzt auch raus, wieso genau das Icon! Hey also nochma danke für alles, ich habs jetzt verstanden :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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