Текущий архив: 2003.09.22;
Скачать: CL | DM;
ВнизМигание Найти похожие ветки
← →
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 вся ветка
Текущий архив: 2003.09.22;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.013 c