Problem nach ResizeGadget( gelöst

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Problem nach ResizeGadget( gelöst

Beitrag 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 ?
Zuletzt geändert von schleicher am 11.11.2015 19:43, insgesamt 1-mal geändert.
Purebasic 5.51
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

Re: Problem nach ResizeGadget(

Beitrag 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
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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem nach ResizeGadget(

Beitrag 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
Purebasic 5.51
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Problem nach ResizeGadget(

Beitrag von NicTheQuick »

Unter Linux gibt es keine Artefakte. Aber ich nehme an, du sprichst von Windows.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem nach ResizeGadget(

Beitrag 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?
Purebasic 5.51
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

Re: Problem nach ResizeGadget(

Beitrag 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
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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem nach ResizeGadget(

Beitrag 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.
Purebasic 5.51
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

Re: Problem nach ResizeGadget(

Beitrag 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.
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
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Problem nach ResizeGadget(

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem nach ResizeGadget(

Beitrag 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.
Purebasic 5.51
Antworten