Deutsch
Bugs und vermeintliche

Kontextmenüs und TrayIcons

 
- 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
 
23.03.2012  
 



« 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!
 
23.03.2012  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.974 Betrachtungen

Unbenanntvor 0 min.
E.T.06.03.2018
Peter Max Müller23.10.2017
Jörg Sellmeyer18.08.2017
Georg Teles15.02.2016
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Nico Madysa (2x)
Andreas Miethe (1x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie