vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Grafik und Font · Bilder & Icons   |   VB-Versionen: VB5, VB609.01.06
Hochauflösendes Icon für die eigene Anwendung

VB selbst unterstützt leider keine hochauflösende Icons. Hier erfahren Sie, wie Sie dennoch ein hochauflösendes Programmsymbol verwenden können.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  27.053 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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:
 Workshop: XP-Icons für VB6-Programme

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:
Die Anzeige des neuen Icons funktioniert nur in der kompilierten EXE-Datei. Wird das Projekt innerhalb der VB-IDE ausgeführt, wird das Icon NICHT angezeigt.
 

Dieser Tipp wurde bereits 27.053 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel