[Resolu]DrawFocusRect_() dans un ScrollArea

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

[Resolu]DrawFocusRect_() dans un ScrollArea

Message par lionel_om »

Bonjour je voudrais pouvoir faire apparaitre un rectangle de sélection dans un ScrollArea, comme on peut le faire sur le background d'une fenêtre.
J'ai récupérer un code sur un forum qui permet de dessiner ce rectangle, mais je n'arrive pas à sélectionner depuis mon ScrollArea. En regardant ce qui passe dans le CallBack,, je ne vois que des evénements non récupérables... :?
Si quelqu'un a une solution, je suis fort preneur !!!

Voilà le code en question :

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2914&highlight=
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 24. November 2003
; OS: Windows
; Demo: No

; 
; by Danilo, 24.11.2003 - german forum 
; 
Procedure OnMouseSelection(x,y,width,height) 
  Debug "-----" 
  Debug "Selected:" 
  Debug "X     : "+Str(x) 
  Debug "Y     : "+Str(y) 
  Debug "Width : "+Str(width) 
  Debug "Height: "+Str(height) 
EndProcedure 


Procedure DrawMouseSelector(hwnd) 
  Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX 
  Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY 
  Shared WindowProc_MouseSelectRect.RECT 

  If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX 
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectLastX 
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectStartX 
  Else 
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectStartX 
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectLastX 
  EndIf 
  If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY 
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectLastY 
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY 
  Else 
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectStartY 
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY 
  EndIf 

  hdc = GetDC_(hwnd) 
    DrawFocusRect_(hdc,@WindowProc_MouseSelectRect) 
  ReleaseDC_(hwnd,hdc) 
  ;UpdateWindow_(hWnd) ; Win9x fix? 
EndProcedure 


Procedure WindowProc(hwnd,msg,wParam,lParam) 
  Shared WindowProc_MouseSelect 
  Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX 
  Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY 
  Shared WindowProc_MouseSelectRect.RECT 

  Select msg 
    Case #WM_LBUTTONDOWN 
      WindowProc_MouseSelect  = 1 
      WindowProc_MouseSelectStartX = lParam&$FFFF 
      WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF 
      GetClientRect_(hwnd,winrect.RECT) 
      MapWindowPoints_(hwnd,0,winrect,2) 
      ClipCursor_(winrect) 
    Case #WM_LBUTTONUP 
      If WindowProc_MouseSelect > 1 
        DrawMouseSelector(hwnd) 
        If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom 
          OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top) 
          SetCapture_(0) 
        EndIf 
      EndIf 
      ClipCursor_(0) 
      WindowProc_MouseSelect = 0 
    Case #WM_MOUSEMOVE 
      If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON 
        If WindowProc_MouseSelect > 1 
          DrawMouseSelector(hwnd) 
        Else 
          WindowProc_MouseSelect + 1 
        EndIf 
        WindowProc_MouseSelectLastX = lParam&$FFFF 
        WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF 
        DrawMouseSelector(hwnd) 
        SetCapture_(hwnd) 
      EndIf 
  EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 



OpenWindow(0,0,0,400,400,"Mega Mouse Selector",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible) 
  
  HideWindow(0,0)
  CreateGadgetList(WindowID(0))
  StringGadget(0, 10,10, 50, 20, "coucou")
  ButtonGadget(1, 100,100, 100,20, "ca va ?")
  ScrollAreaGadget(2, 205, 205, 180, 180, 800, 400, 30)
    SetWindowCallback(@WindowProc()) 
    
Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
      End 
  EndSelect 
ForEver
Merci d'avance.
Lionel
Dernière modification par lionel_om le mer. 05/mars/2008 23:54, modifié 1 fois.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je pense qu'il faut modifier le callback du gadget et non celui de la fenêtre.

mais avec mon essai, ca marche pas :?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Bah justement, je check dans le callback les events qui arrivent et qd je clique j'ai le mm code que quand je déplace la souris. Donc je ne peux rien en faire...

Lio :?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Il faut sous-classer le scrollarea et réagir à #WM_PARENTNOTIFY.

Petit test :

Code : Tout sélectionner

Procedure OnMouseSelection(x,y,width,height) 
  Debug "-----" 
  Debug "Selected:" 
  Debug "X     : "+Str(x) 
  Debug "Y     : "+Str(y) 
  Debug "Width : "+Str(width) 
  Debug "Height: "+Str(height) 
EndProcedure 

Procedure DrawMouseSelector(hwnd) 
  Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX 
  Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY 
  Shared WindowProc_MouseSelectRect.RECT 
  
  If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX 
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectLastX 
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectStartX 
  Else 
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectStartX 
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectLastX 
  EndIf 
  If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY 
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectLastY 
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY 
  Else 
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectStartY 
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY 
  EndIf 
  
  hdc = GetDC_(hwnd) 
  DrawFocusRect_(hdc,@WindowProc_MouseSelectRect) 
  ReleaseDC_(hwnd,hdc) 
  ;UpdateWindow_(hWnd) ; Win9x fix? 
EndProcedure 


Procedure WindowProc(hwnd,msg,wParam,lParam) 
  Shared WindowProc_MouseSelect 
  Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX 
  Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY 
  Shared WindowProc_MouseSelectRect.RECT 
  
  Select msg 
    Case #WM_LBUTTONDOWN 
      WindowProc_MouseSelect  = 1 
      WindowProc_MouseSelectStartX = lParam&$FFFF 
      WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF 
      GetClientRect_(hwnd,winrect.RECT) 
      MapWindowPoints_(hwnd,0,winrect,2) 
      ClipCursor_(winrect) 
    Case #WM_LBUTTONUP 
      If WindowProc_MouseSelect > 1 
        DrawMouseSelector(hwnd) 
        If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom 
          OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top) 
          SetCapture_(0) 
        EndIf 
      EndIf 
      ClipCursor_(0) 
      WindowProc_MouseSelect = 0 
    Case #WM_MOUSEMOVE 
      If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON 
        If WindowProc_MouseSelect > 1 
          DrawMouseSelector(hwnd) 
        Else 
          WindowProc_MouseSelect + 1 
        EndIf 
        WindowProc_MouseSelectLastX = lParam&$FFFF 
        WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF 
        DrawMouseSelector(hwnd) 
        SetCapture_(hwnd) 
      EndIf 
  EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 


Procedure MyProc(hwnd,msg,wParam,lParam) 
  Shared WindowProc_MouseSelect 
  Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX 
  Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY 
  Shared WindowProc_MouseSelectRect.RECT 
  Shared OldCallback
  ReturnValue = CallWindowProc_(OldCallback, hwnd, msg,wParam,lParam)
  If msg = #WM_PARENTNOTIFY
    fwEvent = wParam & $FFFF
    Select fwEvent
      Case #WM_LBUTTONDOWN 
        WindowProc_MouseSelect  = 1 
        WindowProc_MouseSelectStartX = lParam&$FFFF 
        WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF 
        GetClientRect_(hwnd,winrect.RECT) 
        MapWindowPoints_(hwnd,0,winrect,2) 
        ClipCursor_(winrect) 
      Case #WM_LBUTTONUP 
        If WindowProc_MouseSelect > 1 
          DrawMouseSelector(hwnd) 
          If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom 
            OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top) 
            SetCapture_(0) 
          EndIf 
        EndIf 
        ClipCursor_(0) 
        WindowProc_MouseSelect = 0 
    EndSelect 
  ElseIf msg = #WM_MOUSEMOVE 
    If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON 
      If WindowProc_MouseSelect > 1 
        DrawMouseSelector(hwnd) 
      Else 
        WindowProc_MouseSelect + 1 
      EndIf 
      WindowProc_MouseSelectLastX = lParam&$FFFF 
      WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF 
      DrawMouseSelector(hwnd) 
      SetCapture_(hwnd) 
    EndIf 
  EndIf
  
  ProcedureReturn ReturnValue
EndProcedure


OpenWindow(0,0,0,400,400,"Mega Mouse Selector",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible) 
  
HideWindow(0,0) 
CreateGadgetList(WindowID(0)) 
StringGadget(0, 10,10, 50, 20, "coucou") 
ButtonGadget(1, 100,100, 100,20, "ca va ?") 
ScrollAreaGadget(2, 205, 205, 180, 180, 800, 400, 30) 
  OldCallback = SetWindowLong_(GadgetID(2), #GWL_WNDPROC, @MyProc())
  SetWindowCallback(@WindowProc()) 
  
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_Event_CloseWindow 
        End 
    EndSelect 
  ForEver
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

il y a un probleme, lorsque l'on déplace la zone avec le curseur, le premier coin est en dehors de la zone visible....

pat
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Rajoute Global OldCallback
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

non , toujours pareil, ça vient peut-être de la 4.20b2 ?

pas grave...

pat
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

On peut réduire la procédure MyProc(...):

Code : Tout sélectionner

Procedure MyProc(hwnd,msg,wParam,lParam)

  ReturnValue = CallWindowProc_(OldCallback, hwnd, msg,wParam,lParam)
  If msg = #WM_PARENTNOTIFY
    fwEvent = wParam & $FFFF
    Debug msg
    Select fwEvent
      Case #WM_LBUTTONDOWN,#WM_LBUTTONUP,#WM_MOUSEMOVE
      WindowProc(hwnd,fwEvent,0,lParam)
    EndSelect 
  EndIf
 
  ProcedureReturn ReturnValue
EndProcedure
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

nico a écrit :On peut réduire la procédure MyProc(...):

Code : Tout sélectionner

Procedure MyProc(hwnd,msg,wParam,lParam)

  ReturnValue = CallWindowProc_(OldCallback, hwnd, msg,wParam,lParam)
  If msg = #WM_PARENTNOTIFY
    fwEvent = wParam & $FFFF
    Debug msg
    Select fwEvent
      Case #WM_LBUTTONDOWN,#WM_LBUTTONUP,#WM_MOUSEMOVE
      WindowProc(hwnd,fwEvent,0,lParam)
    EndSelect 
  EndIf
 
  ProcedureReturn ReturnValue
EndProcedure
Ça ne marche pas bien ou alors c'est que je suis toujours à PB 4.10
Mais j'ai pu tout de même la simplifier !!!




Merci à vous tous, grâce à vous mon problème est presque résolu.
En fait mon but était de pouvoir sélectionner des objets (gadgets) dans mon ScrollArea, avec la possibilité de scroller bien entendu.

Voilà où j'en suis :

Code : Tout sélectionner

Global ScrollID.l

Procedure OnMouseSelection(x,y,width,height)
  ProcedureReturn 
  Debug "-----"
  Debug "Selected:"
  Debug "X     : "+Str(x)
  Debug "Y     : "+Str(y)
  Debug "Width : "+Str(width)
  Debug "Height: "+Str(height)
EndProcedure

Procedure DrawMouseSelector(hwnd)
  Shared WindowProc_MouseSelectStart.POINT, WindowProc_MouseSelectLast.POINT
  Shared WindowProc_MouseSelectRect.RECT
  
  If WindowProc_MouseSelectStart\x > WindowProc_MouseSelectLast\x
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectLast\x
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectStart\x
  Else
    WindowProc_MouseSelectRect\left   = WindowProc_MouseSelectStart\x
    WindowProc_MouseSelectRect\right  = WindowProc_MouseSelectLast\x
  EndIf
  If WindowProc_MouseSelectStart\y > WindowProc_MouseSelectLast\y
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectLast\y
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStart\y
  Else
    WindowProc_MouseSelectRect\top    = WindowProc_MouseSelectStart\y
    WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLast\y
  EndIf
  
  hdc = GetDC_(hwnd)
  DrawFocusRect_(hdc,@WindowProc_MouseSelectRect)
  ReleaseDC_(hwnd,hdc)
  ;UpdateWindow_(hWnd) ; Win9x fix?
EndProcedure


Procedure PointInGadgetArea(GadgetID, *Pos.POINT)
  If GadgetX(GadgetID) > *Pos\x Or GadgetWidth(GadgetID)+GadgetX(GadgetID) < *Pos\x Or GadgetY(GadgetID) > *Pos\y Or GadgetHeight(GadgetID)+GadgetY(GadgetID) < *Pos\y
    ProcedureReturn #False
  EndIf
  ProcedureReturn #True
EndProcedure

Procedure Thread_ScrollAreaGadget(Direction)
  Shared hWin
  Repeat
    ;DrawMouseSelector(hWin)
    Debug "Send scroll event"
    SendMessage_(ScrollID, #WM_VSCROLL, Direction, 0)
    ;DrawMouseSelector(hWin)
    Delay(100)
  ForEver
EndProcedure


Procedure WindowProc(hwnd,msg,wParam,lParam)
  #EdgeSize_ScrollArea = 10
  Shared WindowProc_MouseSelect
  Shared WindowProc_MouseSelectStart.POINT, WindowProc_MouseSelectLast.POINT
  Shared WindowProc_MouseSelectRect.RECT
  Shared *ThreadScrool
  
  Select msg
    Case #WM_LBUTTONDOWN
      WindowProc_MouseSelectStart\x = lParam&$FFFF
      WindowProc_MouseSelectStart\y = (lParam>>16)&$FFFF
      If PointInGadgetArea(2, WindowProc_MouseSelectStart)
        WindowProc_MouseSelect  = 1
        GetClientRect_(hwnd,winrect.RECT)
        MapWindowPoints_(hwnd,0,winrect,2)
        ClipCursor_(winrect)
      EndIf
    Case #WM_LBUTTONUP
      If WindowProc_MouseSelect > 1
        DrawMouseSelector(hwnd)
        If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom
          OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top)
          SetCapture_(#Null)
        EndIf
        If *ThreadScrool
          KillThread(*ThreadScrool)
          *ThreadScrool = #Null
        EndIf
        Debug WindowProc_MouseSelectLast\y
      EndIf
      ClipCursor_(#Null)
      WindowProc_MouseSelect = 0
    Case #WM_MOUSEMOVE
      If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON
        If WindowProc_MouseSelect > 1
          DrawMouseSelector(hwnd)
        Else
          WindowProc_MouseSelect + 1
        EndIf
        WindowProc_MouseSelectLast\x = lParam&$FFFF
        WindowProc_MouseSelectLast\y = (lParam>>16)&$FFFF
        DrawMouseSelector(hwnd)
        SetCapture_(hwnd)
        If GadgetHeight(2) + GetGadgetAttribute(2, #PB_ScrollArea_Y) - #EdgeSize_ScrollArea < WindowProc_MouseSelectLast\y
          If *ThreadScrool = #Null
            *ThreadScrool = CreateThread(@Thread_ScrollAreaGadget(), #SB_LINEDOWN)
          EndIf
        ElseIf GetGadgetAttribute(2, #PB_ScrollArea_Y) + #EdgeSize_ScrollArea > WindowProc_MouseSelectLast\y
          If *ThreadScrool = #Null
            *ThreadScrool = CreateThread(@Thread_ScrollAreaGadget(), #SB_LINEUP)
          EndIf
        ElseIf *ThreadScrool
          KillThread(*ThreadScrool)
          *ThreadScrool = #Null
        EndIf
        If *ThreadScrool
          Debug WindowProc_MouseSelectLast\y
        EndIf
      EndIf
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure




Procedure MyProc(hwnd,msg,wParam,lParam)
  Shared WindowProc_MouseSelect
  Shared WindowProc_MouseSelectStart.POINT, WindowProc_MouseSelectLast.POINT
  Shared WindowProc_MouseSelectRect.RECT
  Shared OldCallback
  ReturnValue = CallWindowProc_(OldCallback, hwnd, msg,wParam,lParam)
  If msg = #WM_PARENTNOTIFY
    fwEvent = wParam & $FFFF
    Select fwEvent
      Case #WM_LBUTTONDOWN
        WindowProc_MouseSelect  = 1
        WindowProc_MouseSelectStart\x = lParam&$FFFF + GetGadgetAttribute(2, #PB_ScrollArea_X)
        WindowProc_MouseSelectStart\y = (lParam>>16)&$FFFF + GetGadgetAttribute(2, #PB_ScrollArea_Y)
        GetClientRect_(hwnd,winrect.RECT)
        MapWindowPoints_(hwnd,0,winrect,2)
        ClipCursor_(winrect)
      Case #WM_LBUTTONUP
        If WindowProc_MouseSelect > 1
          DrawMouseSelector(hwnd)
          If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom
            OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top)
            SetCapture_(#Null)
          EndIf
        EndIf
        ClipCursor_(#Null)
        WindowProc_MouseSelect = 0
    EndSelect

  EndIf
  
  ProcedureReturn ReturnValue
EndProcedure


hWin = OpenWindow(0,0,0,400,400,"Mega Mouse Selector",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
 
HideWindow(0,0)
CreateGadgetList(WindowID(0))
StringGadget(0, 10,10, 50, 20, "coucou")
ButtonGadget(1, 100,100, 100,20, "ca va ?")
ScrollID = ScrollAreaGadget(2, 10, 150, 380, 230, 350, 800, 30)
OldCallback = SetWindowLong_(GadgetID(2), #GWL_WNDPROC, @MyProc())
SetWindowCallback(@WindowProc())

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Lorsque l'on sélectionne qqchose et que l'on frôle le bord haut au bas du ScrollArea, l'ascenseur monte/descend et la sélection doit suivre la souris.
(A ce niveau il y avait un problème de Win/PB pour la position initiale : il fallait rajouter la position de l'ascenseur, alors que leur de l'évent de MouseMove non. Bizarre ! Bref).
Mais là la zone de sélection ne s'efface pas correctement.

Pourtant la fonction DrawFocusRect_() (ici appelée par DrawMouseSelector()) se charge bien d'afficher la zone, puis de l'effacer si on l'affiche par dessus ?
Il semble pourtant que les appels à DrawMouseSelector() soit bien placés.

Merci de votre aide.
Lionel
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

En décommentant la ligne

Code : Tout sélectionner

UpdateWindow_(hwnd)
Cela semble marcher. J'avais eu des freezes de fenêtres, mais je n'en ai plus. Si quelqu'un peu m'aider à trouver la solution sans décommenter la ligne ci-dessus (36°), sinon je ferais avec cette méthode...

Lionel :roll:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre