Deutsch
Anwendungen

TrayAPP Template

 
- Seite 1 -


Gutes Skelett für eine TrayAPP? Funktionierts überall?

963 kB
Hochgeladen:25.12.2007
Ladeanzahl401
Herunterladen
2 kB
Hochgeladen:25.12.2007
Ladeanzahl404
Herunterladen
1 kB
Hochgeladen:25.12.2007
Ladeanzahl285
Herunterladen
 
25.12.2007  
 



 
- Seite 1 -



Michael
Wodrich
Das ist ja gemogelt - Einzel- und Doppelklick zusammen...
 
Programmieren, das spannendste Detektivspiel der Welt.
26.12.2007  
 



Gib zu, es reagiert perfekt. So oft man mit links klickt - so oft wird hwndAnzeige korrekt getoggelt.

Um Einzelklick korrekt abzufangen könnte man es wie MS machen - gutes Beispiel ist die sndvol32.exe. Schnell sieht man das dort gewartet wird. (wofür es x Lösungsansätze gibt)
 
26.12.2007  
 




Michael
Wodrich
Klang ja schon in meiner Frage an Roland an ...ob wir das selbst machen sollen.

Schön wäre ein sauberes Doppelklick-Ereignis.

Schöne Grüße
Michael Wodrich



Gib zu, es reagiert perfekt.


Muß ich das extra erwähnen?
 
Programmieren, das spannendste Detektivspiel der Welt.
26.12.2007  
 



Das ist ja der Witz, solch ein sauberes Doppelklickereignis bekommst Du ja! Es ist halt Dir überlassen ob und wie Du auf den einfachen Klick reagierst. Es wäre ja auch schade wenn der einfache Klick erst nach Ablauf der Doppelklickzeit gemeldet würde.
 
26.12.2007  
 



Gut, dann kann man das Skelett vielleicht noch mit ein paar Vervollständigungen abschließen.

Verbesserungsvorschläge?

447 kB
Hochgeladen:26.12.2007
Ladeanzahl463
Herunterladen
 
26.12.2007  
 



hm 2x geladen ist ca. 50 mal zu wenig, klickst du also hier  [...]  und sagst obs funzt...
 
27.12.2007  
 




Christian
Eichler
iF
hm 2x geladen ist ca. 50 mal zu wenig, klickst du also hier  [...]  und sagst obs funzt...


Scheint einwandfrei zu funktionnieren (Win XP SP2). Linksklick wird ein Fenster aufgemacht, Rechtsklick ein Menü
 
Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6
27.12.2007  
 




Jörg
Sellmeyer
Christian Eichler
iF
hm 2x geladen ist ca. 50 mal zu wenig, klickst du also hier  [...]  und sagst obs funzt...


Scheint einwandfrei zu funktionnieren (Win XP SP2). Linksklick wird ein Fenster aufgemacht, Rechtsklick ein Menü


Dito
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
27.12.2007  
 



Hab kein Linux mit ui hier - was sagt wine?
 
27.12.2007  
 



 
- Seite 2 -



Jörg
Sellmeyer
iF
was sagt wine?


Prost!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
27.12.2007  
 




Michael
Wodrich
Jetzt hab ich es kaputtgespielt. Schaust Du mal?

(Huch, Version 2 hab ich noch nicht entpackt)
REM XProfan v11.0ß S8-NT
Def %MyMenu_InfoApp $1400
Def %MyMenu_ExitApp $1401
Def $DefTooltip (Was sucht denn dieses Programm hier?)
Struct TrayData = hAppWin&, hIcon&, ShowMode%, ToolTip$(63)
Class Tray = -TrayData,
+Tray@, +Start@, +Stop@,
+SetIcon@, +SetText@, +SetIconAndText@,
+Menu@,
+ShowWindow@, +SwitchWindow@

Proc Tray.Tray

    Initialisiert den Datenbereich
    .ShowMode% = 1 : .hAppWin& = 0 : .hIcon& = 0 : .ToolTip$ = $DefTooltip
    Return 1

EndProc

