Hallo,
kennt jemand eine andere Methode, einen Traymenu mit Icons zu erstellen, ohne die ModernMenu-UDF zu verwenden?
Ich weiß nicht, aber ich glaub ich hab so etwas mal mit der WinAPI-UDF gesehen..
Hallo,
kennt jemand eine andere Methode, einen Traymenu mit Icons zu erstellen, ohne die ModernMenu-UDF zu verwenden?
Ich weiß nicht, aber ich glaub ich hab so etwas mal mit der WinAPI-UDF gesehen..
Hat denn keiner eine Idee oder warum antwortet niemand?
Die Idee musste erst getestet werden
#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)
Opt('TrayMenuMode', 2)
Global $iMemo, $hAboutIMG
OnAutoItExitRegister("FreeResources")
Func FreeResources()
_WinAPI_DeleteObject($hAboutIMG)
EndFunc
Local $hGUI, $hEdit, $nMsg
[/autoit] [autoit][/autoit] [autoit]; Erstellt eine GUI
$hGUI = GUICreate("Menu", 400, 300)
; Erstellt ein Memo Control
$iMemo = GUICtrlCreateEdit("Im Tray ist ein Item mit Bild", 2, 2, 396, 276, 0)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetState()
Local $AboutItem = TrayCreateItem("Über")
$hAboutIMG = _WinAPI_CreateSolidBitmap($hGUI, 0xFF0000, 16, 16)
Local $hTraymenu = TrayItemGetHandle(0)
_GUICtrlMenu_SetItemBmp($hTraymenu, $AboutItem, $hAboutIMG, False)
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
$nMsg = GUIGetMsg()
If TrayGetMsg() = $AboutItem Then TrayTip("TrayAbout", "Beispiel von ProgAndy", 10)
Until $nMsg = $GUI_EVENT_CLOSE
Danke!
Und wie kann ich damit Icon-Dateien laden?
Erst das Icon mit _WinAPI_ExtractIconEx extrahieren, dann eine Bitmap erstellen (_WinAPI_CreateCompatibleBitmap), dann das icon darauf zeichen und anschließend alles nicht mehr benötigte freigeben und die Bitmap setzen
oder du verwendest
HBMMENU_CALLBACK
A bitmap that is drawn by the window that owns the menu. The application
must process the WM_MEASUREITEM
and WM_DRAWITEM
messages.
Hmm da wird irgendwie kein Icon geladen ...
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)
Opt('TrayMenuMode', 2)
Global $iMemo, $hAboutIMG
OnAutoItExitRegister("FreeResources")
Func FreeResources()
_WinAPI_DeleteObject($hAboutIMG)
EndFunc
Local $hGUI, $hEdit, $nMsg, $hicon
[/autoit] [autoit][/autoit] [autoit]; Erstellt eine GUI
$hGUI = GUICreate("Menu", 400, 300)
; Erstellt ein Memo Control
$iMemo = GUICtrlCreateEdit("Im Tray ist ein Item mit Bild", 2, 2, 396, 276, 0)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetState()
Local $AboutItem = TrayCreateItem("Über")
[/autoit] [autoit][/autoit] [autoit]$hicon = _WinAPI_ExtractIconEx("shell32.dll", -5, 0, 0, 0)
[/autoit] [autoit][/autoit] [autoit]$hicon = _WinAPI_GetDC($hicon)
[/autoit] [autoit][/autoit] [autoit]$hAboutIMG = _WinAPI_CreateCompatibleBitmap($hicon, 16, 16)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite($hAboutIMG & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Local $hTraymenu = TrayItemGetHandle(0)
_GUICtrlMenu_SetItemBmp($hTraymenu, $AboutItem, $hAboutIMG, False)
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
$nMsg = GUIGetMsg()
If TrayGetMsg() = $AboutItem Then TrayTip("TrayAbout", "Beispiel von ProgAndy", 10)
Until $nMsg = $GUI_EVENT_CLOSE
Das ist zu wenig Code
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <GuiMenu.au3>
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)
Opt('TrayMenuMode', 2)
Global $iMemo, $hAboutIMG
OnAutoItExitRegister("FreeResources")
Func FreeResources()
_WinAPI_DeleteObject($hAboutIMG)
EndFunc
Local $hGUI, $hEdit, $nMsg, $hicon
[/autoit] [autoit][/autoit] [autoit]; Erstellt eine GUI
$hGUI = GUICreate("Menu", 400, 300)
; Erstellt ein Memo Control
$iMemo = GUICtrlCreateEdit("Im Tray ist ein Item mit Bild", 2, 2, 396, 276, 0)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetState()
Local $AboutItem = TrayCreateItem("Über")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Local $hTraymenu = TrayItemGetHandle(0)
Local $hicon = DllStructCreate("ptr")
_WinAPI_ExtractIconEx("shell32.dll", -5, 0, DllStructGetPtr($hicon), 1)
$hicon = DllStructGetData($hicon,1)
Local $hDC = _WinAPI_GetDC(_WinAPI_GetDesktopWindow())
$hAboutIMG = _WinAPI_CreateCompatibleBitmap($hDC, 16, 16)
Local $hDC2 = _WinAPI_CreateCompatibleDC($hDC)
_WinAPI_ReleaseDC(_WinAPI_GetDesktopWindow(), $hDC)
_WinAPI_SelectObject($hDC2, $hAboutIMG)
_WinAPI_DrawIconEx($hDC2, 0, 0, $hicon, 16, 16, 0, _WinAPI_GetSysColorBrush(4), 3) ; der Brush ist die Standardhintergrundfarbe des Menüs
_WinAPI_DeleteDC($hDC2)
_WinAPI_DestroyIcon($hicon)
ConsoleWrite($hAboutIMG & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlMenu_SetItemBmp($hTraymenu, $AboutItem, $hAboutIMG, False)
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
Do
$nMsg = GUIGetMsg()
If TrayGetMsg() = $AboutItem Then TrayTip("TrayAbout", "Beispiel von ProgAndy", 10)
Until $nMsg = $GUI_EVENT_CLOSE
Hallo progandy,
tut mir Leid diesen Thread wieder zu beleben.
Da ich eine konkrete Nachfrage zu Deiner UDF habe, möchte ich hier nochmal anknüpfen dürfen...
Die UDF funktioniert wie sie soll, jedoch erhält man unter MS-Windows XP bzw. Vista/7 unterschiedliche Ergebnisse. Unter MS-Windows XP fehlt zwischen dem Icon und dem Text der "übliche" Abstand. Unter Vista/7 passiert das gleiche, wenn der Dienst "Themes" deaktiviert ist; mit akt. Dienst sieht alles wie gewünscht aus. Weiterhin sehen deaktivierte Icons unschön aus - transparente Bereiche des Icons werden ausgefüllt. Wenn man mit der Maus über die Icons geht, werden diese farblich invertiert dargestellt.
Der Funktion tut das alles keinen Abbruch... Ich wäre jedoch sehr entzückt, wenn es dafür Abhilfe geben könnte... Hättest Du diesbezüglich eine Idee?
VG,
-supersonic.
Alles anzeigenHallo progandy,
tut mir Leid diesen Thread wieder zu beleben.
Da ich eine konkrete Nachfrage zu Deiner UDF habe, möchte ich hier nochmal anknüpfen dürfen...
Die UDF funktioniert wie sie soll, jedoch erhält man unter MS-Windows XP bzw. Vista/7 unterschiedliche Ergebnisse. Unter MS-Windows XP fehlt zwischen dem Icon und dem Text der "übliche" Abstand. Unter Vista/7 passiert das gleiche, wenn der Dienst "Themes" deaktiviert ist; mit akt. Dienst sieht alles wie gewünscht aus. Weiterhin sehen deaktivierte Icons unschön aus - transparente Bereiche deaktivierter Icons werden ausgefüllt. Wenn man mit der Maus über die Icons geht, werden diese farblich invertiert dargestellt.
Der Funktion tut das alles keinen Abbruch... Ich wäre jedoch sehr entzückt, wenn es dafür Abhilfe geben könnte... Hättest Du diesbezüglich eine Idee?
VG,
-supersonic.
Tut mir leid, dazu habe ich leider keine richtige Idee. Wenn du irgendwie an das Hintergrundbild des Menüs kommen kannst, ist es möglich, einen PatternBrush? zu erstellen, den du anstatt des SysColorBrush(4) verwenden kannst. Damit hast du den Hintergrund abgedeckt. Für das Invertieren weiß ich gar keine Abhilfe.
ProgAndy,
danke für die Information. Da ich diesbzgl. selbst nicht so tief in der Programmierung stehe, haben ich mich für einen anderen Weg entschlossen: Anhand der Betriebssystemversion und des Dienstzustands von 'Themes' wird entschieden, wie mit den Icons im Traymenü verfahren wird. Da ich bei anderen AutoIt-Projekten ebenfalls keine bessere Lösung gesehen habe, wird eine überall zufriedenstellende Lösung wohl auch nicht ganz einfach sein...
VG,
-supersonic.