Seite 1 von 1
TextGadget in Zeichnung
Verfasst: 10.12.2012 14:39
von ProgOldie
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!
Re: TextGadget in Zeichnung
Verfasst: 10.12.2012 15:14
von RSBasic
Dein Code wird benötigt.
Re: TextGadget in Zeichnung
Verfasst: 10.12.2012 15:27
von ProgOldie
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.
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
Hier noch ein kleiner Ausschnitt aus dem Rest:
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
Re: TextGadget in Zeichnung
Verfasst: 10.12.2012 16:29
von ProgOldie
Hallo,
hab die Lösung gefunden: Mit Statusbar geht es wunderbar.
Gruß
aus dem eisigen Norden