Deutsch
Forum

Erledigt: Maus PopUp Menü hakt

 

Ulrich
Milde
Ich hab ein fest verdrahtetes Programm geschrieben, mit dem ich die gleichmässige Verteilung von Bohrungen in einem Rechteckrahmen hinbekomme. In meinem Fall geht es um die Umrahmung eines Oberlichtes mit LEDs, so wie ein Sternenhimmel. Das funktioniert soweit, wie man hier sehen kann. [...] 
Nun bin ich dabei, dieses Programm allgemeiner umzubauen. Los geht es mit dem Rechteckrahmen. Ich benutze ein Mausmenü, was mit der rechten taste aufgerufen wird. Wenns um den äusseren Rahmen geht ist alles ok. Zum inneren Rahmen komme ich nicht so recht, weil dann das menü nicht mehr aufgerufen werden kann. Noch eines, CheckMenu funktioniert anscheinend nicht mit unahängigen PopUp Menüs. Ist das so?

Ich hänge das Program an, in den Procs Mausrechtinnen und Mausrechtaussen werden nur Rechtecke gezeichnet. Da kanns eigentlich nicht dran liegen.

Ich danke schon mal für die Hilfe!
KompilierenMarkierenSeparieren
Proc Mausrechtaussen

    Declare aktmxpos%,aktmypos%
    aktmxpos%=%mousex
    aktmypos%=%mousey

    If (aktmxpos% > myxspos%) and (aktmypos% > myyspos%)

        UsePen 0,1, RGB(255,255,255)
        Rectangle myxspos%,myyspos% - Lxpos1%, Lypos1%
        UsePen 2,1, RGB(90,53,202)
        Line myxspos%,myyspos% - %maxx, myyspos%
        Line myxspos%,myyspos% - myxspos%, %maxy
        UsePen 0,1, RGB(0,0,0)
        Rectangle myxspos%,myyspos% - aktmxpos%, aktmypos%
        Lxpos1%= aktmxpos%
        Lypos1%= aktmypos%
        DrawText %maxx - 120,3, "                                             "
        DrawText %maxx - 120,3, " X = "+ Str$(aktmxpos% - myxspos%)+ " Y = "+Str$(aktmypos% - myyspos%)

    Endif

Endproc

Proc Mausrechtinnen

    Declare aktmxpos%,aktmypos%
    aktmxpos%=%mousex
    aktmypos%=%mousey

    If (aktmxpos% > myxspos%) and (aktmypos% > myyspos%) and (Lxpos2% > aktmxpos%) and (Lypos2% > aktmypos%)

        If (Lxpos2% > aktmxpos%+2) and (Lypos2% > aktmypos%+2)

            UsePen 0,1, RGB(255,255,255)
            Rectangle myxspos%,myyspos% - Lxpos1%, Lypos1%
            UsePen 2,1, RGB(90,53,202)

        Endif

        Line myxspos%,myyspos% - %maxx, myyspos%
        Line myxspos%,myyspos% - myxspos%, %maxy
        UsePen 0,1, RGB(0,0,0)
        Rectangle myxspos%,myyspos% - aktmxpos%, aktmypos%
        Lxpos1%= aktmxpos%
        Lypos1%= aktmypos%
        DrawText %maxx - 120,3, "                                             "
        DrawText %maxx - 120,3, " X = "+ Str$(aktmxpos% - myxspos%)+ " Y = "+Str$(aktmypos% - myyspos%)

    Endif

Endproc

Declare WTitel$, Ende%, myxspos%,myyspos%, lastxpos%,lastypos%
Declare Lxpos1%,Lxpos2%,Lypos1%,Lypos2%
Declare zaussen%,zinnen%
Set("Decimals",0)
Lxpos1%=myxspos%
Lypos1%=Myyspos%
myxspos%=9
myyspos%=9
Lastxpos%=-1
zaussen%=0
zinnen%=0
WTitel$="LEDRect - grafische LED Verteilung in einem Rahmen um ein Oberlicht - 2010 by UKM "
WindowStyle 8
Window 1,1 - %maxx,%maxy
Windowtitle WTitel$
PopUp "RectangleLEDs"
AppendMenu 100, "Rechteck aussen setzen"
Appendmenu 102, "Rechteck innen setzen"
cls
UsePen 2,1, RGB(90,53,202)
Line myxspos%,myyspos% - %maxx, myyspos%
Line myxspos%,myyspos% - myxspos%, %maxy
UsePen 0,1, RGB(0,0,0)

WHILENOT ENDE%

    WAITKey

    If %KEY=2

        ENDE%= 1

    ElseIf %key=27

        Ende%=1

    ElseIf %MouseKey = 2

        CreateMenu
        AppendMenu 101,"Rechteck &aussen"
        AppendMenu 102,"Rechteck &innen"
        AppendMenu 103,"&LEDs"
        Separator
        AppendMenu 109,"&Ende"
        TrackMenu %MouseX,%MouseY

        If MenuItem(101)

            If zaussen%=0

                zaussen%=1
                Checkmenu 101,1

            Else

                zaussen%=0
                Checkmenu 101,0

            Endif

        ElseIf MenuItem(102)

            If zinnen%=0

                zinnen%=1
                zaussen%=0
                Lxpos2%=Lxpos1%
                Lypos2%=Lypos1%

            Else

                zinnen%=0
                zaussen%=1

            EndIf

        ElseIf @MenuItem(109)

            Ende% = 1

        Else

            Print "Ausgewählt:",%MenuItem

        EndIf

    Else

    EndIf

    If zaussen%=1

        Mausrechtaussen

    Endif

    If Zinnen%=1

        Mausrechtinnen

    EndIf

ENDWHILE

 
06.02.2010  
 




Thomas
Freier
Du mußt den MenuCheck- Zustand in einer Variablen hinterlegen, da es in der Schleife jedes mal neu erstellt wird.
KompilierenMarkierenSeparieren
declare check_1%,check_2%
..........
CreateMenu
AppendMenu 101,"Rahmen aussen"
AppendMenu 102,"Rahmen innen"
Separator
AppendMenu 103,"LED rot"
Separator
AppendMenu 109,"Ende"
CheckMenu 101,check_1%
CheckMenu 102,check_2%
TrackMenu %MouseX,%MouseY

If menuitem(101) AND (check_1%=0)

    ................
    ................
    check_1%=1

ElseIf menuitem(102) AND (check_2%=0)

    ................
    ................
    check_test2%=1
    ...............
 
Gruß Thomas
Windows XP SP2, XProfan X2
06.02.2010  
 




Ulrich
Milde
Ja, dankeschön, ich wär nicht auf die Idee mit der Variablen gekommen. Das Mausmenü läuft und auch sonst nähren sich die Rechtecke immer mehr dem Rahmen an, den sie bilden sollen. Ich häng das nun schon ein wenig besser tickende Proggi unten nochmal an, falls jemand ähnliche Probleme wie ich haben sollte.

Danke und tschüss
KompilierenMarkierenSeparieren
Proc Rechteckaussen

    Declare aktmxpos%,aktmypos%
    aktmxpos%=%mousex
    aktmypos%=%mousey

    If (aktmxpos% > myxspos%) and (aktmypos% > myyspos%)

        UsePen 0,1, RGB(255,255,255)
        Rectangle myxspos%,myyspos% - Lxpos1%, Lypos1%
        UsePen 2,1, RGB(90,53,202)
        Line myxspos%,myyspos% - %maxx, myyspos%
        Line myxspos%,myyspos% - myxspos%, %maxy
        UsePen 0,1, RGB(0,0,0)
        Rectangle myxspos%,myyspos% - aktmxpos%, aktmypos%
        Lxpos1%= aktmxpos%
        Lypos1%= aktmypos%
        DrawText %maxx - 120,3, "                                             "
        DrawText %maxx - 120,3, " X = "+ Str$(aktmxpos% - myxspos%)+ " Y = "+Str$(aktmypos% - myyspos%)

    Endif

