Seite 1 von 2

Fenster bewegen+Scrollarea

Verfasst: 19.12.2012 18:04
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

Re: Fenster bewegen+Scrollarea

Verfasst: 19.12.2012 19:44
von Andesdaf
kann ich nicht reproduzieren.

Habe getestet mit PB 4.61, PB 5 Beta 2 und PB 5 (x86/x64) unter Windows 7.

Re: Fenster bewegen+Scrollarea

Verfasst: 19.12.2012 20:01
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

Re: Fenster bewegen+Scrollarea

Verfasst: 19.12.2012 23:11
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...

Re: Fenster bewegen+Scrollarea

Verfasst: 20.12.2012 13:29
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

Re: Fenster bewegen+Scrollarea

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

Re: Fenster bewegen+Scrollarea

Verfasst: 21.12.2012 14:02
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

Re: Fenster bewegen+Scrollarea

Verfasst: 21.12.2012 17:24
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.

Re: Fenster bewegen+Scrollarea

Verfasst: 02.01.2013 20:59
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

Re: Fenster bewegen+Scrollarea

Verfasst: 03.01.2013 12:23
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