Grausames PB-Splittergadget (war: Grausames PB-Panelgadget)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Grausames PB-Splittergadget (war: Grausames PB-Panelgadget)

Beitrag von Kiffi »

Hallo,

gibt es eigentlich eine Alternative zum PB-PanelGadget? Ist ja nicht
auszuhalten, wie das Ding flackert und die Items auf den Tabs beim Resizen
einfach im nirgendwo verschwinden.

Danke im voraus & Grüße ... Kiffi (genervt)

// Edit: Subject angepasst. Der Übeltäter ist anscheinend doch nicht das
Panelgadget, sondern das darunterliegende Splittergadget. (siehe unten)
Zuletzt geändert von Kiffi am 20.02.2009 15:19, insgesamt 1-mal geändert.
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Stichwort: SmartWindowRefresh

Also bei mir flackert nix, und auch alle Items bleiben bestehen :?

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 600, "Fenster", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
 SmartWindowRefresh(0, 1) 
 PanelGadget(0, 0, 0, 800,600)
  For n = 1 To 5
   AddGadgetItem(0, -1, "Panel "+Str(n))
  Next
 
Repeat
 Event = WaitWindowEvent()
 Select Event
  Case #PB_Event_CloseWindow
   End
  Case #PB_Event_Gadget
   Select EventGadget()
    Case 0
   EndSelect
  Case #PB_Event_SizeWindow     
   ResizeGadget(0, 0, 0, WindowWidth(0), WindowHeight(0))
 EndSelect
ForEver
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

STARGÅTE hat geschrieben:Also bei mir flackert nix, und auch alle Items bleiben bestehen :?
gut, hier mal ein wenig komplexeres Beispiel:

Code: Alles auswählen

Enumeration
  #frmMain
  #frmMain_LIG
  #frmMain_PG
  #frmMain_WG
  #frmMain_SG
EndEnumeration

Procedure frmMain_Open()
  
  Protected WindowFlags
  
  WindowFlags | #PB_Window_SystemMenu
  WindowFlags | #PB_Window_ScreenCentered
  WindowFlags | #PB_Window_MinimizeGadget
  WindowFlags | #PB_Window_MaximizeGadget
  WindowFlags | #PB_Window_SizeGadget
  
  If OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 800, 600, "augenkrebs", WindowFlags)
    ListIconGadget(#frmMain_LIG, 0, 0, 0, 0, "Name", 100, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_FullRowSelect)
    PanelGadget(#frmMain_PG, 0, 0, 0, 0) 
      AddGadgetItem(#frmMain_PG, -1, "huhu")
      WebGadget(#frmMain_WG, 0, 0, 300, 400, "")
    CloseGadgetList()
    SplitterGadget(#frmMain_SG, 0, 0, 800, 600, #frmMain_LIG, #frmMain_PG, #PB_Splitter_Vertical)
    SmartWindowRefresh(#frmMain, #True)
  EndIf
  
EndProcedure

frmMain_Open()

Repeat
  
Until WaitWindowEvent()=#PB_Event_CloseWindow
flacker, flacker und mit der richtigen Splitterposition ist das
Webgadget 'weg'.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3055
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Also bei mir flackert irgendwie auch nix, egal wie ich dein Beispiel vergewaltige...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

@Kiffi

Dieses Flackern liegt aber nicht am PanelGadget, sondern am SplitterGadget, denn bei jedem andere Gadget (zB ListIcon oder ScrollAreaGadget) in verbindung mit einem SplitterGadget flackert es genauso ...

Man müsste wenn, dnan also das SplitterGadget verbessern, welches ja die Andere Gadgets "ver-flackert"
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
HeX0R
Beiträge: 3055
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ahh, ich Depp!
O.k. es flackert doch!
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

hm, das Ding hat Probleme beim Neuzeichnen in Echtzeit, allerdings
flackert da nicht nur das PanelGadget bei mir.

Hast du Programme, die das hin bekommen? Wenn dem so ist mal auf API
zurück greifen? Aber wann soll das WebGadget verschwinden?

Ach ja, solches flackern hab ich auch, wenn ich z.B. TextGadgets zu oft
in der Sekunde Text zu weise ... vermultich generiert das SplitGadget zu
viele Events. ... Ok, hab mal nen Delay() eingefügt in die Eventschleife
und so wie das Fenster aufgebaut wird ist ja kein Wunder, dass da alles
Flackert. Das SpliterGadget wird neu gezeichnet und löscht damit alle
Gadgets darüber, dann wird das Gadget darüber gezeichnet und dann wird
das PanelGadget gezeichnet ... das schnell hintereinander ausgeführt kann
nicht klappen. So ist das SpliterGadget tatsächlich (fast) wertlos. Ich hab
mich bis grad noch nie damit beschäftigt ... /:->

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

Enumeration
	#frmMain
	#frmMain_LIG
	#frmMain_PG
	#frmMain_WG
	#frmMain_SG
EndEnumeration

WindowFlags | #PB_Window_SystemMenu
WindowFlags | #PB_Window_ScreenCentered
WindowFlags | #PB_Window_MinimizeGadget
WindowFlags | #PB_Window_MaximizeGadget
WindowFlags | #PB_Window_SizeGadget

OpenWindow(#frmMain,#PB_Ignore,#PB_Ignore,800,600,"augenkrebs",WindowFlags)
PanelGadget(#frmMain_PG, 0,0,0,0)
AddGadgetItem(#frmMain_PG,-1,"huhu")
WebGadget(#frmMain_WG,0,0,300,400,"www.google.de")
CloseGadgetList()

SmartWindowRefresh(0,1)

Repeat
	EventID = WaitWindowEvent()

	If EventID = #PB_Event_SizeWindow
		ResizeGadget(#frmMain_PG,5,5,WindowWidth(0)-10,WindowHeight(0)-10)
		ResizeGadget(#frmMain_WG,5,5,GadgetWidth(#frmMain_PG)-10,GadgetHeight(#frmMain_PG)-35)
	EndIf
Until EventID = #PB_Event_CloseWindow
Das geht schon mal absolut ohne flackern. Allerdings laggt das resizen des WebGadgets etwas. :?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ja das ist zwar marke Eigenbau, allerdings Thema verfehlt ... 6 :mrgreen:
Gefragt ist die Möglichkeit, zwei Gadgets nebeneinander zu setzen. Dafür
braucht es ein Gadget, das Maus-Events bekommt. Mittels der API kann
man dann die Mausposition abfragen und so das SpliterGadget emulieren.
Ich denke, das ImageGadget dürfte da am besten sein.

Viel Spaß beim nachahmen :D
Ich bin mir sicher, dass es funktioniert ... werd es aber jetzt nicht machen
und hoffe, das mir das jemand abnimmt. Für mein Projekt hab ich das
SpliterGadget allerdings vor gesehen, dauert aber noch einige Tage/
Wochen bis ich da drann bin. Müsstet euch halt gedulden.

Ach ja, das WebGadget liegt wohl am IE ... wenn ich das selbe mit dem
Original mache gehts auch nicht 100% flüssig.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@STARGÅTE: Danke für den Hinweis, dass das Splittergadget der eigentliche
Hauptschuldige ist. Ich werde gleich den Subject anpassen.

@All: Danke für Eure (Hintergrund-)Infos (und Anteilnahme :-))
PMV hat geschrieben:Viel Spaß beim nachahmen :D
gibt's doch schon ;-)

-> nxSplitter von srod.

Ich denke, ich werde das hiermit machen.
Ich brauche kein Realtime-Resize, wenn es so sehr flackert.

Danke & Grüße ... Kiffi
a²+b²=mc²
Antworten