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

Вниз

Мигание   Найти похожие ветки 

 
Inna   (2003-05-22 13:59) [0]

Дельфи я только осваиваю и вот какая проблема - хочу переместить по форме картинку. Поместила Image и Timer и написала в onTimer чтото вроде
Image1.Top:=Image1.Top+5 Картинка двигается, но мигает. Что делать?


 
MBo   (2003-05-22 14:04) [1]

Частично может помочь
Form1.DoubleBuffered:=True


 
pasha676   (2003-05-22 14:58) [2]

2МВо

Еще чуть чуть и тебе можно эту фразу (про даблбуфер) на хот-кей клавы вешать :). Поражаюсь тебе. Как только в ответ ты матом еще не сыпешь :).


 
DeadMeat   (2003-05-22 16:21) [3]

Теоретически мона сделать используя WM_PAINT и BitBlt... Но при этом если под картинкой чего-та есть, то этого чего-та, после её прохождения над ним может не оказаться... Прикол в том, чтобы перехватывать WM_PAINT и рисовать картинку с помощью BitBlt заранее больших размеров чем сама картинка:
по ширине - на скорость по горизонтали;
по высоте - на скорость по вертикали;
Может чё и получится...


 
Inna   (2003-05-23 14:27) [4]

Mbo - Спасиба, заработало
pasha676 - Какой ты злой :)
DeadMeat © а как насчёт примера?


 
pasha676   (2003-05-23 14:43) [5]

Да нет, не злой. Просто почти каждую неделю (а то и по 2-3 раза в неделю) появляеться этот вопрос. И МВо на него одинаково отвечает. И кстати мой пост был о том какой МВо классный :).

По смыслу твоего вопроса. По хорошему надо отказываться от TImage и рисовать рисунок хотя бы на канвасе формы. И пошустрей и подход правельнее.


 
Inna   (2003-05-23 16:35) [6]

pasha676 - какой МВо классный, я согласна. А про вопрос - ну ламер я :(


 
DeadMeat   (2003-05-23 17:03) [7]

> Inna

Ща..., набацаю... погоди...


 
DeadMeat   (2003-05-23 17:19) [8]

> Inna

Набацал... Тока в начале на форму кинь этот Timer1 и Image1 со свойством Visible:=false , чтобы на экране не мешалась. В этот Image1 надо загрузить картинку (только *.BMP). Писал на быструю руку, так что за красоту не отвечаю, но работает так, как я и обещал, т.е. стирает всё подряд, что было под картинкой... Да и ещё скорость передвижения должна быть постоянной, если она меняется, то код надо переделывать... и будет некоторая потеря скорости... Либо повторять все действия с начала...


unit Unit1;

interface

uses
Windows, Messages, Graphics, Forms, StdCtrls, Controls, ExtCtrls, Classes;

type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
protected
procedure paint (var m:twmpaint);message wm_paint;
end;

const xspeed=1; // скорость по X
( form1.handle,nil,false)
> Inna

Набацал... Тока в начале на форму кинь этот Timer1 и Image1 со свойством Visible:=false , чтобы на экране не мешалась. В этот Image1 надо загрузить картинку (только *.BMP). Писал на быструю руку, так что за красоту не отвечаю, но работает так, как я и обещал, т.е. стирает всё подряд, что было под картинкой... Да и ещё скорость передвижения должна быть постоянной, если она меняется, то код надо переделывать... и будет некоторая потеря скорости... Либо повторять все действия с начала...


unit Unit1;

interface

uses
Windows, Messages, Graphics, Forms, StdCtrls, Controls, ExtCtrls, Classes;

type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
protected
procedure paint (var m:twmpaint);message wm_paint;
end;

const xspeed=1; // скорость по X
yspeed=1; // скорость по Y

var
Form1: TForm1;
bufbit:tbitmap;
x,y:integer; // координаты вывода

implementation

{$R *.dfm}

procedure drawpicture;
begin
invalidaterect (form1.handle,nil,false);
end;

procedure TForm1.paint(var m:twmpaint);
var ps:tpaintstruct;
begin
beginpaint (handle,ps);
bitblt (form1.canvas.handle,x,y,bufbit.width,bufbit.height,bufbit.canvas.handle,0,0,srccopy);
endpaint (handle,ps);
end;

procedure TForm1.FormCreate(Sender: TObject);
var pct:tpicture;
begin
bufbit:=tbitmap.create;
bufbit.width:=image1.picture.width+xspeed*2;
bufbit.height:=image1.picture.height+yspeed*2;
bufbit.canvas.brush.color:=form1.canvas.brush.color;
patblt (bufbit.canvas.handle,0,0,bufbit.width,bufbit.height,patcopy);
bitblt (bufbit.canvas.handle,xspeed,yspeed,bufbit.width,bufbit.height,image1.picture.bitmap.canvas.handle,0,0,srccopy);
x:=0;
y:=0;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
bufbit.free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+xspeed;
y:=y+yspeed;
drawpicture; // это надо вызывать для рисования картинки
end;

end.


Как я и говорил уже, код оригинальностью не страдает...


 
pasha676   (2003-05-23 17:51) [9]

Извини за критику но код страдает избыточностью.
В смысле для новичка такой давать не надо.
Надо при креате формы
1) Создать TBitmap
2) загрузить туда нужный рисунок.

Надо по таймеру
1) Изменить координаты рисунка
2) Залить фон канваса формы
3) Вывести рисунок из битмапа в нужное место на форме.

Так будет понятней.
Inna - что непонятно - спрашивай. Но лучше сядь и разберись самостоятельно. Ключевые слова для поиска в хелпе - TBitmap, TCanvas


 
Inna   (2003-05-26 10:42) [10]

to pasha676,DeadMeat ©
Спасибо!



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

Форум: "Media";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
9-71456
Uncle Archi
2003-03-21 23:31
2003.09.22
GLScene в Run-time


3-71510
konst
2003-09-01 09:35
2003.09.22
Ув. мастера помогите разобраться с MDI формами


14-71868
Прохожий
2003-08-28 11:06
2003.09.22
SmtpCli из пакета ISC меня уже достал!!!


1-71644
scorpi
2003-09-09 06:50
2003.09.22
Создание объекта


11-71568
Puke Zero
2003-01-16 23:29
2003.09.22
PopupMenu





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский