Bouger le Panel avec keypress [Résolu]

Signaler
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
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.

13 réponses

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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 ?

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é
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011

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 ;)
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Mets la propriété KeyPreview da la form à true !

A+


Composants Cindy pour Delphi
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011

Je sais. Mais sa ne fonctionne pas ;)
as-tu testé ? !!!
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
N' utilise pas l' événement OnKeyDown mais l' événement onKeyPress!
A+


Composants Cindy pour Delphi
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011

et comment tu as fait dans le Event OnKeypress ?
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011

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
Messages postés
263
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
28 avril 2021
13
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
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011

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 !
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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

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 ??