Bouger le Panel avec keypress [Résolu]

sarssor 63 Messages postés dimanche 22 juillet 2007Date d'inscription 28 avril 2011 Dernière intervention - 20 avril 2011 à 00:18 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 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 

13 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 24 avril 2011 à 17:38
+3
Utile
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 ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
Utilisateur anonyme - 20 avril 2011 à 00:43
0
Utile
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
sarssor 63 Messages postés dimanche 22 juillet 2007Date d'inscription 28 avril 2011 Dernière intervention - 20 avril 2011 à 01:29
0
Utile
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
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 avril 2011 à 10:34
0
Utile
Mets la propriété KeyPreview da la form à true !

A+


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


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
sarssor 63 Messages postés dimanche 22 juillet 2007Date d'inscription 28 avril 2011 Dernière intervention - 20 avril 2011 à 13:10
0
Utile
et comment tu as fait dans le Event OnKeypress ?
Commenter la réponse de sarssor
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 avril 2011 à 13:13
0
Utile
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
sarssor 63 Messages postés dimanche 22 juillet 2007Date d'inscription 28 avril 2011 Dernière intervention - 20 avril 2011 à 13:49
0
Utile
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
cs_yanb 260 Messages postés lundi 27 octobre 2003Date d'inscription 4 mars 2016 Dernière intervention - 20 avril 2011 à 14:12
0
Utile
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
sarssor 63 Messages postés dimanche 22 juillet 2007Date d'inscription 28 avril 2011 Dernière intervention - 20 avril 2011 à 14:42
0
Utile
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
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 20 avril 2011 à 14:51
0
Utile
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
Utilisateur anonyme - 20 avril 2011 à 20:49
0
Utile
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.