Ich denke, die meisten von Ihnen haben sich schon des öfteren darüber geärgert, dass man einer Form kein hochauflösendes Icon zuweisen kann. VB verweigert hier strikt seinen Dienst, indem es meldet, dass es sich um eine unzulässige Symboldatei handelt bzw. verwendet immer das 16-Farb-Icon der Symboldatei, falls vorhanden. Genauso verhält es sich dann auch mit dem Programmsymbol für die eigene Anwendung, da es sich hier ja immer um ein bestimmtes Form-Icon handelt, welches man in den Projekt-Eigenschaften festgelegt hat. Was aber, wenn man ein schönes smartes XP-Icon als Programmsymbol für die eigene Anwendung erstellt hat und dieses dann natürlich auch verwenden will? Hierzu muss man wissen, dass Windows immer das erste Symbol aus der Programm-Ressourcen-Datei für die Anzeige verwendet. Auch wenn man nicht explizit eine RES-Datei erstellt hat, enthält die kompilierte EXE autom. einen Symbol-Eintrag mit der Nummer 1. Dieses Symbol verwendet Windows für die Anzeige im Windows-Explorer, Startmenü etc. Da Windows immmer das erste Symbol der RES-Datei verwendet, alphanumerische Einträge jedoch Vorrang haben, müssen wir lediglich eine RES-Datei erstellen, in der das neue Programmsymbol mit einem alphanumerischen Eintrag vorhanden ist, bspw. unter dem Buchstaben "A00". Beispiel für eine .RC-Datei // Programmsymbol (hochauflösendes Icon) A00 ICON MOVEABLE PRELOAD xpicon.ico Die kompilierte .RES-Datei fügen Sie nun Ihrem Projekt hinzu und kompilieren es neu. Im Windows-Explorer wird jetzt autom. das smarte XP-Icon als Programmsymbol für die Anwendung angezeigt. Je nachdem, ob Sie das Icon für die verschiedenen Explorer-Ansichten erstellt haben (16x16, 32x32 und 48x48) "holt" sich Windows das entsprechende Format aus der Datei und verwendet dieses für die Anzeige. Siehe hierzu auch: Gehen wir noch einen Schritt weiter. Jetzt wird unser XP-Icon immerhin schon im Windows-Explorer angezeigt, beim Starten der EXE verwendet VB aber immer noch das Icon der Form, die in den Projekt-Eigenschaften ausgewählt wurde. Wir möchten aber, dass unser smartes XP-Icon auch in der Taskbar und in der Titelzeile der Form selbst angezeigt wird. Dies erreichen wir durch Laden des Icons aus der RES-Datei und Zuweisung via SendMessage-API. Fügen Sie nachfolgenden Code in ein Modul Ihres Projektes: Option Explicit ' Benötigte API-Deklarationen Private Declare Function GetWindow Lib "user32" ( _ ByVal hWnd As Long, _ ByVal wCmd As Long) As Long Private Declare Function LoadImage Lib "user32" _ Alias "LoadImageA" ( _ ByVal hInst As Long, _ ByVal lpsz As String, _ ByVal un1 As Long, _ ByVal n1 As Long, _ ByVal n2 As Long, _ ByVal un2 As Long) As Long Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Private Declare Function GetSystemMetrics Lib "user32" ( _ ByVal nIndex As Long) As Long Private Const GW_OWNER = 4 Private Const WM_SETICON = &H80 Private Const ICON_SMALL = 0 Private Const ICON_BIG = 1 Private Const SM_CXICON = 11 Private Const SM_CYICON = 12 Private Const SM_CXSMICON = 49 Private Const SM_CYSMICON = 50 Private Const IMAGE_ICON = 1 Private Const LR_SHARED = &H8000& ' Form-Icon ändern Public Sub SetFormIcon(ByVal hWnd As Long, _ ByVal sIconResName As String ) Dim cx As Long Dim cy As Long Dim hIcon As Long Dim hWndOwner As Long Dim hTemp As Long ' Owner-Window suchen ' (= Windowhandle für das Icon in der Windows-Taskliste) hTemp = hWnd Do hTemp = GetWindow(hTemp, GW_OWNER) If hTemp <> 0 Then hWndOwner = hTemp Loop Until hTemp = 0 ' Anzeigegröße für große Symbole cx = GetSystemMetrics(SM_CXICON) cy = GetSystemMetrics(SM_CYICON) ' Symbol laden und zuweisen hIcon = LoadImage(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED) SendMessage hWnd, WM_SETICON, ICON_BIG, hIcon SendMessage hWndOwner, WM_SETICON, ICON_BIG, hIcon ' Anzeigegröße für kleine Symbole cx = GetSystemMetrics(SM_CXSMICON) cy = GetSystemMetrics(SM_CYSMICON) ' Symbol laden und zuweisen hIcon = LoadImage(App.hInstance, sIconResName, IMAGE_ICON, cx, cy, LR_SHARED) SendMessage hWnd, WM_SETICON, ICON_SMALL, hIcon SendMessage hWndOwner, WM_SETICON, ICON_SMALL, hIcon End Sub Die Prozedur SetFormIcon setzen Sie jetzt einfach in das Form_Load-Ereignis der Form und rufen sie wie folgt auf: Private Sub Form_Load() ' XP-Symbol aus RES-Datei als Form-Icon verwenden SetFormIcon Me.hWnd, "A00" End Sub Hinweis: Dieser Tipp wurde bereits 27.398 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats November 2024 Dieter Otter WAVE-Dateien aufnehmen Ein Code-Ausschnitt, mit dem sich WAVE-Dateien in verschiedenen Aufnahmequalitäten aufnehmen lassen. sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |