Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1040to1044
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mal wieder Icon - diesmal Taskleiste

mal wieder Icon - diesmal Taskleiste
15.01.2009 20:56:00
Mike
Hallo Forum,
ich lese hier schon seit längerem, heute meine erste Frage :)
Ich habe ein Workbook soweit verpackt, dass es kaum mehr als Excel zu erkennen ist. Ich hätte jetzt gern eine Möglichkeit, das Icon in der Taskleiste zu ändern. In der Titelleiste hab ich das bereits gemacht (dank https://www.herber.de/mailing/158701h.htm).
Schön wäre jetzt aber noch (als letzter Schliff), dass in der Leiste auch mein Icon auftaucht. Mit API hab ich nicht so, wenn ich Code habe komm ich aber zurecht. Wäre toll, wenn jemand da eine Anregung hat.
Danke schon mal
Mike

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mal wieder Icon - diesmal Taskleiste
15.01.2009 21:13:59
Mike
sorry, hab mich vertan: das Icon in der Titelleiste ändere ich wie auf http://www.wbrnet.info/db/0536.html beschrieben
AW: mal wieder Icon - diesmal Taskleiste
15.01.2009 23:40:00
Roland
Hallo Mike,
versuchs mal so:
Option Explicit
Private Declare

Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare 

Function SendMessage Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Integer, _
ByVal lParam As Long) As Long
Private Declare 

Function ExtractIcon Lib "shell32.dll" _
Alias "ExtractIconA" ( _
ByVal hInst As Long, _
ByVal lpszExeFileName As String, _
ByVal nIconIndex As Long) As Long
Private Const WM_SETICON = &H80
Private Const ICON_BIG = 1
Private Const ICON_SMALL = 0


Sub IconChange()
Dim lngXLHwnd As Long, lngIcon As Long, strIconPath As String
strIconPath = "C:\Windows\JM\RaidLogo.ico" 'vollständiger Pfad zum Icon
lngXLHwnd = FindWindow("XLMAIN", Application.Caption)
lngIcon = ExtractIcon(0, strIconPath, 0)
SendMessage lngXLHwnd, WM_SETICON, ICON_SMALL, lngIcon
SendMessage lngXLHwnd, WM_SETICON, ICON_BIG, lngIcon
End Sub


Das Private Declare muss mit


Function natürlich in eine Zeile, ich blicke nicht durch, wie ich das hier darstellen kann.  _
Kommst Du damit klar?
Gruß von
Roland Hochhäuser

Anzeige
AW: mal wieder Icon - diesmal Taskleiste
16.01.2009 07:39:20
Mike
Hallo Roland,
klappt hervorragend, danke!!!
Kann ich das Icon auch im Workbook ablegen und wie ginge das dann? Die Datei wird von verschiedenen Clients gestartet. Auch wenn ich den Pfad mit IP angebe wäre das irgendwie eleganter.
Mike
AW: mal wieder Icon - diesmal Taskleiste
16.01.2009 10:12:00
Roland
Hallo Mike,
1. "Kann ich das Icon auch im Workbook ablegen": das geht bestimmt irgendwie über Objekt einbetten oder so, ich weiss es aber nicht. Der o.a. Code funktioniert aber nur, wenn Du den Speicherort des Icons als String ausdrücken kannst; außerdem unterstützt zumindest Office 2003 (ich nehme an auch Office 2000) nicht das ico-Format beim Einfügen einer Grafik.
2. "Die Datei wird von verschiedenen Clients gestartet": Dann leg das Icon doch genau 1 x auf das Netzlaufwerk und passe den Pfad an (funktioniert 100%ig), dann können auch mehrere Nutzer gleichzeitig darauf zugreifen.
3. "Pfad mit IP" ? Willst Du das Icon ins Intra-/Internet oder eine Oracle-Datenbank einparken?
Grüße von
Roland Hochhäuser
Anzeige
AW: mal wieder Icon - diesmal Taskleiste
16.01.2009 10:33:16
Mike
Hi Roland,
wenn ich den Pfad als z.B. "H:\Verzeichnis\ico.ico" angebe, dann gehe ich ja 1. davon aus, dass jeder User das Verzeichnis auch eingebunden hat und zwar 2. mit demselben Laufwerkbuchstaben. Ich gebe den Pfad also besser an als "\\172.24.0.10\Verzeichnis\ico.ico". Ich nutze dabei ein Verzeichnis, das die User nicht kennen und also da auch nichts kaputt machen können.
Danke für deine Hilfe
Mike
Wenn das so ist . . .
16.01.2009 10:47:00
Roland
musst Du die UNC-Laufwerksangabe erst "übersetzen". Ich nutze dazu folgende Routinen:

Private Function LogicalDrives() As Collection
Dim s  As String * 128
Dim i  As Long
GetLogicalDriveStringsA Len(s), s
i = InStr(s, vbNullChar & vbNullChar)    ' Länge
Set LogicalDrives = New Collection
For i = 1 To i Step 4
LogicalDrives.Add Mid$(s, i, 2)
Next i
End Function



