quand on descend en bas d'une DBgrid avec la fleche bas du clavier, cela ajoute automatiquement un nouvelle enregistrement vide.
Est-il possible de désactiver cette fonctionnalité ?
quand on descend en bas d'une DBgrid avec la fleche bas du clavier, cela ajoute automatiquement un nouvelle enregistrement vide.
Est-il possible de désactiver cette fonctionnalité ?
Si tu n'as pas besoin que la grid soit en mode édition il te suffit de mettre à false, dans options la propriété dgEditing
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
En fait je souhaiterais qu'il reste en mode edition, mais ne pas avoir cette fonctionnalité d'insertion automatique quand on descend dans la grille.Envoyé par Malatar
Bonjour
Tu peux y arriver par programmation par l'événement onKeyPress mais je ne connais pas le code de la touche dont tu veux annuler l'action. Ici code pour un Edit pour mettre une date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure Form1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin //Tu met le code Ascii des touches dont tu veux désactiver l'action if not (Key in ['0'..'9',#8, '/']) then begin Key := #0; Beep; end; end;
Au royaume des aveugles, les borgnes sont rois.
J'ai trouvé c'est VK_DOWN
Mirmillon
J'ai essayè mais ca marche pas....
J'ai trouvé un article dans Delphi Magazine qui traite de ce problème mais là je dois aller bosser...
Essaie Chr(VK_DOWN)
Au royaume des aveugles, les borgnes sont rois.
Merci et ca marche avec l'evennement KeyDown de la grille mais je ne sais pas comment annuler le déplacement vers le bas ou provoquer un déplacement vers le haut pour esquiver l'ajout d'enregistrement. Je vois pas non plus comment savoir ou je suis dans la DBGrid (numéro de lignes courante ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_DOWN) then begin beep; // annulation du déplacement vers le bas... end; end;
Je ne comprends pas ce que tu veux pour ca
l'evennement KeyDown de la grille mais je ne sais pas comment annuler le déplacement vers le bas ou provoquer un déplacement vers le haut pour esquiver l'ajout d'enregistrement
Par contre pour ca Je vois pas non plus comment savoir ou je suis dans la DBGrid (numéro de lignes courante ).tu peux te servir des options de DBGrid type dgXXXXX Voir inspecteur d'objet
Au royaume des aveugles, les borgnes sont rois.
A tester avec la ligne rouge dans le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_DOWN) then begin beep; // annulation du déplacement vers le bas... Key := 0; end; end;
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Une autre solution, plus général par rapport aux touches pressées, je l'utilise depuis toujours, est d'affecter l'évenement 'OnNewRecord' de ton DataSet.
Si ta MaGrille à pour source, MaTable tu fais simplement
bon courage !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure MaForm.MaTableNewRecord(DataSet: TDataSet); begin MaTable.Cancel; end;
Section Delphi
La mine d'or: La FAQ, les Sources
Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
Notre revanche ? l'inverse est aussi vrai ;-)
merci c'est persque ca !
, sauf que la ca m'insère quand meme un enregistrement si je vais vers le haut et vers le bas à nouveau. Et si je reste en bas je suis bien bloqué grace à ton instruction Table1.cancel;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_DOWN) then begin //beep; if table1.eof then \\ on test si on est en fin de table begin beep; Key := 0; table1.cancel; end; end; end;
c'est une alternative à l'autre code, il faut UNIQUEMENT,
mettre Table.cancel sur TableNewRecord( ... )
Pas de modif sur KeyPressed, KeyDown etc... (vide par défaut, il faut supprimer le code actuel de ton DBGRidKeyDown si tu choisis cela)
Section Delphi
La mine d'or: La FAQ, les Sources
Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
Notre revanche ? l'inverse est aussi vrai ;-)
voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if (Key=VK_DOWN) then begin //beep; if table.recno >= table.RecordCount then begin Key := 0; table.cancel; end; end;
ça mérite un résolu maintenant
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager