Repaint (Flackern) bei Shift, ist das normal?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Repaint (Flackern) bei Shift, ist das normal?

Beitrag von Falko »

Ich wollte diesen Code ins BUG-forum schreiben,
da ich aber nicht weiß, warum es so ist, poste ich den mal hier rein.
Zuvor will ich noch sagen, das das Problem bei 4.60 nicht ist.

Bitte startet mal folgenden Code, verkleinert das Fenster so,
das der Desktop zu sehen ist und wechselt mal mit Mausklick
im leeren Desktopfeld und dann wieder im Windows auf einer der Stringgadgets.
Danach klickt mal eine der Steuerungstasten wie shift. Das gesamte Windows flackert, also
macht ein Repaint, was irgendwie stört. Wechselt man nur zwischen Desktop und Programm,
ist das nur beim ersten Mal. Danach kann man es so oft machen wie man will, dann wird nichts
neu gezeichnet. Nur wenn man danach nur die Shifttaste drückt wird "immer wieder" neu gezeichnet.
Bei der PB-Version 4.60 passiert dieser Effekt überhaupt nicht. Weiß einer warum es ab PB 4.61 so ist?


Hier erstmal der Testcode.

Code: Alles auswählen

; weil ich es inzwischen so gewohnt bin, Variablendefinitionen "Ein"
EnableExplicit
Define quit.i
Define eventid.i
Define a.i

; Also folgendes passiert:
; wenn du das Fenster verläßt, z.B. in das Debuggerfenster klickts und
; dann NUR den Cursor in eines der String-Gadget legst und DANN die
; Shift-Taste drückst, dann flackert es wie die Sau unter 4.61.
; Dann rennen die repaints auch nur so durch das Debugger-Fenster
; Mit 4.60 kein Problem


