Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
14-12894
Шишкин Илья
2003-04-16 18:41
2003.05.05
Кто пользуется Opera?


14-12927
Angel_Forever
2003-04-18 09:00
2003.05.05
блок-схемы


14-12902
bercut
2003-04-17 17:50
2003.05.05
Всем привет заходите на сайт студентов экологического факультета


14-12885
Fill181
2003-04-09 21:02
2003.05.05
вычисление дифференциала


1-12728
Rise
2003-04-23 11:36
2003.05.05
Событие OnClick





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский