Seite 1 von 1

Zeichnen auf einem PanelGadget

Verfasst: 03.03.2005 11:25
von Pelagio
:bluescreen:
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
:allright:
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.
:bounce:

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