Page 1 sur 1

Empêcher le déplacement d'une fenêtre

Publié : jeu. 30/avr./2009 12:34
par Claude OI
Bonjour à tous,

Je vais certainement poser la question la plus bête de l'année, mais tant pis.

Je prépare une petite application de répertoire qui fonctionne sur le principe d'une fenêtre principale qui sert de menu et de plusieurs fenêtres secondaires incluses dans la première, que j'affiche à tour de rôle et qui sont les formulaires (création, modification, consultation etc...)

Pas de probleme pour gérer tout cela sauf que si je déplace la fenêtre principale, la fenêtre secondaire active à ce moment ne suit pas le mouvement.

J'ai essayé à grand renfort de ResizeWindow, EventWindow, #PB_Event_MoveWindow et j'en passe et des meilleurs. Juste avant ce message qq tentativespar rechercher n'ont rien donné non plus.

L'un de vous pourrait-il me mettre sur la piste.

Question liée à la précédente: est-il possible d'empêcher tous déplacement d'une fenêtre?

Merci d'avance et bon grand WE du 1er mai à tous

Re: Empêcher le déplacement d'une fenêtre

Publié : jeu. 30/avr./2009 12:55
par gnozal
Claude OI a écrit :... est-il possible d'empêcher tous déplacement d'une fenêtre?
Oui.
Exemple :

Code : Tout sélectionner

Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
  Protected *WindowPos.WINDOWPOS, Result
  Result = #PB_ProcessPureBasicEvents 
  If uMsg = #WM_WINDOWPOSCHANGING
    *WindowPos = lParam
    *WindowPos\flags = *WindowPos\flags | #SWP_NOSIZE | #SWP_NOMOVE
    Result = #False
  EndIf
  ProcedureReturn Result
EndProcedure 
If OpenWindow(0, 0, 0, 200, 100, "Fenêtre immobile", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered) 
  SetWindowCallback(@WinCallback())
  Repeat 
    Select WaitWindowEvent() 
      Case #PB_Event_CloseWindow 
        End 
    EndSelect 
  ForEver 
EndIf

Publié : jeu. 30/avr./2009 12:56
par MLD
Regarde sur le forum, en faisant une recherche fenêtre modale

Publié : jeu. 30/avr./2009 13:06
par Backup
........

Publié : jeu. 30/avr./2009 13:08
par Backup
.............

Publié : mar. 05/mai/2009 11:27
par Claude OI
Bonjour à tous,
tout d'abord un grand merci à Dobro, Gnozal et Mld pour vos réponses très rapides.
plus particulièrement pour Dobro, même si je n'ai pas tout compris, je me suis pas encore familier avec l'API et les Callback, j'ai quand même essayé de comprendre la logique.

Je me suis même permis de bidouiller le code que tu avais envoyé pour voir si j'avais bien saisi l'esprit. A priori cela marche.
Il me reste à comprendre 2 choses:

#PB_ProcessPureBasicEvents et d'où viennent les paramètres de la procédure callback

A si, encore une chose: vbNullString dans FinWindow. La doc de l'Api n'est pas très généreuse sur ce point. Ceci dit, je l'ai remplacée par n'importe quoi et cela fonctionne tout de même.

Pour le plaisir => ma bidouille:

Code : Tout sélectionner


Enumeration
    #Window_0 : #Window_1
EndEnumeration
   
Procedure OpenWindow_Window_0()
    OpenWindow ( #Window_0 , 400, 100, 362, 150, "bouge moi")
EndProcedure
Procedure OpenWindow_Window_1()
    OpenWindow ( #Window_1 , 450, 150, 362, 150, "je suis...")
EndProcedure 
 
Procedure ArreteDeColler( WindowID ,message,wParam,lParam)
    action = #PB_ProcessPureBasicEvents
    Select message
        Case #WM_WINDOWPOSCHANGED
            xw = WindowX ( #Window_0 ) + 50
            yw = WindowY ( #Window_0 ) + 50
            
            hWinCalc = FindWindow_ (null, "je suis..." )   
            SetWindowPos_ (hWinCalc, -1, xw, yw, 0, 0, #SWP_NOSIZE )
            
    EndSelect
    ProcedureReturn action
EndProcedure
 
OpenWindow_Window_0()
OpenWindow_Window_1()

SetWindowCallback (@ArreteDeColler())

Repeat : Until  WaitWindowEvent () = #PB_Event_CloseWindow 
Merci encore et à bientôt

Publié : mar. 05/mai/2009 12:58
par Backup
...............