Endproc

Proc Rechteckinnen

    Declare aktmxpos%,aktmypos%,xdiff%,ydiff%
    aktmxpos%=%mousex
    aktmypos%=%mousey
    xdiff%=Lxpos1%-aktmxpos%

    If (aktmxpos% <= Lxpos1%) and (aktmypos% <= Lypos1%)

        UsePen 0,1, RGB(255,255,255)
        Rectangle myxspos%,myyspos% - Lxpos2%, Lypos2%
        UsePen 2,1, RGB(90,53,202)
        Line myxspos%,myyspos% - %maxx, myyspos%
        Line myxspos%,myyspos% - myxspos%, %maxy
        UsePen 0,1, RGB(0,0,0)
        Rectangle myxspos%,myyspos% - Lxpos1%, Lypos1%
        Rectangle myxspos%+xdiff%,myyspos%+xdiff% - aktmxpos%, aktmypos%
        Lxpos2%= aktmxpos%
        Lypos2%= aktmypos%
        DrawText %maxx - 270,3, "                                                                     "
        DrawText %maxx - 270,3, " XDiff = "+Str$(xdiff%)+ " X = "+ Str$(aktmxpos% - myxspos%)+ " Y = "+Str$(aktmypos% - myyspos%)

    Endif

Endproc

SET("ERRORLEVEL",1)
Declare WTitel$, Ende%, myxspos%,myyspos%, lastxpos%,lastypos%
Declare Lxpos1%,Lxpos2%,Lypos1%,Lypos2%,zeichne%
Declare zaussen%,zinnen%
Set("Decimals",0)
Lxpos1%=myxspos%
Lypos1%=Myyspos%
myxspos%=9
myyspos%=9
Lastxpos%=-1
zaussen%=0
zinnen%=0
WTitel$="LEDRect - grafische LED Verteilung in einem Rahmen um ein Oberlicht - 2010 by UKM "
WindowStyle 8
Window 1,1 - %maxx,%maxy
Windowtitle WTitel$
PopUp "RectangleLEDs"
AppendMenu 100, "Rechteck aussen setzen"
Appendmenu 102, "Rechteck innen setzen"
cls
UsePen 2,1, RGB(90,53,202)
Line myxspos%,myyspos% - %maxx, myyspos%
Line myxspos%,myyspos% - myxspos%, %maxy
UsePen 0,1, RGB(0,0,0)

WHILENOT ENDE%

    WAITKey

    If %KEY=2

        ENDE%= 1

    ElseIf %key=27

        Ende%=1

    ELSEIF %KEY=4

    ElseIf %MousePressed = 1

        If zaussen% = 1

            Rechteckaussen

        Endif

        If zinnen% =1

            Rechteckinnen

        Endif

    ElseIf %MousePressed = 2

        CreateMenu
        AppendMenu 101,"Rechteck &aussen"
        AppendMenu 102,"Rechteck &innen"
        AppendMenu 103,"&LEDs"
        Separator
        AppendMenu 109,"&Ende"
        CheckMenu 101,zaussen%
        CheckMenu 102,zinnen%
        TrackMenu %MouseX,%MouseY

        If MenuItem(101)

            If zaussen%=0

                zaussen%=1

            Else

                zaussen%=0
                Lxpos2%=9
                Lypos2%=9

            Endif

        ElseIf MenuItem(102)

            If zinnen%=0

                zinnen%=1

            Else

                zinnen%=0

            EndIf

        ElseIf @MenuItem(109)

            Ende% = 1

        Else

            Print "Ausgewählt:",%MenuItem

        EndIf

    Endif

ENDWHILE

 
07.02.2010  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.598 Betrachtungen

Unbenanntvor 0 min.
Walter02.02.2016
Ernst30.04.2014
Andre Rohland11.02.2014
Frank Vorholzer20.04.2011

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Ulrich Milde (2x)
Thomas Freier (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