; Fenster, der Gleichheit halber so wie in den Programmen bei mir üblich, zunächst Invisible
OpenWindow      (0,  0,  0,100, 20,"Testfenster",  #PB_Window_SizeGadget|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize|#PB_Window_Invisible)
; Hintergrundfarbe
SetWindowColor  (0, RGB(100,100,100))
WindowBounds    (0, 800, 600, #PB_Ignore, #PB_Ignore) 
; Menu
CreateMenu      (0, WindowID(0))
MenuTitle       ("Datei")
; Gadget alle auf Scroll-Area
ScrollAreaGadget(0,  0,  0,WindowWidth(0), WindowHeight(0) - MenuHeight(),1580, 810, 20)
    PanelGadget              ( 6,  0,  0,1580,810)
      AddGadgetItem          ( 6, -1, "Eingaben")
        ; Container Zeile hinzufügen
        ContainerGadget      ( 7,  0,  0,500,690, #PB_Container_Flat)
          StringGadget       ( 1, 10, 10,200, 20,"")
          StringGadget       ( 2, 10, 40,200, 20,"")
          StringGadget       ( 3, 10, 70,200, 20,"")
          StringGadget       ( 4, 10,100,200, 20,"")
          StringGadget       ( 5, 10,130,200, 20,"")
          ListIconGadget     ( 8, 10,160,480,200,"blub",100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
          AddGadgetColumn    ( 8, 1,"blub", 80)
          AddGadgetColumn    ( 8, 2,"blub", 80)
          AddGadgetColumn    ( 8, 3,"blub", 80)
          ListIconGadget     ( 9, 10,370,480,200,"blub",100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
          AddGadgetColumn    ( 9, 1,"blub", 80)
          AddGadgetColumn    ( 9, 2,"blub", 80)
          AddGadgetColumn    ( 9, 3,"blub", 80)
          For a = 0 To 100
            AddGadgetItem    ( 8, -1, "Zeile" + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0"))
            AddGadgetItem    ( 9, -1, "Zeile" + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0"))
          Next a
        CloseGadgetList()
        ; Container Zeile hinzufügen
        ContainerGadget      (10,510,  0,500,690, #PB_Container_Flat)
          StringGadget       (11, 10, 10,200, 20,"")
          StringGadget       (12, 10, 40,200, 20,"")
          StringGadget       (13, 10, 70,200, 20,"")
          StringGadget       (14, 10,100,200, 20,"")
          StringGadget       (15, 10,130,200, 20,"")
          ListIconGadget     (16, 10,160,480,200,"blub",100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
          AddGadgetColumn    (16, 1,"blub", 80)
          AddGadgetColumn    (16, 2,"blub", 80)
          AddGadgetColumn    (16, 3,"blub", 80)
          ListIconGadget     (17, 10,370,480,200,"blub",100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
          AddGadgetColumn    (17, 1,"blub", 80)
          AddGadgetColumn    (17, 2,"blub", 80)
          AddGadgetColumn    (17, 3,"blub", 80)
          For a = 0 To 100
            AddGadgetItem    (16, -1, "Zeile" + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0"))
            AddGadgetItem    (17, -1, "Zeile" + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0") + Chr(10) + RSet(Str(a), 4, "0"))
          Next a
        CloseGadgetList()
      AddGadgetItem          (6, -1, "Ausgaben")
    CloseGadgetList()
CloseGadgetList ()
; anzeigen wenn alles aufgebaut ist
HideWindow      (0, 0)
; Schleife
;SetWindowLongPtr_(WindowID(0), #GWL_STYLE, GetWindowLongPtr_(WindowID(0), #GWL_STYLE) | #WS_CLIPCHILDREN | #WS_CLIPSIBLINGS)
Repeat
  EventID=WaitWindowEvent()
  ;...
Until EventID=#PB_Event_CloseWindow

; Ende
End
Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von hjbremer »

Ich kann dies nur bestätigen
z.B. Fenster mit Listicongadget und öffnen eines Messagerequester führt ebenfalls zum Neuzeichnen des Listicongadgets

Habe mir extra die 4.60 Version geladen, da ist es nicht !!!!!!

erst ab 4.61 und auch 4.70 b1

in den meisten Fällen stört es nicht sehr, aber ich kann mir durchaus vorstellen das es manche nervt.
Dann bleibt nur noch 4.60 benutzen

hier ein Testcode

Code: Alles auswählen

Enumeration
 #win1 
 #but1
 #but2
 #lvg1
EndEnumeration

OpenWindow(#win1, 0, 0, 600, 480, "ListIcon Gadget")
  
  ButtonGadget(#but1,  10, 440, 100, 22, "xxx")
  
   
  lvflags = #PB_ListIcon_FullRowSelect
  lvflags | #PB_ListIcon_CheckBoxes 
  lvflags | #PB_ListIcon_MultiSelect
  lvflags | #PB_ListIcon_GridLines
  
  ListIconGadget(#lvg1, 10, 10, 380, 400, "Sp 0", 240, lvflags)
  
   AddGadgetColumn(#lvg1, 1, "Sp 1", 50)    
   AddGadgetColumn(#lvg1, 2, "Sp 2", 190) 
  
  For i = 0 To 36 
    nr$ = LSet(Str(i), 3) 
    tt$ = "Text in Zeile " + nr$ + " in Spalte 0" 
    tt$ + #LF$ + Str(Random(111)) + #LF$ + "Hallo"
    AddGadgetItem(#lvg1, -1, tt$)               
  Next 
  
Repeat: event = WaitWindowEvent() 

   If event = #PB_Event_Gadget
      Select EventGadget()
         Case #but1
            MessageRequester("xxx", "YYYYYY") 
         
      EndSelect     
   EndIf 

Until event = #PB_Event_CloseWindow 

End 
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
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: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von ts-soft »

Dann bin ich wohl doch Blind, kann das Problem nicht sehen, hab jetzt alles ausprobiert.
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von Falko »

Bei dem letzten Beispiel wenn man links den Button
XXX anklickt, kommt eine Messagebox und wenn man nun zwischen
beiden hin und her klickt, also jeweils das Windows und die Messagebox abwechselnd klickt flackert die Messagebox mehrfach auf.

Bei dem obigen Beispiel reagiert beim Wechsel zwischen einmal Klick auf dem Desktop und dann wieder im Fenster einmal ein kurze Flackern für den Aufbau
des Windows, aber wenn man dann nochmal die Shifttaste drückt, kommt wieder
ein Flackern. Schließlich braucht man die Shifttasste für Großschrift in den Stringgadgets.



Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
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: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von NicTheQuick »

Unter Linux gibt es keine Flackerprobleme, dafür sieht das Fenster nach dem Öffnen aber so aus: Klick mich

Achja, und das Menü öffnet sich auch nicht. /:->
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: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von ts-soft »

Falko hat geschrieben:Bei dem letzten Beispiel wenn man links den Button
XXX anklickt, kommt eine Messagebox und wenn man nun zwischen
beiden hin und her klickt, also jeweils das Windows und die Messagebox abwechselnd klickt flackert die Messagebox mehrfach auf.
Das ist ja auch normal bei Modalen Dialogfenstern :lol:
Was hat das mit PB zu tun. Passiert auch mit älteren Version.

Und passiert auch per API:

Code: Alles auswählen

 Enumeration
 #win1
 #but1
 #but2
 #lvg1
EndEnumeration

OpenWindow(#win1, 0, 0, 600, 480, "ListIcon Gadget")
 
  ButtonGadget(#but1,  10, 440, 100, 22, "xxx")
 
   
  lvflags = #PB_ListIcon_FullRowSelect
  lvflags | #PB_ListIcon_CheckBoxes
  lvflags | #PB_ListIcon_MultiSelect
  lvflags | #PB_ListIcon_GridLines
 
  ListIconGadget(#lvg1, 10, 10, 380, 400, "Sp 0", 240, lvflags)
 
   AddGadgetColumn(#lvg1, 1, "Sp 1", 50)   
   AddGadgetColumn(#lvg1, 2, "Sp 2", 190)
 
  For i = 0 To 36
    nr$ = LSet(Str(i), 3)
    tt$ = "Text in Zeile " + nr$ + " in Spalte 0"
    tt$ + #LF$ + Str(Random(111)) + #LF$ + "Hallo"
    AddGadgetItem(#lvg1, -1, tt$)               
  Next
 
Repeat: event = WaitWindowEvent()

   If event = #PB_Event_Gadget
      Select EventGadget()
         Case #but1
            ;MessageRequester("xxx", "YYYYYY")
            MessageBox_(WindowID(#win1), @"xxx", @"YYYYYY", 0)
         
      EndSelect     
   EndIf

Until event = #PB_Event_CloseWindow

End
Weil es eben normales Verhalten ist, oder ich übersehe immer noch etwas?
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
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von Falko »

Ok, das meinte ich nicht. Aber ist das deiner Meinung nach auch im ersten Beispiel bei allen PB-Versionen gleich? /:->

Bei 4.6 kommt bei der Shifttaste nach Wechsel zwischen Desktop und einem Stringgadget kein kurzes Flackern. Ab Version 4.61 und 4.7 schon.
Vielleicht ist dein Rechner auch schneller als meiner, das du das nicht
siehst :lol:

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von DarkDragon »

Am Repaint-Event wurde tatsächlich etwas verändert:
http://www.purebasic.fr/english/viewtop ... 96#p386596

@ts-soft: das ListIconGadget scheint bei hjbremer zu flackern, nicht die MessageBox.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
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: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von ts-soft »

Okay, zur MessageBox. In früheren Versionen hat PB das hWnd nicht übergeben, sondern einfach nur 0. Das war verkehrt und ist
jetzt richtig, zumindest unter Windows. Man kann aber die API nutzen und statt hWnd einfach 0 angeben, dann hat man das
alte, aber falsche Verhalten wieder :mrgreen:

Das Flackern mit Shift hab ich jetzt auch gesehen, das ist wirklich merkwürdig und sollte man vielleicht mal im engl. Forum melden.
Aber das Beispielfenster besser verkleinern, nicht das man erst umschalten muß.
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
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: Repaint (Flackern) bei Shift, ist das normal?

Beitrag von ts-soft »

DarkDragon hat geschrieben:@ts-soft: das ListIconGadget scheint bei hjbremer zu flackern, nicht die MessageBox.
Bei mir flackert nur die MessageBox, vielleicht gibt er noch alle CompilerOptionen an, damit man das nachvollziehen kann.
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
Antworten