Empécher le déplacement d'une fenêtre [Résolu]

Signaler
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Messages postés
1
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
31 décembre 2007
-
Bonjour,

Grace à Japee (Cf  mon post du 28/11/2006 et ses réponses) j'affiche une fiche contenant un DBGrid en dessous d'un DBEDIT.
Cette fiche à sa propriété border style à bsDialog,  
Est il possible de rendre cette fenêtre non déplacable par l'utilisateur?
Je voudrais que l'utilisateur ne puisse pas la déplacer, qu'elle reste en dessous de mon edit?
Ensuite, comment faire pour quelle se ferme quand on clique en dehors de cette fiche,
 notamment sur la barre de titre de la fiche appelante?

Sur la fiche appelante elle même je sais faire mais pas quand on clique sur sa barre de titre.
Existe t il un moyen?
D'avance merci.

Cordialement

<!-- / message -->

13 réponses

Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

pour la rendre indéplacable, le plus simple est d'enlever la bar de titre. (borderStyle := bsNone)
(sinon, il te faut commencer a jouer avec les event/message)

pour le click sur la barre de titre, il te faut passer par un message handler:
http://msdn2.microsoft.com/en-us/library/ms645622.aspx
(TWMNCMButtonDblClk)
 ou
http://msdn2.microsoft.com/en-us/library/ms645623.aspx
(btn down)

bon code,

Loda
PS: c'est très bien de citer les post liée. Mais un lien aurait été plus pratique, non?
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Salut,

Pour rendre la form indéplacable c'est un jeu d'enfants

type
  TForm1 = class (TForm)
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    procedure WndProc(varMessage: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
begin  If Not((message.Msg WM_NCLBUTTONDOWN) <gras>and (Message.WParamLo</gras> htCaption)) Then
  Inherited WndProc(Message);
end;

end.

Et tout le reste fonctionne quand même

Bien sur il reste encore la possibilitée de la déplacer par le menu système mais il existe des exemples sur le site pour retirer/modifier ce menu
 
@+
Cirec

<hr size ="2" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Merci Guillemouze
Effectivement l'espace a disparu lors du copier/coller
@+
Cirec

<hr size="2" />
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour Loda,

merci pour ta réponse que je vais tester tout de suite.

Pour le lien en fait, je n'y ai pas pensé, mais effectivement j'ai pris bonne note pour la prochaine fois.


Bon, je teste et je dis quoi.


Cordialement


 
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

je suis allé sur les liens que tu m'a indiqué mais j'avoue ne pas bien comprendre comment l'adapter ?

Cordialement
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

en fait j'ai trouvé un truc très simple pour pour fermer ma fenêtre2 en cliaquant sur la barre de titre, il suffit de mettre sur le onActivate de la fiche appelante le code:
   mafenêtre2.Close;

Encore merci pour le coup de main.

Cordialeùent
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

effectivement c'est plus simple avec le OnActivate... :)
<hr size= "2" width="100%" />Sinon,

le liens que je t'ai donné est la doc de la msdn sur le message que ta form recevra lors que l'ûtilisateur cliquerra sur la bar de titre.

il faut faire un message handler . genre:

procedure WMNCLBUTTONDBLCLK(var Message:TWMNCMButtonDblClk); message WM_NCLBUTTONDBLCLK;

procedure TMDIForm.WMNCLBUTTONDBLCLK(var Message: TWMNCMButtonDblClk);
begin
  DoRapideAction(...);
end;

Ce type de technique est très importante si tu veux aller "plus loin" en programmation windows.
Je t'encourage vivement à essayer, au moins pour savoir de quoi il s'agit.

C'est avec ce genre de technique que l'on peut implementer de nouveau event, les form magnetiques (winamp style), des bouttons sur des bar de titre, et beaucoup plus...

Les messages sont à la base des event des composant. Lit le code de la VCL  pour des exemples !
ex.:
TCustomLabel:
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

procedure TCustomLabel.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;

bon code,

Loda
<hr size ="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

je suis en train de tester vos réponses respectives.

Sur:
procedure WndProc(varMessage: TMessage); override;

j'ai un message d'erreur:
la déclaration de 'WndProc' diffère de la déclaration précédente. ???

Où est l'erreur?

Cordialement
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
procedure WndProc(var Message: TMessage); override;
                     ^
                     |
             il manquait un espace
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
Bonjour,

je vous remercie tous sincèrement pour le coup de main. Celà fonctionne à merveille.

Je vais suivre ton conseil Loda.

Cordialement

Codial
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Merci pour la question et pour les réponses.

J'ai appris des choses et je tenais à signaler qu'il n'y a pas que le demandeur qui profite de l'aide des membres de CS quand tout se passe intelligemment, dans la courtoisie et le respect.

Un exemple pour les nouveaux venus!
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
[HS]

@Caribensila:

C'est pas le but d'une forum public ?
(et du moteur de recherche associé)

perso, j'ai souvent trouvé des réponses dans des (vieux) post. et souvent appris des trucs parceque je lit certain post par curiosité.

+1:
Un exemple pour les nouveaux venus!

/HS

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
1
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
31 décembre 2007

Salut tout le monde,
Ca ne marche pas pour moi:

Le programme me dit WndProc and TForm1 uncompatible.
Pourquoi?