| |
|
|
- Seite 1 - |
|
Nico Madysa | Ich habe ein kleines Problem mit TrayIcos und Kontextmenüs, welches ich anhand des folgenden Quelltextes aufzeigen will: KompilierenMarkierenSeparieren'Fenster und TrayIcon erzeugen
cls
var hIcon& = Create("hIcon","Profan")
TrayIcon("Add", %hWnd, 1, hIcon&, "TrayIcon 11")
var sw% = 0
'Hauptschleife
var e% = 0
whilenot e%
waitinput
if IsKey(27)
e% = 1
elseif (GetActiveWindow() = %hWnd) and (%MouseKey = 2)
'Rechtsklick ins Hauptfenster
'Abbruch des Menüs durch beliebigen Klick
Menu
elseif TrayIcon("Msg", 1) = $204
'Rechtsklick auf dem TrayIcon
'Abbruch des Menüs NUR durch Klick ins Hauptfenster
Menu
endif
wend
'Beenden
TrayIcon("Delete", %hWnd, 1)
DeleteObject hIcon&
end
proc Menu
CreateMenu
AppendMenu 100,"Fenster anzeigen/verbergen"
Separator
AppendMenu 999,"Beenden"
'Programm beenden
case TrackMenu() = 999 : e% = 1'Beenden
'Hauptfenster toggeln
case %MenuItem = 100 : sw% = ShowWindow(%hWnd,sw%)
endproc
Wenn ich das Kontextmenü mit einem Rechtsklick aufrufe, aber gegen alle Logik NICHTS auswählen will, reicht es normalerweise, irgendwohin zu klicken, damit das Kontextmenü wieder verschwindet.
Problem jedoch: Wenn das Kontextmenü durch den TrayIcon erzeugt worden ist, reicht zum Verschwindenlassen kein beliebiger Klick, sondern er muss im Kontextmenü oder im Programmfenster erfolgen.
Das wird zum Ärgernis, wenn, wie es bei Benutzung eines TrayIcons möglich ist, man gar kein sichtbares Fenster zur Verfügung hat. Dann hat der Nutzer gar keine andere Wahl, als irgendeinen Punkt auszuwählen.
Gibt es dafür irgendeinen Workaround oder lässt es sich gar dauerhaft beheben?
Liebe Grüße,
Nico |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
Andreas Miethe
| Probiers mal so KompilierenMarkierenSeparieren'Fenster und TrayIcon erzeugen
Windowstyle 26 + 512
CLS
Var hIcon& = Create("hIcon","Profan")
TrayIcon("Add", %hWnd, 1, hIcon&, "TrayIcon 11")
Var sw% = 0
'Hauptschleife
Var e% = 0
WhileNot e%
WaitInput
If IsKey(27) or (%Key = 2)
Ende()
ElseIf (GetActiveWindow() = %hWnd) and (%MouseKey = 2)
Menu()
ElseIf TrayIcon("Msg", 1) = $204
SetActiveWindow(%hWnd)
Menu()
Endif
EndWhile
End
Proc Ende
TrayIcon("Delete", %hWnd, 1)
DeleteObject hIcon&
End
Endproc
Proc Menu
CreateMenu
AppendMenu 100,"Fenster anzeigen/verbergen"
Separator
AppendMenu 999,"Beenden"
TrackMenu()
If %MenuItem = 100
Messagebox("Fenster verbergen","Hinweis",64)
ElseIf %MenuItem = 999
Ende()
EndIf
EndProc
|
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 23.03.2012 ▲ |
|
|
|
|
|
RGH | Hallo, da die Funktion Trackmenu() nun mal wartet, bis ein Menüpunkt gewählt wurde, gibt es keinen einfachen Workaround. Von einem Klick ins Blaue bekommt das XProfan-Programm nichts mit.
Eine praktische Lösung wäre, einen Menüpunkt "Abbruch" oder "Menü schließen" einzufügen, damit der entscheidungsschwache User dann auch ungefährdet das Menü wieder verlassen kann.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.03.2012 ▲ |
|
|
|
|
Andreas Miethe
| Probiers mal so KompilierenMarkierenSeparieren'Fenster und TrayIcon erzeugen
Windowstyle 26 + 512
CLS
Var hIcon& = Create("hIcon","Profan")
TrayIcon("Add", %hWnd, 1, hIcon&, "TrayIcon 11")
Var sw% = 0
'Hauptschleife
Var e% = 0
WhileNot e%
WaitInput
If IsKey(27) or (%Key = 2)
Ende()
ElseIf (GetActiveWindow() = %hWnd) and (%MouseKey = 2)
Menu()
ElseIf TrayIcon("Msg", 1) = $204
SetActiveWindow(%hWnd)
Menu()
Endif
EndWhile
End
Proc Ende
TrayIcon("Delete", %hWnd, 1)
DeleteObject hIcon&
End
Endproc
Proc Menu
CreateMenu
AppendMenu 100,"Fenster anzeigen/verbergen"
Separator
AppendMenu 999,"Beenden"
TrackMenu()
If %MenuItem = 100
Messagebox("Fenster verbergen","Hinweis",64)
ElseIf %MenuItem = 999
Ende()
EndIf
EndProc
|
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 23.03.2012 ▲ |
|
|
|
|
Nico Madysa | Andreas Miethe (23.03.12)
Probiers mal so KompilierenMarkierenSeparieren'Fenster und TrayIcon erzeugen
Windowstyle 26 + 512
CLS
Var hIcon& = Create("hIcon","Profan")
TrayIcon("Add", %hWnd, 1, hIcon&, "TrayIcon 11")
Var sw% = 0
'Hauptschleife
Var e% = 0
WhileNot e%
WaitInput
If IsKey(27) or (%Key = 2)
Ende()
ElseIf (GetActiveWindow() = %hWnd) and (%MouseKey = 2)
Menu()
ElseIf TrayIcon("Msg", 1) = $204
SetActiveWindow(%hWnd)
Menu()
Endif
EndWhile
End
Proc Ende
TrayIcon("Delete", %hWnd, 1)
DeleteObject hIcon&
End
Endproc
Proc Menu
CreateMenu
AppendMenu 100,"Fenster anzeigen/verbergen"
Separator
AppendMenu 999,"Beenden"
TrackMenu()
If %MenuItem = 100
Messagebox("Fenster verbergen","Hinweis",64)
ElseIf %MenuItem = 999
Ende()
EndIf
EndProc
Eine Zeile reicht, genau so was habe ich mir gewünscht! Danke, Andreas! |
|
|
| |
|
|