Zeichnen auf einem PanelGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Zeichnen auf einem PanelGadget

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag 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 
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag 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:
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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 
Antworten