Hallo,
ich zeichne Linien und schreibe formatierte Zahlen in ein Fenster. Diese Anzeige soll aktualisiert werden, wenn die Größe des Fensters geändert wird. Dazu ist in diesem Fall immer ein vollstängies Löschen des bisherigen Fensterinhalte nötig.
Wie macht man das am elegantesten? Fenster schließen und neu Öffnen? oder...?
Dank vorab!
Windowinhalt löschen
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Windowinhalt löschen
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: Windowinhalt löschen
Hallo ProgOldie,
ich weiß zwar nicht genau, worauf du hinaus willst. Ich denke, der Anwender soll möglichst wenig von den Neuaufbau mitbekommen.
Das machst du, in dem du die Anzeige deines Fensters bis zum Ende des Neuaufbaus einfriest.
Das geht so:
Hier ein Aufrufbeispiel:
Einfrieren
Wieder anzeigen
ich weiß zwar nicht genau, worauf du hinaus willst. Ich denke, der Anwender soll möglichst wenig von den Neuaufbau mitbekommen.
Das machst du, in dem du die Anzeige deines Fensters bis zum Ende des Neuaufbaus einfriest.
Das geht so:
Code: Alles auswählen
Procedure SetRedraw(hWnd,state)
SendMessage_(hWnd,#WM_SETREDRAW,state,0)
EndProcedure
Einfrieren
Code: Alles auswählen
SetRedraw(GadgetID(#Window_0),0)
Code: Alles auswählen
SetRedraw(GadgetID(#Window_0),1)
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Re: Windowinhalt löschen
direkt in (eigentlich auf) ein Fenster malen ist doch eh ungescheit da es das canvasgadget gibt.
Code: Alles auswählen
Enumeration
#win
#gad
EndEnumeration
Procedure malemal()
Static m
StartDrawing(CanvasOutput(#gad))
Box(0,0,GadgetWidth(#gad),GadgetHeight(#gad),$ADDEFF)
Line(0,0,GadgetWidth(#gad),GadgetHeight(#gad))
Line(0,GadgetHeight(#gad),GadgetWidth(#gad),-GadgetHeight(#gad))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0,0,"Achje .. wie undynamisch",$808080)
m+1
dyntext.s=Str(m)+". Neubemalung, ganz schön dünamisch (und falsch)"
tw=TextWidth(dyntext)
th=TextHeight(dyntext)
DrawText(GadgetWidth(#gad)-tw,GadgetHeight(#gad)-th,dyntext,$808080)
StopDrawing() ; hier wird der Inhalt des Canvasgadgets sichtbar, das Bemalen selber sieht niemand
EndProcedure
OpenWindow(#win,0,0,500,500,"Fänstarr",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
CanvasGadget(#gad,0,0,0,0) ;die Größe ist hier egal da unten in der EventSchleife die Größe gesetzt wird
Repeat
event=WaitWindowEvent()
eventtype=EventType()
Select event
Case #PB_Event_SizeWindow ;wenn die Fenstergröße geändert wird (das passiert auch einmal ganz am Programmanfang)
ResizeGadget(#gad,0,0,WindowWidth(0),WindowHeight(0)) ;anpassen an die neue Fenstergröße
;
;hier wird dann auch das Canvas neu bemalt
malemal()
Case #PB_Event_CloseWindow
quit+1
EndSelect
Until quit
End
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: Windowinhalt löschen
Super!
Danke,bobobo.
Was ich so toll an PB finde, ist die enorme Geschwindigkeit, mit der sämtliche Zeichenelemente an die Fenstergröße angepasst werden.
Danke,bobobo.
Was ich so toll an PB finde, ist die enorme Geschwindigkeit, mit der sämtliche Zeichenelemente an die Fenstergröße angepasst werden.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: Windowinhalt löschen
Im Prinzip schon
aber das kommt sicher auch auf den Umfang der Elemente und die letztlichen Fenstergröße an.
Ich seh hier (Laptop mit lahmer Grafikkarte) schon den einen oder anderen Wackler beim Resizen des Fensters
Da man das Resizen auch einschränken kann windowbounds() ist das eventuell gar nicht so schlimm
Wenn es doll ruckelt, dann kann man ja auch nur den relevanten Teil neu malen.
aber das kommt sicher auch auf den Umfang der Elemente und die letztlichen Fenstergröße an.
Ich seh hier (Laptop mit lahmer Grafikkarte) schon den einen oder anderen Wackler beim Resizen des Fensters
Da man das Resizen auch einschränken kann windowbounds() ist das eventuell gar nicht so schlimm
Wenn es doll ruckelt, dann kann man ja auch nur den relevanten Teil neu malen.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.