Fenster bewegen+Scrollarea

Anfängerfragen zum Programmieren mit PureBasic.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Fenster bewegen+Scrollarea

Beitrag von lite »

Hallo !!
Mir ist was merkwürdiges aufgefallen.
Wen ich das Fenster per "bewege mich" in die Y Koordinate bewege,
funktioniert der Horizontal-Scrollbalken des Scrollarea-Gadget nicht mehr.
Erst wen ich das Fenster in die alte Position zurück schiebe, klappt es wieder.
Sollte es nicht überall gehen ?

Hier das Beispiel:

Code: Alles auswählen

hwnd = OpenWindow(0, 200, 200, 300, 300, "...", #PB_Window_BorderLess) 
TextGadget(1, 50, 50, 200, 50, "bewege mich",#PB_Text_Center ) 
SetGadgetColor(1,#PB_Gadget_BackColor,$ffffff)
    
ScrollAreaGadget(3, 10, 150, 290,120, 375, 155, 30)
 ButtonGadget  (4, 10, 10, 230, 30,"Button 1")
 TextGadget    (7,30,90, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      End 
    Case #WM_LBUTTONDOWN 
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        SendMessage_(hwnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
      EndIf 
  EndSelect 
ForEver
Lite
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Fenster bewegen+Scrollarea

Beitrag von Andesdaf »

kann ich nicht reproduzieren.

Habe getestet mit PB 4.61, PB 5 Beta 2 und PB 5 (x86/x64) unter Windows 7.
Win11 x64 | PB 6.20
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Fenster bewegen+Scrollarea

Beitrag von lite »

Andesdaf hat geschrieben:kann ich nicht reproduzieren.

Habe getestet mit PB 4.61, PB 5 Beta 2 und PB 5 (x86/x64) unter Windows 7.
Stimmt, auf Windows7 tritt dieser Fehler nicht auf.
Leider bei Windows XP. Hat jemand noch XP ? (VirtualMachine)

Lite
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Fenster bewegen+Scrollarea

Beitrag von matbal »

lite hat geschrieben:Leider bei Windows XP. Hat jemand noch XP ?
Ich benutze auch noch XP. Und bei mir gibt es kein Problem...
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fenster bewegen+Scrollarea

Beitrag von bobobo »

Xp(32) sp3 realmaschine

ist nachvollziehbar (manchmal)

das eventhandling ist da irgendwie (unerfindlich) unsauber

ich habe das mal mit einem Callback umgecodet
was erst nicht geholfen hat.
Aber mit einem blöden Zusatz tritt der Effekt dann nicht mehr auf.
Ich habe das angewendet auf den UrsprungsCode mit folgendem Ergebnis.
So tucht der Effekt nicht mehr auf.
Ab das andere Auswirkungen hat, kann ich nicht beurteilen.

Code: Alles auswählen

hwnd = OpenWindow(0, 200, 200, 300, 300, "...", #PB_Window_BorderLess) 
TextGadget(1, 50, 50, 200, 50, "bewege mich",#PB_Text_Center ) 
SetGadgetColor(1,#PB_Gadget_BackColor,$ffffff)
    
ScrollAreaGadget(3, 10, 150, 290,120, 375, 155, 30)
 ButtonGadget  (4, 10, 10, 230, 30,"Button 1")
 TextGadget    (7,30,90, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      End 
    Case #WM_LBUTTONDOWN 
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        SendMessage_(hwnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
        While WindowEvent():Wend ;Sehr "komisch" !!
      EndIf 
  EndSelect 
ForEver
Hier der Code mit Callback

Code: Alles auswählen

Procedure WinCallback(WindowID, Message, wParam, lParam)
    If message=#WM_LBUTTONDOWN 
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        SendMessage_(Windowid, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
        While WindowEvent():Wend ;Nur mit diesem blöden Zusatz tritt der Effekt nicht auf
      EndIf 
    EndIf
    Result = #PB_ProcessPureBasicEvents
    ProcedureReturn Result
  EndProcedure

hwnd = OpenWindow(0, 200, 200, 300, 300, "...", #PB_Window_BorderLess) 
TextGadget(1, 50, 50, 200, 50, "bewege mich",#PB_Text_Center ) 
SetGadgetColor(1,#PB_Gadget_BackColor,$ffffff)
    
ScrollAreaGadget(3, 10, 150, 290,120, 375, 155, 30)
 ButtonGadget  (4, 10, 10, 230, 30,"Button 1")
 TextGadget    (7,30,90, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()
SetWindowCallback(@WinCallback())    
Repeat 
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_CloseWindow 
      End 
    
  EndSelect 
ForEver
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Fenster bewegen+Scrollarea

Beitrag von lite »

Hallo

Danke für deine Hilfe, der Effekt ist immernoch.
Mitterlweile hab ich viele Tests gemacht.
Zuerst dachte ich, es liegt am Rechner, dann Rechner neu formatiert, und installiert.
Grafikkarten-Treiber aktualisiert. Es brachte alles nix. Erfolg gleich null.
Der Fehler tritt bei mir auf, wen ich ich das Fenster unter die Taskbarleiste bewege,
und 2/3 des Desktops wieder nach oben scrolle.
Was ich herausgefunden hab ist, wen ich das "#PB_Window_BorderLess" weg lasse,
läuft alles ohne Probleme, mit zickt es rum.

Dein Code brachte bei mir keine spürbare Verbesserung.

http://msdn.microsoft.com/de-de/library/bb978977.aspx

Code: Alles auswählen

      DLL = OpenLibrary(#PB_Any, "User32")
      CallFunction(DLL, "ReleaseCapture")
      CloseLibrary(DLL)
brachte auch nix
Güße
Lite
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fenster bewegen+Scrollarea

Beitrag von bobobo »

ist hier auch so
Beheben kann ich das nicht.

Meine Lösung wäre nun diese :mrgreen:

Code: Alles auswählen

hwnd = OpenWindow(0, 200, 200, 300, 300, "...", #PB_Window_BorderLess) 
TextGadget(1, 50, 50, 200, 50, "bewege mich",#PB_Text_Center ) 
SetGadgetColor(1,#PB_Gadget_BackColor,$ffffff)
    
ScrollAreaGadget(3, 10, 150, 290,120, 375, 155, 30)
 ButtonGadget  (4, 10, 10, 230, 30,"Button 1")
 TextGadget    (7,30,90, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()
tx.s="nee .lieber nicht."+#CRLF$
tx.s+"sonst geht die Welt unter"+#CRLF$
tx.s+"und auf temperaturen von über 1000° (IM SCHATTEN!) habe ich kein Bock"

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      End 
    Case #WM_LBUTTONDOWN 
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        
        SetGadgetText(1,tx);SendMessage_(hwnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
      EndIf 
    Case #WM_MOUSEMOVE
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        SetGadgetText(1,"bewege mich")
      EndIf 
  EndSelect 
ForEver
frohes Fest
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Fenster bewegen+Scrollarea

Beitrag von matbal »

Ich wollte jetzt auch mal herausfinden, warum der Code bei mir fehlerlos läuft.

Es scheint mit dem Skin zusammenzuhängen. Der Fehler tritt bei mir nur auf, wenn ich den XP-Stile einschalte. Mit der von mir bevorzugten klassischen Darstellung gab es kein einziges Mal das Scrollproblem.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Fenster bewegen+Scrollarea

Beitrag von lite »

Hallo

Schade das keiner eine Lösung zu diesem Problem hat.
Hier ein Video zu diesem Fehler.

http://www.top-pe.de/LSp/test/dev/scrollarea.avi

Grüße

Lite
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Fenster bewegen+Scrollarea

Beitrag von matbal »

übrigens passiert das gleiche, wenn man das Fenster rechts aus dem Bildschirm schiebt und wieder zurückholt. Dann ist es der senkrechte Scrollbalken, den man nicht mehr bewegen kann.

Mit dieser kleinen Änderung funktioniert es bei mir richtig...

Code: Alles auswählen

hwnd = OpenWindow(0, 200, 200, 300, 300, "...", #PB_Window_BorderLess) 
TextGadget(1, 50, 50, 200, 50, "bewege mich",#PB_Text_Center ) 
SetGadgetColor(1,#PB_Gadget_BackColor,$ffffff)
    
ScrollAreaGadget(3, 10, 150, 290,120, 375, 155, 30)
 ButtonGadget  (4, 10, 10, 230, 30,"Button 1")
 TextGadget    (7,30,90, 230, 20,"This is the content of a ScrollAreaGadget!",#PB_Text_Right)
CloseGadgetList()

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      End 
    Case #WM_LBUTTONDOWN 
      If WindowMouseX(0) >= 50 And WindowMouseX(0) <= 250 And WindowMouseY(0) >= 50 And WindowMouseY(0) <= 100 
        SendMessage_(hwnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
        RedrawWindow_( hWnd, 0, 0, #RDW_ERASE | #RDW_INVALIDATE | #RDW_ALLCHILDREN)
      EndIf 

  EndSelect 
ForEver
Antworten