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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Claude OI
Messages : 14
Inscription : mar. 25/nov./2008 12:40

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

Message 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
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

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

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Message par MLD »

Regarde sur le forum, en faisant une recherche fenêtre modale
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

........
Dernière modification par Backup le sam. 01/oct./2011 14:05, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.............
Dernière modification par Backup le sam. 01/oct./2011 14:06, modifié 1 fois.
Claude OI
Messages : 14
Inscription : mar. 25/nov./2008 12:40

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

...............
Répondre