Proc Tray.Start

    Tray.Start(hAppWin&,{Icon$|Icon&|0},{Tooltip$|})
    Par 1 - hAppWin&
    Par 2 - IconName$ oder IconHandle& oder 0 (Null) (dann vorher: .SetIcon)
    Par 3 - ToolTip$ oder  (dann vorher: .SetText)
    (Das IconHandle& wird intern über Tray.Stop entfernt.)
    Declare Typ$, AppWin&, ErrMsg$, erg% : Clear erg%  0 = Fehler, 1 = Ok
    ErrMsg$ = Tray.Start benötigt drei (3) Parameter
    Tray.Start( hAppWin&, {Icon$|Icon&|0}, {Tooltip$|qq} )

    If %PCount <> 3

        MessageBox(ErrMsg$,Parameter-Fehler (Anzahl),16 + 4096 + 262144)

    Else

        Typ$ = PType$(2)

        Select Left$(Typ$,1)

            CaseOf &  es wurde ein IconHandle angegeben

            Parameters p1a&,p2a&,p3a$
            AppWin& = p1a& : erg% = .SetIconAndText(p2a&,p3a$)

            CaseOf $  es wurde der Name eines internen Icons angegeben

            Parameters p1b&,p2b$,p3b$
            AppWin& = p1b& : erg% = .SetIconAndText(p2b$,p3b$)
            Otherwise
            MessageBox(ErrMsg$,Parameter-Fehler (Typ),16 + 4096 + 262144)

        EndSelect

        .hAppWin& = AppWin&
        CaseNot .hAppWin& : Clear erg%

        If erg%

            CaseNot .hIcon& : .hIcon& = Create(hIcon,A)
            Case .Tooltip$ =  : .ToolTip$ = $DefTooltip
            TrayIcon(Add,.hAppWin&,1,.hIcon&,.ToolTip$)

        EndIf

    EndIf

    Return erg%

EndProc

Proc Tray.SetIcon

    Tray.SetIcon( {Icon$|Icon&} )
    Par 1 - IconName$ oder IconHandle&
    Declare Typ$, ErrMsg$, erg% : Clear erg%  0 = Fehler, 1 = Ok
    ErrMsg$ = Tray.SetIcon benötigt einen (1) Parameter
    Tray.SetIcon( {Icon$ | Icon&} )

    If %PCount <> 1

        MessageBox(ErrMsg$,Parameter-Fehler (Anzahl),16 + 4096 + 262144)

    Else

        Typ$ = PType$(1)

        Select Left$(Typ$,1)

            CaseOf &  es wurde ein IconHandle angegeben

            Parameters p1a&

            If .hIcon& : Case .hIcon& <> p1a& : DeleteObject .hIcon& : EndIf

                .hIcon& = p1a&
                Case .hAppWin& : TrayIcon(SetIcon,.hAppWin&,1,.hIcon&)
                inc erg%

                CaseOf $  es wurde der Name eines internen Icons angegeben

                Parameters p1b$
                Case .hIcon& : DeleteObject .hIcon&
                .hIcon& = Create(hIcon,p1b$)
                Case .hAppWin& : TrayIcon(SetIcon,.hAppWin&,1,.hIcon&)
                inc erg%
                Otherwise
                MessageBox(ErrMsg$,Parameter-Fehler (Typ),16 + 4096 + 262144)

            EndSelect

        EndIf

        Return erg%

    EndProc

    Proc Tray.SetText

        Tray.SetText( Tooltip$ )
        Par 1 - ToolTip$
        Parameters Txt$
        Declare ErrMsg$, erg% : Clear erg%  0 = Fehler, 1 = Ok
        ErrMsg$ = Tray.SetText benötigt einen (1) Parameter
        Tray.SetText( Tooltip$ )

        If %PCount <> 1

            MessageBox(ErrMsg$,Parameter-Fehler (Anzahl),16 + 4096 + 262144)

        Else

            .Tooltip$ = Txt$
            Case .hAppWin& : TrayIcon(SetText,.hAppWin&,1,.Tooltip$)
            inc erg%

        EndIf

        Return erg%

    EndProc

    Proc Tray.SetIconAndText

        Tray.SetIcon( {Icon$|Icon&}, Tooltip$ )
        Par 1 - IconName$ oder IconHandle&
        Par 2 - ToolTip$
        Declare Typ$, ErrMsg$, erg% : Clear erg%  0 = Fehler, 1 = Ok
        ErrMsg$ = Tray.SetIconAndText benötigt zwei (2) Parameter
        Tray.SetIconAndText( {Icon$|Icon&}, Tooltip$ )

        If %PCount <> 2

            MessageBox(ErrMsg$,Parameter-Fehler (Anzahl),16 + 4096 + 262144)

        Else

            Typ$ = PType$(1)

            Select Left$(Typ$,1)

                CaseOf &  es wurde ein IconHandle angegeben

                Parameters p1a&,p2a$
                erg% = .SetIcon(p1a&)
                Case erg% : erg% = .SetText(p2a$)

                CaseOf $  es wurde der Name eines internen Icons angegeben

                Parameters p1b$,p2b$
                erg% = .SetIcon(p1b$)
                Case erg% : erg% = .SetText(p2b$)
                Otherwise
                MessageBox(ErrMsg$,Parameter-Fehler (Typ),16 + 4096 + 262144)

            EndSelect

        EndIf

        Return erg%

    EndProc

    Proc Tray.Stop

        Declare erg%, h&
        Case .hAppWin& : TrayIcon(Delete,.hAppWin&,1)
        Case .hIcon& : DeleteObject .hIcon&
        .Tray()
        Return 1

    EndProc

    Proc Tray.ShowWindow

        Parameters mode%
        CaseNot .ShowMode% = mode% : ShowWindow(.hAppWin&,mode%)

        If mode%

            External(user32,SetForegroundWindow,.hAppWin&)
            SetActiveWindow(.hAppWin&)

        EndIf

        .ShowMode% = mode%
        Return 1

    EndProc

    Proc Tray.SwitchWindow

        .ShowWindow( 1 - .ShowMode% )
        Return 1

    EndProc

    Proc Tray.Menu

        Declare erg%
        CreateMenu
        AppendMenu %MyMenu_InfoApp,Info
        Separator
        AppendMenu %MyMenu_ExitApp,Beenden
        SetActiveWindow(.hAppWin&)
        erg% = TrackMenu()
        SetMenuItem 0
        Return erg%

    EndProc

    rem -----------------------------------------------------------------------
    rem ------- MAIN ----------------------------------------------------------
    rem -----------------------------------------------------------------------
    Declare appTitle$
    appTitle$ = Par$(0)
    WindowStyle 2 | 4 | 8 | 16 | 512 | 1024
    WindowTitle appTitle$ +  - XProfan v + $ProfVer
    Cls
    Print die linke Maustaste ändert den Fensterstatus
    Print die rechte Maustaste bringt ein Menü (Info=ohne Hauptfenster)
    Print
    Print Wieso wird in diesem Programm das Beenden nicht ausgeführt (Menü).
    Print
    Print Wenn ich das Fenster schliesse, dann klappt es.
    Print
    Print Wo ist hier der Fehler?
    Print
    Print
    Declare oTray#
    oTray# = New(Tray)
    Declare extIcon& : extIcon& = Create(hIcon,c:\windows\system32\moricons.dll,14)

    IfNot oTray#.Start( %hWnd, extIcon&, appTitle$ )  Aufruf mit Handle eines externen Icons

        Das Icon wird durch oTray#.Stop freigegeben

        IfNot oTray#.Start( %hWnd, 0, appTitle$ )  ohne Iconauswahl

            IfNot oTray#.Start( %hWnd, EDITOR, appTitle$ )  Name eines internen Icons

                MessageBox(Programm gestoppt, weil es nicht fehlerfrei arbeitet.,Programm-Abbruch,16 + 4096 + 262144)
                oTray#.Stop()
                Dispose oTray#
                END

            EndIf

            UserMessages 16  wm_close
            Declare ende% : Clear ende%

            WhileNot ende%

                Select TrayIcon(Msg,1)

                     $201:L,$202:l,$203:LL, $204:R,$205:r,$206:RR, $207:M,$208:m,$209:MM

                    CaseOf $201  links

                    oTray#.SwitchWindow()

                    CaseOf $204  rechts

                    Select oTray#.Menu()

                        CaseOf %MyMenu_InfoApp

                        oTray#.ShowWindow( 0 )
                        MessageBox(TrayInfo-Anwendung,Info,0)

                        CaseOf %MyMenu_ExitApp

                        Inc ende%
                        BREAK

                    EndSelect

                EndSelect

                Select %uMessage

                    CaseOf 16

                    Inc ende%
                    BREAK

                EndSelect

                Case ende% : BREAK
                CaseNot ende% : WaitInput
                Print Key:;%Key,
                , MenuItem:;%MenuItem,
                , MWnd:;%MWnd,
                , Message:;%Message
                Print wParam:;&wParam,($;Hex$(&wParam);),
                , lParam:;&lParam,($;Hex$(&lParam);)

            EndWhile

            oTray#.ShowWindow( 1 )
            oTray#.Stop()
            Dispose oTray#
            UserMessages -16  Messages wieder entfernen
            End

Schöne Grüße
Michael Wodrich

P.S.: Der Code-Formatierer kennt Select-EndSelect nicht.
 
Programmieren, das spannendste Detektivspiel der Welt.
27.12.2007  
 




Zur Anwendung


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

18.320 Betrachtungen

Unbenanntvor 0 min.
Sven Bader08.11.2022
RICOSCH11.02.2016
Georg Teles09.02.2016
iF28.12.2015
Mehr...

Themeninformationen



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