![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Создал проект, в котором на 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.
|
|
#2
|
||||
|
||||
|
Цитата:
Только несколько замечаний. Вот здесь: Код:
var Form2: TForm2; Код:
var Form2: TForm2 = nil; И ещё убери упоминание Form2 вот здесь: Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
p := 0;
a := 1;
img3.Picture.Bitmap.LoadFromFile('Pictures\name.bmp');
Form2.DoubleBuffered := true;
end; |
|
#3
|
|||
|
|||
|
За замечания спасибо.
Вообще мистика какая-то...даже Код:
lbl2.Caption:=TimeToStr(Now); Переустановка Delphi не помогла, все как и прежде - по отдельности работают, вместе не хотят.Может подскажите где могут быть ошибки именно по формам, их иерархии, расположении в проекте и т.д. (подойдут все возможные варианты)? |
|
#4
|
||||
|
||||
|
Цитата:
Цитата:
Цитата:
|
|
#5
|
|||
|
|||
|
После устранения - не работает.
Цитата:
Object Inspector -->Events для Image и Label нет обработчиков, точно, но их и не должно быть по идее. Спасибо хоть за какую-то помощ, будем искать... |
|
#6
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
vers0 (23.12.2013)
| ||