Signaler

Fermeture d'uen fiche [Résolu]

Posez votre question jaakan 11Messages postés mardi 19 mai 2015Date d'inscription 8 février 2017 Dernière intervention - Dernière réponse le 8 févr. 2017 à 11:46 par jaakan
bonjour cher ami développeur.Je suis reconnaissant pour tout ce que vous faites pour cette communauté.Je développe une application avec delphi et je voudrais empêcher la fermeture d'une fiche par racourci clavier alt + F4.
Afficher la suite 
Utile
+0
plus moins
Bonjour,

Pour commencer tu dois mettre la propriété "Keypreview" de ta fiche, accessible depuis l'inspecteur d'objet, à True.

Pour la fiche, on va lui donner l'attribut FDoClose qu'on peut initialiser à True au FormCreate

TForm1 = class(TForm)
...
  private
    FDoClose: Boolean;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  FDoClose := True;
...
end;

Ensuite tu dois implémenter l'événement FormKeyDown

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (ssAlt in Shift) then
    FDoClose := not (GetAsyncKeyState(VK_F4) < 0);
end;

Dans le code, ci-dessus, je ne m'intéresse à la touche uniquement si la touche ALT est enfoncée, ensuite j'utilise la fonction GetAsyncKeyState, qui me permet de savoir si une touche en particulier est appuyée, quand c'est le cas, la fonction retourne une valeur négative. Avec ce code je sais que la combinaison ALT + F4 a été faite et mon attribut FDoClose est à faux

A présent je m'occupe de FormCloseQuery qui me permet de dire si on doit fermer la fiche ou pas:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := FDoClose;
  FDoClose := True;
end;

Comme FDoClose est à faux car il y a eu la combinaison ALT_F4, la fiche ne se fermera pas, il est important de repasser de suite FDoClose à True, sinon on ne pourra pas fermer la fiche en appuyant sur la croix de celle-ci ou via une fonction.
jaakan 11Messages postés mardi 19 mai 2015Date d'inscription 8 février 2017 Dernière intervention - 8 févr. 2017 à 11:46
Grand merci.
Répondre
Donnez votre avis

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.

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

Vous n'êtes pas encore membre ?

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