Private Function DrivePath(ByVal Path As String, _
Optional IgnoreErrors As Boolean = True) As String
Dim Drive As Variant
Dim UNC As String
If Right$(Path, 1)  "\" Then Path = Path & "\"
For Each Drive In LogicalDrives()
UNC = UNCPath(Drive, True)
If InStr(1, Path, UNC, vbTextCompare) = 1 Then Exit For
Next Drive
If IsEmpty(Drive) Then
If IgnoreErrors Then
DrivePath = Path
Else
Err.Raise 5
End If
Else
DrivePath = Drive & Mid$(Path, Len(UNC))
End If
End Function



Private Function UNCPath(ByVal Path As String, _
Optional IgnoreErrors As Boolean = False) As String
Dim UNC As String * 512
If Len(Path) = 1 Then Path = Path & ":"
If Right$(Path, 1)  "\" Then Path = Path & "\"
If WNetGetConnectionA(Left$(Path, 2), UNC, Len(UNC)) Then
' API-Routine gibt Fehler zurück:
If IgnoreErrors Then
UNCPath = Path
Else
Err.Raise 5
End If
Else
UNCPath = Left$(UNC, InStr(UNC, vbNullChar) - 1) _
& Mid$(Path, 3)
End If
End Function



Private Sub Test()
Dim Bild as String
Bild = DrivePath(\\172.24.0.10\Verzeichnis\) & ico.ico
End Sub


Kommen wir der Sache jetzt näher?
Gruß von
Roland Hochhäuser

Anzeige
welchen Vorteil
16.01.2009 11:14:51
Mike
warum gehst du den Weg bzw. welchen Vorteil bringt das?
ist das Laufwerk überhaupt da?
16.01.2009 11:17:00
Mike
und gehst du nicht immer noch davon aus, dass der User das Verzeichnis verbunden hat?
AW: ist das Laufwerk überhaupt da?
16.01.2009 12:16:00
Roland
Hallo Mike,
ich hatte deine Beschreibung
"dann gehe ich ja 1. davon aus, dass jeder User das Verzeichnis auch eingebunden hat und zwar 2. mit demselben Laufwerkbuchstaben. Ich gebe den Pfad also besser an als "\\172.24.0.10\Verzeichnis\ico.ico"
in der Tat so verstanden, dass das Netzlaufwerk grundsätzlich verbunden ist, jedoch sich bei jedem User lokal anders darstellt. Nur für diesen Fall macht mein Vorschlag Sinn.
Gruß von
Roland Hochhäuser
Anzeige
AW: ist das Laufwerk überhaupt da?
16.01.2009 22:26:00
Nepumuk
Hi,
du kannst das Icon als Bild in einem Userform mit der Datei speichern. Der Zugriff erfolgt dann so:
Sub IconChange()
    Dim lngXLHwnd As Long, lngIcon As Long
    lngXLHwnd = FindWindow("XLMAIN", Application.Caption)
    lngIcon = UserForm1.Picture.Handle
    SendMessage lngXLHwnd, WM_SETICON, ICON_SMALL, lngIcon
    SendMessage lngXLHwnd, WM_SETICON, ICON_BIG, lngIcon
End Sub

Gruß
Nepumuk
Anzeige
AW: ist das Laufwerk überhaupt da?
16.01.2009 23:26:24
Roland
Hallo Nepumuk,
kennst Du vielleicht eine Möglichkeit, ein Bild im .ico-Format in einer Tabelle abzulegen und darauf auch wieder zuzugreifen? Über Einfügen / Grafik / Aus Datei wird dieses Format einfach nicht konvertiert; es gibt nur eine nichtssagende Fehlermeldung. Über Einfügen / Objekt / Reiter: Aus Datei erstellen und dann durchsuchen funktioniert es zwar und wird auch in der Tabelle korrekt angezeigt. Ich finde aber einfach den Dreh nicht, wie ich auf das eingebettete Objekt (liegt dann als Shape vor) zugreifen kann, Handle dürfte es wohl keins geben (?!)
Hast Du eine Idee für einen Lösungsweg?
Grüße von
Roland Hochhäuser
Anzeige
AW: ist das Laufwerk überhaupt da?
17.01.2009 00:22:00
Nepumuk
Hallo Roland,
das geht nur in einem Image-Control. Du kannst zwar ein Icon über die Zwischenablage in eine Tabelle einfügen, aber damit wird es zu einer Bitmap konvertiert. Damit ist es vom Format nicht mehr geeignet es als Icon in der Titelleiste zu benutzen.
Gruß
Nepumuk
Danke für die Hinweise, Nepumuk o.w.T.
17.01.2009 00:28:29
Roland
Userform
19.01.2009 17:30:13
Mike
Hallo zusammen,
klingt ja nach nem guten Ansatz, aber wie bekomme ich ein Bild in eine Userform?
Mike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige