Seite 1 von 3

Problem nach ResizeGadget( gelöst

Verfasst: 25.10.2015 17:31
von schleicher
Wenn ich das Window in der Größe ändere und die daran enthaltenen Gadgets resizt werden dann sieht es danach so aus :
Bild
Die alte Position der Gadgets überdeckt die neue Position.

Wenn ich mit der Maus darüberfahre oder bei der Trackbar draufdrücke, dann verschwinden die Artefakte.

Was ist da falsch gelaufen ?

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 18:17
von ts-soft
Schickes Bild, aber wo ist der Code?
Malst Du auf den Bildschirm?, auf den Hintergrund oder Canvas?. Nutzt Du #PB_Any? usw. usw.

Fragen über Fragen, aber ich will Dir die "Würmer" nicht einzeln aus der Nase ziehen :mrgreen:
Es sind zu wenig Infos dar!

Wie immer, ein ausführbarer Code, der das Problem darstellt (max. 200 Zeilen) fehlt.

Gruß
Thomas

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 19:38
von schleicher
Ich habe nun mal einen lauffähigen Auszug aus dem Code gezogen. Hierbei tritt das oben genannte Problem auch auf, wenn man das Fenster mit der Maus größer zieht. Effekt macht sich dann bei der Trackbar(horizontal) bemerkbar.

Code: Alles auswählen

EnableExplicit

Enumeration Window
  #Window_mp3
  
EndEnumeration

Enumeration Gadget
 #Play
  #Stop
  #Pause
  #Vor
  #Rueck
  #String_Titelanzeige
  #Trackbar_Volume
  #String_Time
  #String_Zeit
  #Trackbar_Titel
EndEnumeration


Enumeration Font
  #Font_ID3
EndEnumeration

Declare windowgroesse()

LoadFont(#Font_ID3,"Cooper Std Black", 10, #PB_Font_Italic |  #PB_Font_HighQuality)

Global oldwidth=1000, oldheight=800

OpenWindow(#Window_mp3, 0, 0, oldwidth , oldheight, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
SetWindowColor(#Window_mp3, $321700)
WindowBounds(#Window_mp3, oldwidth, oldheight, #PB_Ignore, #PB_Ignore) 
ButtonGadget(#Rueck, 110, 710, 40, 40, "rueck")
ButtonGadget(#Play, 175, 710, 40, 40, "Play" )
ButtonGadget(#Pause, 240, 710, 40, 40, "Pause", #PB_Button_Toggle)
ButtonGadget(#Stop, 305, 710, 40, 40, "Stop")
ButtonGadget(#Vor, 370, 710, 40, 40, "vor")
TrackBarGadget(#Trackbar_titel, 10, 660, 275, 25, 0,1000 ,#PB_TrackBar_Ticks)
TextGadget(#String_Time, 298, 660,180,25, "00:00:00 / 00:00:00")
SetGadgetColor(#String_Time, #PB_Gadget_FrontColor,$6357FF)
SetGadgetColor(#String_Time, #PB_Gadget_BackColor,0)
TrackBarGadget(#Trackbar_Volume, 490, 660, 20, 100, 0 ,100, #PB_TrackBar_Vertical)
StringGadget(#String_Titelanzeige, 10, 610, 500, 30, "")

Repeat
  
Select WaitWindowEvent()
    
   Case #PB_Event_SizeWindow 
    windowgroesse()
    
  Case #PB_Event_CloseWindow
      End
     
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
      EndSelect
ForEver


Procedure windowgroesse()
  Define width, height, diffwidth, diffheight
  width=WindowWidth(#Window_mp3) 
  height=WindowHeight(#Window_mp3)
  diffwidth=(width-oldwidth)/2
  diffheight=(height-oldheight)/2

  
  If width>oldwidth Or height>oldheight
    ResizeGadget(#Rueck, 110, 710+(diffheight*2), 40, 40)
    ResizeGadget(#Play, 175, 710+(diffheight*2), 40, 40)
    ResizeGadget(#Pause, 240, 710+(diffheight*2), 40, 40)
    ResizeGadget(#Stop, 305, 710+(diffheight*2), 40, 40)
    ResizeGadget(#Vor, 370, 710+(diffheight*2), 40, 40)
    ResizeGadget(#String_Time, 298, 660+(diffheight*2),180,20)
    ResizeGadget(#String_Titelanzeige, 10, 610+(diffheight*2), 500,30)
    ResizeGadget(#Trackbar_Volume, 490, 660+(diffheight*2), 20, 100)
    ResizeGadget(#Trackbar_titel, 10, 660+(diffheight*2), 275, 25)
  Else
    ResizeGadget(#Rueck, 110, 710, 40, 40)
    ResizeGadget(#Play, 175, 710, 40, 40)
    ResizeGadget(#Pause, 240, 710, 40, 40)
    ResizeGadget(#Stop, 305, 710, 40, 40)
    ResizeGadget(#Vor, 370, 710, 40, 40)
    ResizeGadget(#String_Time, 298, 660,180,20)
    ResizeGadget(#String_Titelanzeige, 10, 610, 500,30)
    ResizeGadget(#Trackbar_Volume, 490, 660, 20, 100)
    ResizeGadget(#Trackbar_titel, 10, 660, 275, 25)
    
  EndIf
    
 EndProcedure

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 20:10
von NicTheQuick
Unter Linux gibt es keine Artefakte. Aber ich nehme an, du sprichst von Windows.

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 20:12
von schleicher
Ja richtig. Ich benutze Windows (noch Vista). Linux kann ich nicht testen, da ich es nicht habe.
Ist aber schon komisch, das der Fehler unter Linux nicht auftaucht.
Grafikkarte event. Schuld?

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 20:44
von ts-soft
Unter Windows gibt es auch keine Artefakte.

Aber vielleicht hilft es ja, ein Callback einzubauen, also hinter: StringGadget(#String_Titelanzeige, 10, 610, 500, 30, "") bauste ein:

Code: Alles auswählen

BindEvent(#PB_Event_SizeWindow, @windowgroesse())
ein. Im Eventloop das Ereignis entfernen oder auskommentieren.

Gruß
Thomas

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 21:02
von schleicher
Thomas. Habe es nun genauso gemacht, aber es ändert sich nichts. Artefakte erscheinen, wenn ich das Fenster größer ziehe ode kleiner ziehe.
Ich muss das ganze mal auf einem anderen Rechner testen.

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 21:15
von ts-soft
Laß das mit BindEvent() auf jedem Fall drinne, ist der empfohlene Weg seit 5.30!
PureBasic.chm hat geschrieben:- Geändert: #PB_Event_SizeWindow und #PB_Event_MoveWindow arbeiten nicht mehr in Echtzeit auf Windows, verwenden Sie BindEvent() um Echtzeit-Aktualisierungen zu erhalten. Dies sollte hässliches Flimmern bei Echtzeit-Größenänderungen auf Windows beseitigen.

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 22:29
von mk-soft
Bei Mac OS X 10.11 kein problem,
sowie kein Problem unter VM XP Pro (X86) und VM Ubuntu 14.04 (X64)

Muss wohl GK liegen

Re: Problem nach ResizeGadget(

Verfasst: 25.10.2015 22:57
von schleicher
ts-soft hat geschrieben:Laß das mit BindEvent() auf jedem Fall drinne, ist der empfohlene Weg seit 5.30!
Danke für den Tip. Wird gemacht.

"mk-soft" Danke fürs testen. Ich teste morgen auf anderem Rechner.