Hi Ihr,
ich stehe vor einem seltsamen Problem.
Im Designer ist dem Mainform
Im Mainform.load ordne ich mit
Nachdem alle Programmteile initialisiert sind, weise ich mit
Es passiert Folgendes:
Im Debug-Modus:
Das kleine Symbol in der Titelleiste und das Programmsymbol links unten in der Taskleiste werden entsprechend korrekt gesetzt und angezeigt.
In der Release.exe:
Das kleine Symbol in der Titelleiste meiner Anwendung übernimmt diese Zuweisungen korrekt, nicht aber das Programmsymbol links unten in der Taskleiste.
Dieses zeigt seltsamerweise ab Programmstart das farbige Programmsymbol - wobei mir schleierhaft ist, woher an dieser Stelle die entsprechende Zuweisung stammt.
Auch eingefügte Messageboxes nach den
Das Löschen des Icon-Caches mit:
bringt keine Änderung.
Selbst das manuelle Neuzeichnen durch Aufruf von:
nach den beiden o.g. Icon-Zuweisungen bringt nicht den gewünschten Erfolg.
Wie kommt das farbige Programmsymbol in meine Anwendung und wie bekomme ich die gewünschte Anzeige?
Hat da jemand von Euch eine Idee?
Beste Grüsse
Ach herjeh...
Das muss einem ja auch mal gesagt werden, dass Mainform.icon sich nur auf das kleine Symbol in der Titelleiste der Mainform bezieht und das in den Einstellungen - Anwendung gewählte Symbol sich auf das links unten in der Taskleiste befindende Symbol bezieht.
Nur...
die Preisfrage:
Wenn ich in den Einstellungen - Anwendung das graue Symbol setze, startet mein Proggi im Release auch mit dem grauen Symbol.
Nur... wie kann ich dieses Symbol ändern?
Meine obigen Versuche mit der Funktion UpdateTaskbarIcon bringen keine Fehlermeldungen, aber das in den Einstellungen gesetzte Symbol ändert sich nicht.
Aller Versuche schlagen fehl.
Aber es muss doch einen Weg geben - Inno-Setup z.b. kann doch auch das Taskleistensymbol zur Laufzeit in das ändern, welches im geöffneten Inno-Script gerade hinterlegt ist.
Beiträge zusammengefasst, bitte die
ich stehe vor einem seltsamen Problem.
Im Designer ist dem Mainform
Icon
das Icon "ProgrammSymbol_Grau" aus den Ressourcen meiner Anwendung zugewiesen (dieses zeigt ein ausgegrautes Programmsymbol).Im Mainform.load ordne ich mit
me.icon = ProgrammSymbol_Grau
erneut das "Disable"-Symbol aus den Ressourcen meiner Anwendung zu. Nachdem alle Programmteile initialisiert sind, weise ich mit
me.icon = ProgrammSymbol_Normal
dem Symbol das normale farbige Symbol aus meinen Ressourcen zu.Es passiert Folgendes:
Im Debug-Modus:
Das kleine Symbol in der Titelleiste und das Programmsymbol links unten in der Taskleiste werden entsprechend korrekt gesetzt und angezeigt.
In der Release.exe:
Das kleine Symbol in der Titelleiste meiner Anwendung übernimmt diese Zuweisungen korrekt, nicht aber das Programmsymbol links unten in der Taskleiste.
Dieses zeigt seltsamerweise ab Programmstart das farbige Programmsymbol - wobei mir schleierhaft ist, woher an dieser Stelle die entsprechende Zuweisung stammt.
Auch eingefügte Messageboxes nach den
me.icon = xxx
zeigen, dass bei Programmstart das graue Icon zugewiesen wird und erst nach Abschluss der gesamten Initialisierung das farbige Icon zugewiesen wird.Das Löschen des Icon-Caches mit:
bringt keine Änderung.
Selbst das manuelle Neuzeichnen durch Aufruf von:
VB.NET-Quellcode
- Public Sub UpdateTaskbarIcon(newIcon As Icon)
- Dim hwnd As IntPtr = MainForm.Handle
- If hwnd <> IntPtr.Zero Then
- ' Aktualisiere sowohl das kleine als auch das große Symbol
- SendMessage(hwnd, WM_SETICON, New IntPtr(0), newIcon.Handle) ' Kleines Symbol (Taskleiste)
- Threading.Thread.Sleep(100)
- SendMessage(hwnd, WM_SETICON, New IntPtr(1), newIcon.Handle) ' Großes Symbol (Alt+Tab)
- Else
- ' Log oder Fehlermeldung falls Handle ungültig ist
- MessageBox.Show("Fensterhandle ist ungültig!")
- End If
- MainForm.Invalidate()
- End Sub
nach den beiden o.g. Icon-Zuweisungen bringt nicht den gewünschten Erfolg.
Wie kommt das farbige Programmsymbol in meine Anwendung und wie bekomme ich die gewünschte Anzeige?
Hat da jemand von Euch eine Idee?
Beste Grüsse
Ach herjeh...
Das muss einem ja auch mal gesagt werden, dass Mainform.icon sich nur auf das kleine Symbol in der Titelleiste der Mainform bezieht und das in den Einstellungen - Anwendung gewählte Symbol sich auf das links unten in der Taskleiste befindende Symbol bezieht.
Nur...
die Preisfrage:
Wenn ich in den Einstellungen - Anwendung das graue Symbol setze, startet mein Proggi im Release auch mit dem grauen Symbol.
Nur... wie kann ich dieses Symbol ändern?
Meine obigen Versuche mit der Funktion UpdateTaskbarIcon bringen keine Fehlermeldungen, aber das in den Einstellungen gesetzte Symbol ändert sich nicht.
VB.NET-Quellcode
- Public Sub UpdateTaskbarIcon(Schalter As Integer)
- Dim newIcon As Icon
- If Schalter = 0 Then
- newIcon = MainForm.programmSymbol_Grau
- MainForm.GesamteOberflächeSperren = True
- Else
- newIcon = MainForm.programmSymbol_Normal
- MainForm.GesamteOberflächeSperren = False
- End If
- MainForm.Icon = newIcon
- Dim hwnd As IntPtr = MainForm.Handle
- If hwnd <> IntPtr.Zero Then
- SendMessage(hwnd, WM_SETICON, New IntPtr(0), newIcon.Handle) ' Kleines Symbol (Taskleiste)
- SendMessage(hwnd, WM_SETICON, New IntPtr(1), newIcon.Handle) ' Großes Symbol (Alt+Tab)
- End If
- If MainForm.icn_TaskleistenSymbol IsNot Nothing Then
- MainForm.icn_TaskleistenSymbol.Icon = newIcon
- End If
- MainForm.Invalidate()
- End Sub
Aller Versuche schlagen fehl.
Aber es muss doch einen Weg geben - Inno-Setup z.b. kann doch auch das Taskleistensymbol zur Laufzeit in das ändern, welches im geöffneten Inno-Script gerade hinterlegt ist.
VB.NET-Quellcode
- Public Sub EnableTaskbarIcon(Schalter As Boolean)
- Dim newIcon As Icon
- MainForm.GesamteOberflächeSperren = Not Schalter
- If Schalter = True Then
- newIcon = MainForm.programmSymbol_Normal
- Else
- newIcon = MainForm.programmSymbol_Grau
- End If
- MainForm.Icon = newIcon
- Dim hwnd As IntPtr = MainForm.Handle
- If hwnd <> IntPtr.Zero Then
- SendMessage(hwnd, WM_SETICON, New IntPtr(0), newIcon.Handle) ' Kleines Symbol (Titelleiste)
- ' Test Icon-Änderung - klappt nicht
- 'SendMessage(hwnd, WM_SETICON, New IntPtr(1), newIcon.Handle) ' Großes Symbol (Alt+Tab,Taskleiste)
- ' Test Cache durch leere Icons resetten - klappt nicht
- 'SendMessage(hwnd, WM_SETICON, CType(ICON_SMALL, IntPtr), IntPtr.Zero)
- 'SendMessage(hwnd, WM_SETICON, CType(ICON_BIG, IntPtr), IntPtr.Zero)
- 'Threading.Thread.Sleep(100)
- 'SendMessage(hwnd, WM_SETICON, CType(ICON_SMALL, IntPtr), newIcon.Handle)
- 'SendMessage(hwnd, WM_SETICON, CType(ICON_BIG, IntPtr), newIcon.Handle)
- ' Test Alternative Icon-Änderung - klappt nicht
- 'SetClassLong(hwnd, GCL_HICON, newIcon.Handle)
- End If
- If MainForm.icn_TaskleistenSymbol IsNot Nothing Then
- MainForm.icn_TaskleistenSymbol.Icon = newIcon
- End If
- 'MainForm.Invalidate() ' klappt nicht
- 'UpdateWindow(hwnd) 'klappt nicht
- 'RefreshTaskbar() 'klappt nicht
- End Sub
- Public Sub RefreshTaskbar()
- SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero)
- End Sub
Beiträge zusammengefasst, bitte die
[Bearbeiten]
beim nächsten Mal nutzen ~VaporiZedDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()