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 Icons aus MessageBox in eigenem Dialog verwenden? (https://www.delphipraxis.net/93347-icons-aus-messagebox-eigenem-dialog-verwenden.html)

Whookie 4. Jun 2007 16:38


Icons aus MessageBox in eigenem Dialog verwenden?
 
Gibt es eine Möglichkeit, die Icons aus der MessageBox (zb.: MB_ICONEXCLAMATION) in einem
eigenen Dialog zu verwenden?

TIA
Whookie

CCRDude 4. Jun 2007 16:45

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Einerseits könnte man diese zur Laufzeit direkt aus der entsprechenden Shell-Bibliothek "holen"... andererseits hat imho Microsoft für Vista angekündigt, daß dieses Verhalten nicht mehr benutzt werden sollte.

Schau mal in die Unit Dialogs, wie MessageDlg das macht, vielleicht taugt das ja auch was für Dich...

Sunlight7 4. Jun 2007 23:46

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Moin!

Guck Dir MSDN-Library durchsuchenLoadIcon an:

Code:
Value   Description
IDI_APPLICATION   Default application icon.
IDI_ASTERISK   Asterisk (used in informative messages).
IDI_EXCLAMATION   Exclamation point (used in warning messages).
IDI_HAND   Hand-shaped icon (used in serious warning messages).
IDI_QUESTION   Question mark (used in prompting messages).
IDI_WINLOGO   Windows logo.

Whookie 5. Jun 2007 10:37

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Tja, so einfach kann das sein:

Delphi-Quellcode:
procedure TOKRightDlg.FormCreate(Sender: TObject);
begin
  Image1.Picture.Icon.Handle := LoadIcon(0, IDI_HAND);
end;
Danke nochmals für den Hinweis! Auf MSDN habe ich allerdings keinen Hinweis darauf gefunden, das diese Funktion nicht mehr verwendet werden soll. Gibts dazu Konkretes?

Die Muhkuh 5. Jun 2007 11:06

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Zitat:

Zitat von Whookie
Auf MSDN habe ich allerdings keinen Hinweis darauf gefunden, das diese Funktion nicht mehr verwendet werden soll. Gibts dazu Konkretes?



Hi Whookie,

ich denke CCRDude meint, dass man die Icons nicht mehr aus der jeweiligen Shell holen sollte, sondern über den Weg, den Du gezeigt hast.

Zitat:

Einerseits könnte man diese zur Laufzeit direkt aus der entsprechenden Shell-Bibliothek "holen"... andererseits hat imho Microsoft für Vista angekündigt, daß dieses Verhalten nicht mehr benutzt werden sollte.
[edit]Es heißt CCRDude, nicht CRCDude *g*[/edit]

[edit2]Erklärung falsch, siehe CCRDude eins drunter[/edit2]

CCRDude 5. Jun 2007 11:12

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Hier steht schon ein kurzes Do und Don't-Do: MSDN: Using Icons

Lustig da, daß das MS-Beispiel selber noch LoadIcon verwendet; denn das soll man eben nicht mehr direkt verwenden, stattdessen lieber LoadImage, wie hier zu finden ist: MSDN: LoadIcon (siehe Hinweis oben sowie unten in den Kommentaren).

OG Karotte 25. Apr 2008 23:09

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Zitat:

...denn das soll man eben nicht mehr direkt verwenden, stattdessen lieber LoadImage, wie hier zu finden ist: MSDN: LoadIcon (siehe Hinweis oben sowie unten in den Kommentaren).
Tja und daran wollte ich mich auch halten, aber irgend etwas ist hier falsch, denn ich bekomme kein Handle zurück (hndl bleibt 0):
Delphi-Quellcode:
  hndl := LoadImage(HInstance, IDI_QUESTION, IMAGE_ICON,0,0,LR_DEFAULTSIZE);
Nutze ich aber:
Delphi-Quellcode:
hndl := LoadIcon(0, IDI_QUESTION);
dann klappt es. Also was ist oben falsch ???

Sunlight7 27. Apr 2008 22:27

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Abend!

Zitat:

Zitat von OG Karotte
Also was ist oben falsch ???

Alle guten Dinge sind 3 :mrgreen:

1. Kein Instanz Handle setzen
2. Nicht die Icon Konstanten von LoadIcon verwenden
3. Die gewünschte Icon Konstante als Low Order Word übergeben

Langer Rede, kurzes Beispiel:

Delphi-Quellcode:
Application.Icon.Handle:=LoadImage(0, MakeIntResource(OIC_QUES), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE or LR_SHARED);
Die Konstanten (OIC_QUES, etc.) finden sich in der Windows.pas

Mfg, Sun

Luckie 28. Apr 2008 07:25

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Zitat:

Zitat von Sunlight7
1. Kein Instanz Handle setzen

Weil sonst sucht er die Icon-Ressource in der Exe-Datei.

Zitat:

2. Nicht die Icon Konstanten von LoadIcon verwenden
Hm. Warum das?

Zitat:

3. Die gewünschte Icon Konstante als Low Order Word übergeben
Warum das?

Ich meine, ich hätte das auch schon mal auf den "normalen" weg geschafft.

Sunlight7 28. Apr 2008 16:52

Re: Icons aus MessageBox in eigenem Dialog verwenden?
 
Zitat:

Zitat von Luckie
Hm. Warum das?

Um sauber zu bleiben, die Konstanten von LoadImage haben andere Namen.

Zitat:

Zitat von Luckie
Warum das?

Frag Billy :mrgreen:

Zitat:

Zitat von MSDN
Parameters

...

lpszName

Identifies the image to load.
...
If hinst is NULL and LR_LOADFROMFILE is not specified, the low-order word of this parameter must be the identifier of the OEM image to load. The OEM image identifiers are defined in WINUSER.H and have the following prefixes:

Prefix Meaning
OBM_ OEM bitmaps
OIC_ OEM icons
OCR_ OEM cursors



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

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