Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.05;
Скачать: CL | DM;

Вниз

Как управлять кнопками?   Найти похожие ветки 

 
Rradion   (2003-04-23 15:59) [0]

Таки умудрился нарисовать картиночку, и надо чтоб её можно было двигать кнопками.

...
chr:=TBitMap.Create;
chr.LoadFromFile("chr.bmp");
BOX.Canvas.Draw(dist* X,dist* Y,chr);
...


Надо чтобы при нажатии, на пример, кнопки "в право" Х становисля равен Х+1 , если "в лево" то Х:=Х-1 и т.д.


Спасибо!


 
Skier ©   (2003-04-23 16:08) [1]

1) TForm.KeyPreview := True; (на всякий...)
2) Устанавливаешь начальные значения переменной dist,
X И Y устанавливаешь в 1
3) Создаёшь обработчик OnKeyDown для формы
4) В обработчике :

begin
case Key of
VK_LEFT : begin
Dec(X);
Dec(Y);
BOX.Canvas.Draw(dist + X,dist + Y,chr);
end; //VK_LEFT
end; //case
end;


 
Rradion   (2003-04-23 16:27) [2]

Спасибо, написАл...

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_LEFT : begin
Dec(X);
Dec(Y);
BOX.Canvas.Draw(dist + X,dist + Y,chr);
Label1.Caption := IntToStr( StrToInt(Label1.Caption) + X);
end; //VK_LEFT
end; //case
end;


http://www.vi2.com/getFile/138851.jpg

...но ворди как не работает. Т.е. работает только когда выбран первый компанент формы ( передвигалка ).


 
Skier ©   (2003-04-23 16:30) [3]

>Rradion
Расскажи подробно что хочешь сделать в конечном итоге...


 
Rradion   (2003-04-23 16:37) [4]

В конечном итоге надо сделать чтоб червичок бегал по клеткам управляемый кнопками. При нажатии, на пример, кнопки "в лево" он передвигался на одну клетку в лево и т.д.

Это уже работает, но только когда выделен первый компанент формы... а желательно чтоб управлени работало в любом случии, не зависемо от того, что выделено на форме.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_LEFT : begin
Dec(X);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end; //VK_LEFT
end; //case

case Key of
VK_RIGHT : begin
Inc(X);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end; //VK_RIGHT
end; //case

case Key of
VK_UP : begin
Dec(Y);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end; //VK_UP
end; //case

case Key of
VK_DOWN : begin
Inc(Y);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end; //VK_DOWN
end; //case
end;


Спасибо!


 
Skier ©   (2003-04-23 16:42) [5]

TForm.KeyPreview := True; поставил ?


 
Rradion   (2003-04-23 16:51) [6]

поставил, в "properties"...


 
Skier ©   (2003-04-23 16:53) [7]


> Это уже работает, но только когда выделен первый компанент
> формы...

Поясни...какой компанент ?
BOX-ы должны быть разные или всегда один и тот же ?


 
Rradion   (2003-04-23 17:01) [8]

BOX один, большой в PaintBox центре.

Проблема в том, что после нажатия "DRAW!" управлять можно только если курсором выделиш "TrackBar" ( двигалку в групе "Сложность" ), иначи червечок не двигается :( ...

http://www.vi2.com/getFile/138857.jpg

Так же приписал "chr1", это чтоб след остовался.
И "if" что он за рамки поля не выбегал.


VAR
X,Y,dist, vgrid:integer;
chr,chr1:TBitMap;


procedure TForm1.resClick(Sender: TObject);
begin
BOX.Canvas.Pen.Color:=RGB(127,157,185);
vgrid:=0; dist:=30;

Repeat
begin
vgrid:=vgrid+30;
BOX.Canvas.MoveTo(vgrid,0);
BOX.Canvas.LineTo(vgrid,400);
BOX.Canvas.MoveTo(0,vgrid);
BOX.Canvas.LineTo(600,vgrid);
end
Until vgrid=600;

chr:=TBitMap.Create;
chr.LoadFromFile("chr.bmp");
chr1:=TBitMap.Create;
chr1.LoadFromFile("chr1.bmp");
X:=9; Y:=10;
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end;


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_LEFT : begin
If X >= 1 then
begin
BOX.Canvas.Draw(dist*X,dist*Y,chr1);
Dec(X);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end;
end; //VK_LEFT
end; //case

case Key of
VK_RIGHT : begin
If X <= 18 then
begin
BOX.Canvas.Draw(dist*X,dist*Y,chr1);
Inc(X);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end;
end; //VK_RIGHT
end; //case

case Key of
VK_UP : begin
If Y >= 1 then
begin
BOX.Canvas.Draw(dist*X,dist*Y,chr1);
Dec(Y);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end;
end; //VK_UP
end; //case

case Key of
VK_DOWN : begin
If Y <= 11 then
begin
BOX.Canvas.Draw(dist*X,dist*Y,chr1);
Inc(Y);
BOX.Canvas.Draw(dist*X,dist*Y,chr);
end;
end; //VK_DOWN
end; //case
end;

end.


 
Skier ©   (2003-04-23 17:09) [9]

>Rradion

> управлять можно только если курсором выделиш "TrackBar"
> ( двигалку в групе "Сложность" ), иначи червечок не двигается
> :( ...

Что-то никак не въеду...
Почему не двигается ? т.е. если не выделен TrackBar, то, я надеюсь, обработчик TForm1.FormKeyDown вызывается ?


 
Rradion   (2003-04-23 17:17) [10]

Да именно что не вызывается...
при запуски, TrackBar выделен и при нажатии вызывается, но если в место TrackBara выделить что нибудь другое или вообше снять выделение, то не вызывается.



Страницы: 1 вся ветка

Текущий архив: 2003.05.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-12729
Arch-vile
2003-04-23 00:07
2003.05.05
Undeclared identifier в функциях, процедурах


1-12749
NeshBriges
2003-04-21 11:04
2003.05.05
Загрузка текстового файла


14-12926
Навичек
2003-04-18 02:40
2003.05.05
Не получается поставить компонент Ehlib


1-12821
AlexKost
2003-04-22 15:38
2003.05.05
Загрузка функции из пакета


7-12952
Zyb
2003-03-12 13:45
2003.05.05
Вопрос по COM порту