![]() |
|
|
Регистрация | << Правила форума >> | 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); ![]() Может подскажите где могут быть ошибки именно по формам, их иерархии, расположении в проекте и т.д. (подойдут все возможные варианты)? |
#4
|
||||
|
||||
![]() Цитата:
Цитата:
Цитата:
|
#5
|
|||
|
|||
![]() После устранения - не работает.
![]() Цитата:
Object Inspector -->Events для Image и Label нет обработчиков, точно, но их и не должно быть по идее. Спасибо хоть за какую-то помощ, будем искать... |
#6
|
||||
|
||||
![]() Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
vers0 (23.12.2013)
|
#7
|
|||
|
|||
![]() Цитата:
Дай-ка я тебя расцелую ![]() ![]() |