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

codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 21 mars 2007 à 10:58 - Dernière réponse : raidshadow 1 Messages postés mardi 27 novembre 2007Date d'inscription 31 décembre 2007 Dernière intervention
- 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 -->
Afficher la suite 

14 réponses

Répondre au sujet
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 21 mars 2007 à 11:20
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Loda
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 21 mars 2007 à 12:34
+3
Utile
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" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 21 mars 2007 à 14:30
+3
Utile
Merci Guillemouze
Effectivement l'espace a disparu lors du copier/coller
@+
Cirec

<hr size="2" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 21 mars 2007 à 11:33
0
Utile
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


 
Commenter la réponse de codial
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 21 mars 2007 à 11:34
0
Utile
Bonjour,

je reviens pour le lien en question:

http://www.delphifr.com/infomsg_ALIGNER-FICHE-RAPPORT-TEDIT_850640.aspx
Commenter la réponse de codial
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 21 mars 2007 à 11:42
0
Utile
Bonjour,

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

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

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

Je vais suivre ton conseil Loda.

Cordialement

Codial
Commenter la réponse de codial
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 24 mars 2007 à 04:04
0
Utile
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!
Commenter la réponse de Caribensila
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 27 mars 2007 à 13:06
0
Utile
[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.
Commenter la réponse de cs_Loda
raidshadow 1 Messages postés mardi 27 novembre 2007Date d'inscription 31 décembre 2007 Dernière intervention - 31 déc. 2007 à 21:23
0
Utile
Salut tout le monde,
Ca ne marche pas pour moi:

Le programme me dit WndProc and TForm1 uncompatible.
Pourquoi?
Commenter la réponse de raidshadow

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.