Hallo,
ich habe offenbar noch nicht den Zusammenhang zwischen Zeichnen in einem Fenster und Gadgets kapiert.
Konkret zeichne ich ein beschriftetes Achsenkreuz und möchte dann die Mauskoordinaten in einem festen Textgadget einblenden. Die Zeichnung läuft prima. Aber sobald das Textgadget (in dem die Mauskkordinaten korrekt angezeigt werden) definiert ist, verschwindet die Zeichnung wieder.
Was muss ich tun, um Zeichnung und(!) eingeblendete Mauskoordinaten zu sehen?
Oder muss ich aufs Gadget verzichten und die Mauskoordinaten schreiben und vor dem Aktualiseren den Bereich mit der Hintergrundfarbe überschreiben?
Dank vorab!
TextGadget in Zeichnung
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
TextGadget in Zeichnung
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: TextGadget in Zeichnung
Dein Code wird benötigt.
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: TextGadget in Zeichnung
Hallo,
anbei der Code. Die 150 ProgrammZeilen für plotAxis habe ich jetzt 'mal weggelassen, weil damit nur Linien gezeichnet werden und Text mit drawtext eingefügt wird. Hier das Hauptprogramm ohne die Variablendefs.
Hier noch ein kleiner Ausschnitt aus dem Rest:
anbei der Code. Die 150 ProgrammZeilen für plotAxis habe ich jetzt 'mal weggelassen, weil damit nur Linien gezeichnet werden und Text mit drawtext eingefügt wird. Hier das Hauptprogramm ohne die Variablendefs.
Code: Alles auswählen
#WinParam=#PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_BorderLess|#PB_Window_SizeGadget
Win=OpenWindow(#PB_Any, 0, 0, 840, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_BorderLess|#PB_Window_SizeGadget)
If setWorld(-5.8,2,-2000,8000) ; Bedingungen xmin<=x<=xmax und fmin<=y<=fmax erfüllt
;MessageRequester("x-Werte",StrF(xmin)+" "+Str(xmax))
If LoadFont(1, "Arial", 8)
StartDrawing(WindowOutput(Win))
FrontColor($000000)
BackColor($FFFFFF)
DrawingFont(FontID(1))
plotAxis() ; zeichne und beschrifte das Achsenkreuz
EndIf
EndIf
;TextGadget(0, 10, 6, 200, 20, "")
dx=(xmax-xmin)/WindowWidth(Win)
dy=(fmax-fmin)/WindowHeight(Win)
Repeat
Event = WaitWindowEvent(20) ; mindestens alle 20 ms Update
Tx=StrF(xmin+dx*WindowMouseX(Win))
Ty=StrF(fmin+dy*(WindowHeight(Win)-WindowMouseY(Win)))
;SetGadgetText(0,Tx+" "+Ty)
Until Event = #PB_Event_CloseWindow
Code: Alles auswählen
Procedure.i plotXAxis()
;Zeichnet x-Achse,setzt deren Markierungen u. Beschriftung
Protected x.f,Start.i,Dist.f,markStart.f,Markzahl.i,THoehe.i,TOffset.i,AxText.s
;zeichne zuerst die x-Achse (ggf. nicht sichtbar)
LineXY(0,pxAchse(),WindowWidth(Win),pxAchse(),RGB(0,0,0))
markStart=markBeginn(xmin,xmax)
Dist=markAbstand(xmin,xmax)
Start=0
If pxAchse() > WindowHeight(Win)-3 ;xAchse am unteren Fensterrand
Start=-3 ;Markierungslinie von der Achse aus senkrecht nach oben
Else ;in allen anderen Fällen
Start=3 ;von der Achse aus nach unten
EndIf
x=markStart
THoehe=TextHeight("3") ; Höhe des Textes an einem Beispiel ermitteln
;MessageRequester("Schrifthoehe",StrF(THoehe))
If pxAchse()+3+THoehe>WindowHeight(Win) ; Schrift passt nicht voll darunter
;Offset erforderlich, falls Text nich auf unteren Windowrand passt
;evtl. vertikaler Offset ist für alle x gleich, daher nur für markStart berechnet
TOffset= -THoehe+Start -1 ;Text 1 Pixel oberhalb der x-Achse
Else
TOffset=Start
EndIf
While x<=xmax
;zeichne 3 Pixel lange Linie von der Position auf der x-Achse aus nach oben bzw. unten
LineXY(xSchirm(x),pxAchse(),xSchirm(x),pxAchse()+Start)
;Beschrifte die Achse; Zahl mittig (>>1) zur Markierung
AxText=FormatText(x)
DrawText(xschirm(x)-(TextWidth(AxText)>>1),pxAchse()+TOffset,AxText)
x=x+Dist
Wend
ProcedureReturn #True
EndProcedure
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: TextGadget in Zeichnung
Hallo,
hab die Lösung gefunden: Mit Statusbar geht es wunderbar.
Gruß
aus dem eisigen Norden
hab die Lösung gefunden: Mit Statusbar geht es wunderbar.
Gruß
aus dem eisigen Norden
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18