Simuler flèche bas

Résolu
Signaler
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Messages postés
32
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
26 octobre 2006
-
Bonjour,

J'essaye de simuler flèche bas de plusieures manière mais je n'y arrive pas...

Selon ....KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);, le code ascii de la flèche bas est 40.
Mais pour moi, quand je fait ça:
chaine := 'TEST'+chr(40);

Que ce soit avec keybd_event(VkKeyScan(chaine[i]),0,0,0) ou ClipBoard.SetTextBuf(PAnsiChar(chaine));

Ca me retourne la parenthèse ouvrante '(' (ce qui me parait logique).

Comment faire pour que ça marche dans les 2 cas ?

5 réponses

Messages postés
32
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
26 octobre 2006

Détail un peu ton pb stp, je ne comprends pas le rapport avec le presse papier ... ce ne sont que des constantes donc que tu les appelles par leur nom de constante ou par la valeur à laquelle elles sont affectées ne change rien.
Explique ton problème, ce que tu veux faire(il y a plus de chances qu'on puisse te répondre).

Bon voila en tout les cas un exemple qui fonctionne
Tu crées un timer, un tmemo
et tu lies les évenements qui vont bien

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
memo1.Clear;
timer1.Interval:=500;
timer1.Enabled:=true;

for i:=0 to 50 do memo1.Lines.Add('test ligne '+inttostr(i));

end;
procedure TForm1.FormShow(Sender: TObject);
begin
memo1.setFocus();
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

PostMessage(self.Memo1.Handle, WM_KEYDOWN,VK_UP, 0);
sleep(100);
PostMessage(self.Memo1.Handle, WM_KEYUP,VK_UP, 0);

end;

end.

Le code qui gère l'appuie sur la flèche du clavier (ici vk_up) est dans

TForm1.Timer1Timer(Sender: TObject);


Si ca ne te convient pas détail ta demande stp
a+
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
En clair, il faut faire ALT+quoi ?
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
C'est à n'y rien comprendre... Je fait ça:
procedure TfrmMain.mmoInfosKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var str: String;
begin
str := '';
if ssShift in Shift then str := str+'La touche Maj est enfoncée. '
else if ssAlt in Shift then str := str+'La touche Alt est enfoncée. '
else if ssCtrl in Shift then str := str+'La touche Ctrl est enfoncée. ';
ShowMessage(IntToStr(ord(Key))+' '+str);
end;

Quand j'appuie sur flèche bas, il me met juste 40 et lorsque je fait ALT+040 dans le bloc note, c'est ( qui apparait.

Je deviens fou !
Messages postés
32
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
26 octobre 2006

Salut,

N'as-tu pas essayé les constantes suivantes ?
VK_LEFT VK_RIGHT VK_UP  VK_DOWN

Elles ne fonctionne pas ?
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Bonjour cerber943,
Je ne veux pas mettre de code virtuel (incompatible avec le presse papier) mais le code ascii.

C'est quoi le contraire de VkKeyScan ?

Peut être que de cette manière, je trouverais un code clé.
Vu que VK_DOWN=40, et que j'aimerais passer dans la boucle de traitement VkKeyScan, il faudrait que je trouve le code ASCII qui faire à VkKeyScan retourner 40.