AGB  ·  Datenschutz  ·  Impressum  







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

Neues Icon für Messagebox

Ein Thema von Michi123 · begonnen am 27. Jun 2007 · letzter Beitrag vom 21. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Michi123

Registriert seit: 27. Jun 2007
9 Beiträge
 
#1

Neues Icon für Messagebox

  Alt 27. Jun 2007, 02:35
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:
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;
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.

Weiß jemand vielleicht eine Lösung für das Problem?
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 05:46
Der Beitrag hier sollte dir weiterhelfen.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Michi123

Registriert seit: 27. Jun 2007
9 Beiträge
 
#3

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 09:51
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:
  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);
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?
Vielen Dank schon einmal!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 09:58
IDICON ist die ID des Icons aus deiner Ressource. Du müsstest also evebtuell noch eine zusätzliche Ressource mit deinem Icon erstellen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:08
ich hab das Gefühl du verstehst den Quelltext nicht sondern hast ihn einfach nur kopiert.

Pointer(PWideChar(WideString('MAINICON'))); 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.

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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Michi123

Registriert seit: 27. Jun 2007
9 Beiträge
 
#6

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:14
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..
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:15
wenn du mit Icon-Indexes arbeitest gehts so:
Delphi-Quellcode:
  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);
oder laut msdn anstelle von:
MsgParams.lpszIcon:=Pointer(13); //Icon13 aus IconGroup verwenden lieber
MsgParams.lpszIcon:=MAKEINTRESOURCE(13); //Icon13 aus IconGroup verwenden 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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Michi123

Registriert seit: 27. Jun 2007
9 Beiträge
 
#8

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:29
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);
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:34
MsgParams.hInstance:=GetModuleHandle('101.res'); . völlig falsch!
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Michi123

Registriert seit: 27. Jun 2007
9 Beiträge
 
#10

Re: Neues Icon für Messagebox

  Alt 27. Jun 2007, 10:40
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13: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