Seite 1 von 2

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

Verfasst: 20.02.2009 13:55
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)

Verfasst: 20.02.2009 14:05
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

Verfasst: 20.02.2009 14:21
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

Verfasst: 20.02.2009 14:24
von HeX0R
Also bei mir flackert irgendwie auch nix, egal wie ich dein Beispiel vergewaltige...

Verfasst: 20.02.2009 14:31
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"

Verfasst: 20.02.2009 14:35
von HeX0R
Ahh, ich Depp!
O.k. es flackert doch!

Verfasst: 20.02.2009 14:37
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

Verfasst: 20.02.2009 14:52
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. :?

Verfasst: 20.02.2009 15:04
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

Verfasst: 20.02.2009 15:17
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