Menu

Fermeture d'uen fiche [Résolu/Fermé]

jaakan 17 Messages postés mardi 19 mai 2015Date d'inscription 7 janvier 2018 Dernière intervention - 8 févr. 2017 à 10:00 - Dernière réponse : jaakan 17 Messages postés mardi 19 mai 2015Date d'inscription 7 janvier 2018 Dernière intervention
- 8 févr. 2017 à 11:46
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 

2 réponses

Nessdarth 36 Messages postés vendredi 16 décembre 2016Date d'inscription 28 février 2017 Dernière intervention - 8 févr. 2017 à 11:10
0
Utile
1
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 17 Messages postés mardi 19 mai 2015Date d'inscription 7 janvier 2018 Dernière intervention - 8 févr. 2017 à 11:46
Grand merci.