Forum | | | | 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
|
| | | | |
| | Thomas Freier | | | | | |
| | 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
|
| | | | |
|
AntwortenThemenoptionen | 4.598 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |