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

Résolu
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 21 mars 2007 à 10:58
raidshadow Messages postés 1 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 31 décembre 2007 - 31 déc. 2007 à 21:23
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

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
21 mars 2007 à 11:20
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.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 mars 2007 à 12:34
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" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 mars 2007 à 14:30
Merci Guillemouze
Effectivement l'espace a disparu lors du copier/coller
@+
Cirec

<hr size="2" />
3
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
21 mars 2007 à 11:33
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


 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
21 mars 2007 à 11:42
Bonjour,

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

Cordialement
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
21 mars 2007 à 12:06
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
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
21 mars 2007 à 12:35
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.
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
21 mars 2007 à 13:16
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
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
21 mars 2007 à 13:42
procedure WndProc(var Message: TMessage); override;
                     ^
                     |
             il manquait un espace
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
21 mars 2007 à 14:55
Bonjour,

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

Je vais suivre ton conseil Loda.

Cordialement

Codial
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
24 mars 2007 à 04:04
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!
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
27 mars 2007 à 13:06
[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.
0
raidshadow Messages postés 1 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 31 décembre 2007
31 déc. 2007 à 21:23
Salut tout le monde,
Ca ne marche pas pour moi:

Le programme me dit WndProc and TForm1 uncompatible.
Pourquoi?
0
Rejoignez-nous