cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 2 déc. 2008 à 09:18
Bin tu peux pondre un truc dans ce genre là, en ajoutant une booléenne private à ta Form... Mais bon c'est le genre de code qui a tendance à faire n'importe quoi : si la orm perd le focus alors que ctrl est appuyé, le relachement de ctrl n'est pas pris en compte.
C'est là que le hook proposé par JulioDelphi peut s'avérer plus efficace.
<hr size="2" width="100%" />unit Unit1;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
bCtrlWasPressed: Boolean;
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (not bCtrlWasPressed) then
begin
memo1.Lines.Add('Touche ctrl appuyée');
bCtrlWasPressed:= True;
end;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (not (ssCtrl in Shift)) and (bCtrlWasPressed) then
begin
memo1.Lines.Add('Touche ctrl relachée');
bCtrlWasPressed:= False;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.ReadOnly:= True;
KeyPreview:= True;
end;
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 1 déc. 2008 à 09:19
Bonjour,
Sur ta form, passe la propriété KeyPreview à true. Ça permet d'intercepter toutes les touches pressées. Ensuite, tu n'as plus qu'à gérer le OnKeyDown de ta form.
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009 1 déc. 2008 à 09:57
la propriété KeyPreview de la form est à true
mais le code si dessous ne repond pas !!!
procedure TForm16.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (GetKeyState(VK_CONTROL) = 1) then
DBGrid1.Options := DBGrid1.Options + [dgMultiSelect];
end;
???
Vous n’avez pas trouvé la réponse que vous recherchez ?
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 1 déc. 2008 à 14:12
L'inconvénient de ma méthode par rapport à celle de Julio, c'est qu'il te faut également penser à gérer le onKeyUp pour enlever l'option MultiSelect quand tu relâche Ctrl... Celle de Julio est plus juste mais plus dure à piger aussi...
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009 1 déc. 2008 à 16:36
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssCtrl in Shift then
DBGrid1.Options := DBGrid1.Options + [dgMultiSelect];
end;
quelle est la procedure qui fait le contraire quand on relache la touche CTRL ???
DBGrid1.Options := DBGrid1.Options - [dgMultiSelect];
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 2 déc. 2008 à 13:48
Ce n'est pas une variable proposée par Delphi ! C'est un membre de classe que j'ai ajouté à ma Form.
<hr size="2" width="100%" />
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
bCtrlWasPressed: Boolean;
public
{ Déclarations publiques }
end;
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009 2 déc. 2008 à 14:48
bin! j'ai mal pigé!
sinon ça m'a ete d'une grande utilité. merci.
j'ai méme usé de cette var: bCtrlWasPressed dans les clics sur dbgrid1, histoire de desactiver le multiselect si (not bCtrlWasPressed) ce qui fait discparaitre l'effet de deux lignes selectionnées apres le scroll avec gestion de la molette biensur.
eole15
Messages postés12Date d'inscriptionlundi 29 décembre 2008StatutMembreDernière intervention18 février 2009 2 janv. 2009 à 17:39
bonjour a tous malgres vos post je n'arrive pas a faire que lorsque j'appuie sur la touche echap cela ferme mon application...je suis vraiment un noob donc un petit coup de main serais pas de refus...
En fait mon probleme est que je ne suis pas sur si mon programme vois ce qui se passe sur mon clavier, pourtant j'ai bein mis KeyPreview := true dans ma fiche est egalement dans ma partie conception...j'ai egalement creer une var Key : word dans une procedure...
Je ne sais pas si je me suis fait bien comprendre, en tout cas merci a ceux qui me donne un petit coup de main.
Mon adresse msn :)
[mailto:eole15@live.fr eole15@live.fr]
procedure TForm1.FormKeyDown(Sender : TObject ; var Key : word ; Shift: TShiftState);
begin
while (escape <> true ) do
begin
ShowMessage('Ca marche?');
if (Key = VK_ESCAPE) then
begin
escape := true;
end
end;
Application.Terminate;
end;
sp40
Messages postés1276Date d'inscriptionmardi 28 octobre 2003StatutContributeurDernière intervention 3 juillet 201515 3 janv. 2009 à 11:17
Bonjour,
Là, j'ai l'impression que quelle que soit la touche que tu appuies, ton programme se ferme, non ? (Le "Application.Terminate" est mal placé)
Je ne pense pas que tu aies besoin de ta variable "escape". Il te suffit juste de gérer le OnKeyDown de ta form avec un truc genre :
procedure TForm1.FormKeyDown(Sender : TObject ; var Key : word ; Shift: TShiftState);
begin
if Key = VK_ESCAPE
then Application.Terminate;
end;
Ça devrait marcher...
eole15
Messages postés12Date d'inscriptionlundi 29 décembre 2008StatutMembreDernière intervention18 février 2009 3 janv. 2009 à 22:42
Merci de ton aide mais justement malgre les touches que j'utilise il ne se ferme pas on dirais qu'il ne sais pas que j'appuie sur une touche ...d'ou mon probleme...
eole15
Messages postés12Date d'inscriptionlundi 29 décembre 2008StatutMembreDernière intervention18 février 2009 3 janv. 2009 à 22:42
Merci de ton aide mais justement malgre les touches que j'utilise il ne se ferme pas on dirais qu'il ne sais pas que j'appuie sur une touche ...d'ou mon probleme...