Réponse acceptée !
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.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
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;
end.
|