Also know as
Messages postés259Date d'inscriptionsamedi 13 décembre 2003StatutMembreDernière intervention22 novembre 2010
-
2 juin 2006 à 13:51
Also know as
Messages postés259Date d'inscriptionsamedi 13 décembre 2003StatutMembreDernière intervention22 novembre 2010
-
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.
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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 4 juin 2006 à 09:16
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.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 2 juin 2006 à 16:58
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 ?????
Also know as
Messages postés259Date d'inscriptionsamedi 13 décembre 2003StatutMembreDernière intervention22 novembre 20102 3 juin 2006 à 15:11
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...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 4 juin 2006 à 09:21
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.
Also know as
Messages postés259Date d'inscriptionsamedi 13 décembre 2003StatutMembreDernière intervention22 novembre 20102 4 juin 2006 à 10:39
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".