Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.12.2013, 16:13
vers0 vers0 вне форума
Прохожий
 
Регистрация: 21.12.2013
Адрес: Донецк
Сообщения: 26
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Не работает KeyDown во второй форме

Создал проект, в котором на Form1 имеется 4 Panel с картинками. Перемещение между ними происходит только клавишами (стрелками) на клавиатуре, при нажатии Enter'a на определенной картинке запускается другая форма (картинка 1 запускает Form2, 2 - Form3 и т.д.).

На второй форме так же навигация происходи только при помощи клавиатуры (стрелки и Enter, закрытие по Esc). Проблема возникла со второй формой (Form2, с остальными пока еще не работал), т.к. не обрабатывается KeyDown на ней, только на главной форме (Form1).

Подскажите, пожалуйста, где ошибка или как лучше сделать? По отдельности каждая форма работают нормально, как только объединяю их в один проект - проблемы с дочерними формами (при старте они не создаются, а лишь, при вызове).

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Unit2, Unit3, Unit4, Unit5;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure ImgTrue(Sender: TObject);

private
    { Private declarations }
public
    { Public declarations }
end;

var
  Form1: TForm1;
  i:Integer;

implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
  var j:integer;
  begin
    i:=1;
    //загрузка изображений в компоненты
    for j:=1 to 4 do TImage(FindComponent('Image'+IntToStr(j))).Picture.LoadFromFile('name'+IntToStr(j)+'.bmp');
  end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  begin
    case key of
    VK_LEFT:
      begin
      Dec(i);
      if i<1 then i:=4;
      ImgTrue(Sender);
      end;
    VK_RIGHT:
      begin
      Inc(i);
      If i>4 then i:=1;
      ImgTrue(Sender);
      //Image1.Picture.Bitmap.LoadFromFile('name'+IntToStr(i)+'.bmp');
      end;
    VK_RETURN:
      begin
      if i=1 then
        begin
        if (not Assigned(Form2)) then
        Form2:=TForm2.Create(Self);
        Form2.Show;
        end;

      if i=2 then
        begin
        if (not Assigned(Form3)) then
        Form3:=TForm3.Create(Self);
        Form3.Show;
        end;

      if i=3 then
        begin
        if (not Assigned(Form4)) then
        Form4:=TForm4.Create(Self);
        Form4.Show;
        end;
        
      if i=4 then
        begin
        if (not Assigned(Form5)) then
        Form5:=TForm5.Create(Self);
        Form5.Show;
        end;
      end;
    end;
  end;

procedure TForm1.ImgTrue(Sender: TObject);
  var j:integer;
  begin
  for j:=1 to 4 do
  TPanel(FindComponent('Panel'+IntToStr(j))).BevelOuter:=bvRaised;
  TPanel(FindComponent('Panel'+IntToStr(i))).BevelOuter:=bvLowered;
  end;

end.


Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls, ShellAPI, MMSystem;

type
  TForm2 = class(TForm)
    lbl1: TLabel;
    lbl2: TLabel;
    img3: TImage;
    img4: TImage;
    tmr1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Form2KeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure tmr1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  p,a:Integer;
implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
p:=0;
a:=1;
img3.Picture.Bitmap.LoadFromFile('Pictures\name.bmp');
Form2.DoubleBuffered:=true;
end;

procedure TForm2.Form2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case key of
  VK_RIGHT:
    begin
    a:=1;
    p:=p+a;
    if p=66 then
    p:=1;
    if p=0 then
    p:=65;
     sndPlaySound('next.wav',SND_ASYNC);
    img3.Picture.Bitmap.LoadFromFile('Pictures\name'+IntToStr(p)+'.bmp');
    end;
  VK_LEFT:
    begin
    a:=-1;
    p:=p+a;
    if p=66 then
    p:=1;
    if p<=0 then
    p:=65;
     sndPlaySound('next.wav',SND_ASYNC);
    img3.Picture.Bitmap.LoadFromFile('Pictures\name'+IntToStr(p)+'.bmp');
    end;
  VK_RETURN:
    begin
    ShellExecute(Handle, nil, PChar('Games\game'+IntToStr(p)+'.nes'), nil, nil, SW_SHOWNORMAL);
    end;
  VK_ESCAPE:
    begin
    Form2.Close;
    end;
    end;
    lbl1.Caption:=('Game '+inttostr(p)+' of 65');
end;
procedure TForm2.tmr1Timer(Sender: TObject);
begin
lbl2.Caption:=TimeToStr(Now);
end;
end.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025