Bouger le Panel avec keypress

Résolu
sarssor
Messages postés
63
Date d'inscription
dimanche 22 juillet 2007
Statut
Membre
Dernière intervention
28 avril 2011
- 20 avril 2011 à 00:18
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
- 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.

13 réponses

f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
37
24 avril 2011 à 17:38
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 ?
3