Bouger le Panel avec keypress [Résolu]

Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
- - Dernière réponse : f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 24 avril 2011 à 17:38
Salut

je peut bouger Panel avec Les touches fléchées
mais quand je mets d'autres composants sur la Form, le code sa ne marche pas !
Et Je ne comprends pas pourquoi Edit1 sera marqué !!!

Le code sa marche bien si il n y a que Panel1 sur la Form1 !
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    RadioGroup1: TRadioGroup;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key = 39) then
    Panel1.Left:= Panel1.Left+1;
if (Key = 37) then
    Panel1.Left:= Panel1.Left-1;
if (Key = 38) then
    Panel1.Top:= Panel1.Top-1;
if (Key = 40) then
    Panel1.Top:= Panel1.Top+1;
end;

end.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
3
Merci
place un TTimer sur ta fiche :

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100; // 100ms
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if getAsyncKeyState(VK_LEFT) < 0 then
  begin
    if panel1.Left > 0 then
      Panel1.Left := Panel1.Left-1;
  end
  else
  if getAsyncKeyState(VK_RIGHT) < 0 then
  begin
    if (panel1.Left+panel1.Width) < Form1.Width then
      Panel1.Left := Panel1.Left+1;
  end;

  if getAsyncKeyState(VK_UP) < 0 then
  begin
    if panel1.Top > 0 then
      Panel1.Top := Panel1.Top-1;
  end
  else
  if getAsyncKeyState(VK_DOWN) < 0 then
  begin
    if (panel1.Top+panel1.Height) < Form1.Height then
      Panel1.Top := Panel1.Top+1;
  end;
end;


________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?

Merci f0xi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de f0xi
0
Merci
Salut

Il suffit d'utiliser la propriété refresh de ton TPanel.


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  With Panel1 Do
    Begin
      Case Key Of
        39 : Left:=Left+1;
        37 : Left:=Left-1;
        38 : Top:=Top-1;
        40 : Top:=Top+1;
      End;
      Refresh;
    End; 
end;


Code non testé
Commenter la réponse de Utilisateur anonyme
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
0
Merci
Salut
mon code et ton Code sont OK mais le Problème si il y a des autres controlls sur la Form1 par exemple si il y a Edit1 et GroupBox1 ;)

Tu peut le tester ;)
Commenter la réponse de sarssor
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
Mets la propriété KeyPreview da la form à true !

A+


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
0
Merci
Je sais. Mais sa ne fonctionne pas ;)
as-tu testé ? !!!
Commenter la réponse de sarssor
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
N' utilise pas l' événement OnKeyDown mais l' événement onKeyPress!
A+


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
0
Merci
et comment tu as fait dans le Event OnKeypress ?
Commenter la réponse de sarssor
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
Je pense que c' est comme ça:

if Key = #39 then panel1.Left:=panel1.Left+1;
Mets un breakpoint pour voir la valeur de Key!

A+

Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
0
Merci
je suis sur que tu n as pas testée ;)
j ai du, le code se ne marche as si i l y a des autres composants sur Form
Commenter la réponse de sarssor
Messages postés
260
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
4 mars 2016
0
Merci
Salut,
utilise la méthode de francky23012301 FormKeyDown + la méthode de Mauricio mettre Form1.KeyPreview à True;
N'utilise pas FormKeyPress !
pour info dans le OnKeyPress se serait pour 39
if Key = Chr(vk_right) then
ou vk_left
Code pas testé
@+ yanb
Commenter la réponse de cs_yanb
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Dernière intervention
28 avril 2011
0
Merci
le code sa marche si je fait un clique en TEdit
mais si je fait un clique sur panel sa ne marche pas !!!
c est a dire si je clique d'abord sur TEdit, sa marche !
Commenter la réponse de sarssor
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
0
Merci
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_LEFT then
begin
Panel1.Left := Panel1.Left - 1;
Key := 0;
end;
end;



Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
0
Merci
Salut,

C'est pas le code qui ne fonctionne pas. Le "problème" vient d'ailleurs.

Je te laisse réfléchir au pourquoi du comment mais je te met sur la voix

Prendre une form et lui ajouter un panel et un CheckBox, puis rentrer le code suivant

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Showmessage('TEST');
end;


Tester et recommencer en supprimant la checkbox et conclure de nouveau.

Résultat : Est ce que c'est le code qui ne fonctionne pas ou juste un problème de message ??
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.