Touche supprimer sans timer [Résolu]

Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 2 juin 2006 à 13:51 - Dernière réponse : Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention
- 4 juin 2006 à 10:39
Bonjour,


Voilà je cherche un moyen d'utiliser la touche "Suppr" (VK_DELETE) pour supprimer une ligne dans un TDBGrid qui contient une base de donnée.


J'ai trouvé le moyen de le faire avec un timer, mais malheureusement cela ne me plait pas beaucoup.


Voici mon code :


**************************************************************************************


procedure TFiche.Supprimer1Click(Sender: TObject);
var
  rep : integer;
begin
 rep:= MessageBox(Handle,'Etes-vous sûr de vouloir supprimer cet enregistrement ?','Avertissement',MB_OKCANCEL or MB_ICONSTOP ) ;
 if (rep =IDOK)
     //Si réponse OK Suppression de l'enregistrement
  then Table_emprunt.Delete;
end;


procedure TFiche.Timer1Timer(Sender: TObject);
begin
  if (GetKeyState(VK_DELETE) < 0) and (Suppr = 0) then
  begin
    Suppr := 1;
    Supprimer1Click(Sender);
    Suppr := 0;
    Timer1.Enabled := False;
  end;
end;


procedure TFiche.Fiche_empruntCellClick(Column: TColumn);
var
  rep: Integer;
begin
  Timer1.Enabled := True;
end;


**************************************************************************************


Ce code fonctionne parfaitement mais les problèmes sont les suivants :


 - Si je clique sur Annuler et que je fais à nouveau la touche Suppr rien ne se produit parceque la cellule est déjà sélectionnée. En effet comme vous pouvez le voir sur la source ci-dessus, je réenclenche le timer à chaque nouvelle sélection d'une cellule.
 - Si je clique sur Oui, j'ai le même problème que précédemment


 - Pourquoi utiliser un déclenchement du Timer ? Pour utiliser le moins possible de ressources


J'aimerais donc savoir s'il y'avait un autre moyen de le faire ?


J'ai beau chercher avec la procedure KeyPress je n'arrive pas à arriver à mes fins correctement.


Merci d'avance
Afficher la suite 

7 réponses

Répondre au sujet
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 juin 2006 à 09:16
+3
Utile
Salut,

L'évènement OnKeyPress est plus destiné à gérer les touches renvoyant un caractère.
Au lieu de cela, utilises les évènements OnKeyDown ou OnKeyUp pour gérer les touches ne renvoyant pas de caractère affichable :

procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key =  VK_DELETE then
 if  MessageDlg('Etes-vous sûr de vouloir supprimer cet enregistrement ?',mtWarning, mbOKCANCEL, 0 )  = IdOK then
   //Table1.Delete;
   ShowMessage('Emprunt supprimé');
end;

et tu verras que tout ira mieux !

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 2 juin 2006 à 16:58
0
Utile
Je ne crois pas avoir tout compris... Tu veux donner la possibilité à
l'utilisateur de faire une opération qu'il appuie sur la touche suppr,
ou qu'il clique sur un bouton, c'est bien ça ?


Il existe des composants (TActionList, TActionManager sur une pro) qui
permet de centraliser les actions. Par exemple, on peut associer un
raccourcie clavier, un item de menu, et bouton de barre d'outil à la
même routine.


Pour savoir ton TDBGrid à le focus, tu peux tester sa propriété GotFocus.


Mais dans ton cas... Pourquoi ne pas simplement utiliser l'événement OnKeyPress du TDBGrid ?????
Commenter la réponse de cs_rt15
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 2 juin 2006 à 18:11
0
Utile
J'utilise la version Entreprise de Delphi 7, donc je devrais logiquement trouver les composants que tu m'as cité.

Ensuite tu n'as pas du lire entièrement mon texte, car j'ai écrit ceci :

J'ai beau chercher avec la procedure KeyPress je n'arrive pas à arriver à mes fins correctement.

Donc si j'ai voulu le faire mais cela ne foncitonne pas, donc je ne sais pas comment faire voilà pouruqoi je demande votre aide.

Si vous avez d'autres idées s'ilv sou plait faites moi signe !

Je vous tiendrez au courant de mon avancé dans les composants cité ci-dessus et si je trouve une solution correcte.

@+
Commenter la réponse de Also know as
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 3 juin 2006 à 13:58
0
Utile
if windows.GetAsyncKeyState(VK_DELETE) < 0 then ...
Commenter la réponse de f0xi
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 3 juin 2006 à 15:11
0
Utile
alors ca ca m'aide pas le moins du monde...

J'en fais quoi je le met ou, etc ?

Parceque là j'ai essayé de le mettre avec ma source un peu plus haut fonctionne pas, avec la procedure OnKeyPress, fonctione pas non plus donc bon...

Ensuite j'ai pas trouvé pour la propriété GotFocus ou GetFocus je n'ai pas trouvé, et pour le TAcionList je l'ai trouvé mais il ne m'arrange en rien du tout...
Commenter la réponse de Also know as
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 juin 2006 à 09:21
0
Utile
Je reviens aussi sur une de tes phrases : "Pourquoi utiliser un déclenchement du Timer ? Pour utiliser le moins possible de ressources"
C'est précisément le contraire qui se passe. Souviens-toi de ce que je t'ai dit sur MSN, il n'y a pas très longtemps, sur un de tes projets. Oublie les TTimer, ce n'est ni  la panacée ni un moyen de régler tes problèmes de structuration du code. Ca ne t'amènera que des complications et des effets de bord inattendus.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 4 juin 2006 à 10:39
0
Utile
Merci DelphiProg pour tes réponses !

En effet je viens de me rendre compte que j'ai oublier un mot, c'est justement à propos de cette conversation que ne souhaites plus utiliser (ou le moins possible) de Timer.

Ma question était donc en réalité "Pourquoi NE PAS utiliser un déclenchement du Timer ? Pour utiliser le moins possible de ressources".

Merci beaucoup pour ta réponse !
Commenter la réponse de Also know as

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.