Seite 1 von 1
Zeichnen auf einem PanelGadget
Verfasst: 03.03.2005 11:25
von Pelagio
Hallo Leidensgenossen
ich habe mir das neue Update heruntergeholt und versucht einige ältere Programme damit laufen zu lassen. Dabei funktionierte das Zeichnen einer Achse, für ein Diagramm welches in einem ImageGadget gezeichnet wurde, direkt auf dem PanelGadget nicht mehr (Die Daten wurden auf dem Fenster gezeichnet, hinter dem Panel). Ich habe diesbezüglich deinen Testcode hierfür geschrieben und frage an wo liegt der Fehler, vorher funktionierte es, oder wie müste der Code jetzt geändert werden?
Code: Alles auswählen
Procedure DrawTheText()
DrawID.l = StartDrawing(WindowOutput())
If DrawID
InvalidateRect_(GadgetID(1), 0, 1)
UpdateWindow_ (GadgetID(1))
DrawingMode(1)
FrontColor($FF,$0,$0)
Locate(150, 100)
DrawText("TESTING")
StopDrawing()
EndIf
EndProcedure
Procedure Open_Window_Base()
If OpenWindow(0, 283, 100, 430, 320, #PB_Window_SystemMenu, "Test")
CreateGadgetList(WindowID())
PanelGadget (1, 0, 0, 430, 300)
AddGadgetItem (1, -1, "Vorgaben")
CloseGadgetList()
EndIf
EndProcedure
Open_Window_Base()
DrawTheText()
Repeat: baseEvent.l = WaitWindowEvent(): Until (baseEvent = #PB_Event_CloseWindow)
End
Die Freude wäre Groß, wenn einmal etwas so funktionieren würde wie es sollte.
Verfasst: 03.03.2005 11:59
von Kaeru Gaman
spontan würde ich vermuten, dass die an StartDrawing() übergebene ID (oder Handle, was nun immer)
die des Gadgets und nicht die des Fensters sein muss.
insofern scheint es eher vorher ein Bug gewesen zu sein, der jetzt korrigiert wurde.
Verfasst: 03.03.2005 12:39
von ts-soft
Du mußt ein ImageGadget auf dem PanelGadget erstellen und Deine Ausgaben darauf machen. Deine Version funktionierte tatsächlich unter PB 3.92, aber das wahr wohl eher ein Bug als ein Feature.
gruß
Thommy
Verfasst: 03.03.2005 14:32
von Pelagio
Ich danke für die Antworten, allerdings ist das Problem wieder einmal einfacher zu lösen als gedacht.
Code: Alles auswählen
Procedure DrawTheText()
DrawID.l = StartDrawing(WindowOutput())
If DrawID
DrawingMode(1)
FrontColor($FF,$0,$0)
Locate(150, 100)
DrawText("TESTING")
StopDrawing()
EndIf
EndProcedure
Procedure Open_Window_Base()
If OpenWindow(0, 283, 100, 430, 320, #PB_Window_SystemMenu, "Test")
CreateGadgetList(WindowID())
PanelGadget (1, 0, 0, 430, 300)
AddGadgetItem (1, -1, "Vorgaben")
CloseGadgetList()
EndIf
EndProcedure
Open_Window_Base()
Repeat
baseEvent.l = WaitWindowEvent()
If (baseEvent = #PB_Event_RePaint): DrawTheText(): EndIf
Until (baseEvent = #PB_Event_CloseWindow)
End
Verfasst: 03.03.2005 14:40
von ts-soft
Ich finde es trotzdem besser auf nem ImageGadget als immer Neuzeichnen. Dann übernimmt Windows das Neuzeichnen automatisch. Aber das ist wohl mehr eine Gewohnheit

Verfasst: 03.03.2005 14:50
von Pelagio
@ts-soft
Du hast recht, aber mir reicht ein ImageGadget, ansonsten müsste ich mit Dreien arbeiten für die X-Achse, die Y-Achse und dem Diagramm.

Verfasst: 07.03.2005 04:24
von Hroudtwolf
Das wäre auch eine Möglickeit
Code: Alles auswählen
If OpenWindow(0, 283, 100, 430, 320, #PB_Window_SystemMenu, "Test")
CreateGadgetList(WindowID())
hGadget.l= PanelGadget (1, 0, 0, 430, 300)
AddGadgetItem (1, -1, "Vorgaben")
CloseGadgetList()
hBrush.l = CreateSolidBrush_(rgb (255,0,0));Rot
SetClassLong_( hGadget.l, #GCL_HBRBACKGROUND, hBrush.l)
InvalidateRect_( hGadget.l, #NULL, #TRUE)
Repeat
baseEvent.l = WaitWindowEvent()
Until (baseEvent = #PB_Event_CloseWindow)
DeleteObject_(hBrush.l)
End
endif