Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
1

Движение изображения в TPaintBox

31.03.2014, 18:55. Показов 3880. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
paintbox стоит пустой, хотя должен всё время прорисовывать paintPict, почему?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var
  Form1: TForm1;
  paintpict,fon: Tbitmap;
  pict_pos:integer;
 
 
implementation
 
{$R *.dfm}
{$R fon.res}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
fon:=Tbitmap.Create;
paintpict:=Tbitmap.Create;
fon.LoadFromResourceName(hInstance,'fon');
paintpict.Canvas.Draw(0,0,fon);
end;
 
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
paintbox1.Canvas.Draw(0,0,paintpict);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   pict_pos:=pict_pos+1;
   if pict_pos>=fon.Width then pict_pos:=0;
   paintpict.Canvas.Draw(pict_pos,0,fon);
   paintbox1.Repaint;
end;
Добавлено через 35 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var
  Form1: TForm1;
  fon: Tbitmap;
  pict_pos:integer;
 
 
implementation
 
{$R *.dfm}
{$R fon.res}
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
fon:=Tbitmap.Create;
paintpict:=Tbitmap.Create;
fon.LoadFromResourceName(hInstance,'fon');
end;
 
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
paintbox1.Canvas.Draw(-1*pict_pos,0,fon);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   pict_pos:=pict_pos+1;
   if pict_pos>=(fon.Width div 3)*2 then pict_pos:=0;
   paintpict.Canvas.Draw(pict_pos,0,fon);
   paintbox1.Refresh;
end;
ладно, так работает, но изображение дёргается, мигает время от времени, как это исправить или каким компонентом его можно заменить (не Timage - на нём всё так же, только не мигает, хотя где-то на форуме мне писали, что paintbox работает быстрее Timage)

Добавлено через 19 минут
+ если убрать таймер и использовать
Delphi
1
2
sleep(10);
application.processmessages;
то форма даже не появляется (если это в процедуре создания формы), и если это:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure paint;
begin
  repeat
begin
 pict_pos:=pict_pos+1;
   if pict_pos>=(fon.Width div 3)*2 then pict_pos:=0;
   form1.paintbox1.Canvas.Draw(0,0,nil);
   sleep(10);
   application.ProcessMessages;
end;
until application.Terminated;
end;
вызывается таймером 1 раз, то изображение в paintbox-е стоит...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2014, 18:55
Ответы с готовыми решениями:

onPaint in TPaintBox
Всем привет. На боксе рисует сложная функция, которая занимает некоторое время. Тоесть вызывать...

Как содержимое TPaintBox сохранить в .png файл
Доброго времени суток. Мне нужно сохранить содержимое PaintBox в .png файлом с альфа слоем. Знаю,...

Движение изображения за курсором
За указателем мыши перемещается некоторое изображение (предусмотреть возможность выбора и смены...

Движение изображения по форме
создать программу для Windows, показывающую изображение, движущееся по форме. Движение имитируется...

34
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
01.04.2014, 00:26  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от angstrom Посмотреть сообщение
@UpdateTimer,
пишет ошибку "[dcc32 Error] Unit1.pas(73): E2010 Incompatible types: 'TFNTimeCallBack' and 'Pointer'"
0
angstrom
01.04.2014, 03:02 22
Значит где-то напутал.
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
01.04.2014, 06:08 23
Можно последнюю версию проекта? покопаю.
Лагают ли вот эти работы (вложения из моих постов): Нарисовать скатывающийся по ступенькам мячик Рисование мельницы Нарисовать кружок Кнопка произвольной формы
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
01.04.2014, 16:25  [ТС] 24
Цитата Сообщение от pHOMM Посмотреть сообщение
Можно последнюю версию проекта? покопаю.
Лагают ли вот эти работы (вложения из моих постов): Нарисовать скатывающийся по ступенькам мячик Рисование мельницы Нарисовать кружок Кнопка произвольной формы
В мельницы просто скорость смены кадров низкая, а от с мячиком так же иногда (в среднем через 0,6-0,8 секунды дёргается...)
Цитата Сообщение от angstrom Посмотреть сообщение
Значит где-то напутал.
М.б. из-за того, что у меня Delphi XE3? А у вас 7
0
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
01.04.2014, 21:12 25
Я работаю преимущественно на дельфи 2007. Но иногда гоняю на д7 и на дхе2/ Но не думаю что это хоть как-то зависит, механизм GDI не меняется, разве что обёртывающий его канвас чуть оптимайзнут.
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
01.04.2014, 23:13  [ТС] 26
Цитата Сообщение от pHOMM Посмотреть сообщение
Я работаю преимущественно на дельфи 2007. Но иногда гоняю на д7 и на дхе2/ Но не думаю что это хоть как-то зависит, механизм GDI не меняется, разве что обёртывающий его канвас чуть оптимайзнут.
на XE3 большинство компонентов имеют соовсем иные свойства, чем на Д7, так что и мультимедийный таймер там может создаваться по-другому
0
angstrom
02.04.2014, 01:06 27
Цитата Сообщение от vadim23409 Посмотреть сообщение
мультимедийный таймер там может создаваться по-другому
Это с какого перепугу?
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
03.04.2014, 16:22  [ТС] 28
Цитата Сообщение от angstrom Посмотреть сообщение
Это с какого перепугу?
ну вот у вас этот код создания мультимедийного таймера компилируется? Если да, то закиньте в архив и я его на ХЕ3 открою, увидим, заработает или нет (думаю, что нет, ибо что я уже не делал с этим:
Цитата Сообщение от angstrom Посмотреть сообщение
unit Unit1;
interface
uses
* Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls,
* StdCtrls, Buttons, MMSystem;
type
* TForm1 = class(TForm)
* * Timer1: TTimer;
* * procedure FormCreate(Sender: TObject);
* * procedure Timer1Timer(Sender: TObject);
* * procedure FormDestroy(Sender: TObject);
* * procedure FormPaint(Sender: TObject);
* private
* * { Private declarations }
* public
* * { Public declarations }
* * paintpict,
* * fon : Tbitmap;
* * pict_pos : Integer;
* * Timer : DWORD;
procedure FormUpdate;
* end;
var
* Form1: TForm1;
implementation
{$R *.dfm}
{$R fon.res}
procedure UpdateTimer(uTimerID, uMsg, dwUser, dw1, dw2 : Integer); stdcall;
begin
* TForm1(dwUser).FormUpdate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
* DoubleBuffered := True;
fon := TBitmap.Create;
* paintpict := TBitmap.Create;
* fon.LoadFromResourceName(hInstance, 'fon');
* paintpict.Height := fon.Height;
* paintpict.Width *:= fon.Width;
Timer := TimeSetEvent(25, 1, @UpdateTimer, Integer(Self), TIME_PERIODIC);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
* if Timer <> 0 then
* * TimeKillEvent(Timer);
fon.Free;
* paintpict.Free;
end;
procedure TForm1.FormUpdate;
begin
* pict_pos := (pict_pos + 2) mod (fon.Width div 3 * 2);
* FormPaint(Form1);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
* paintpict.Canvas.Draw(-1 * pict_pos, 0, fon);
* Canvas.Draw(0, 0, paintpict);
end;
end.
ничего не работает..
0
angstrom
04.04.2014, 00:03 29
Цитата Сообщение от vadim23409 Посмотреть сообщение
думаю, что нет
Я весь код выложил, после его тестирования (Дельфи 7).
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
04.04.2014, 16:24  [ТС] 30
Цитата Сообщение от angstrom Посмотреть сообщение
Я весь код выложил, после его тестирования (Дельфи 7).
я полностью копирую его на пустой проект и та же ошибка, ладно, скачаю Д7 и на нём попробую
0
angstrom
05.04.2014, 02:35 31
Исходный код и exe-файл. Код немного изменён под использование gdiplus.
Вложения
Тип файла: rar vadim23409_1.rar (456.5 Кб, 11 просмотров)
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
10.04.2014, 17:41  [ТС] 32
А если через firemonkey сделать? Там ведь отрисовка формы идёт через видеокарту.
0
angstrom
10.04.2014, 23:04 33
Если размер не имеет значение.
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
10.04.2014, 23:09  [ТС] 34
Цитата Сообщение от angstrom Посмотреть сообщение
Если размер не имеет значение.
да нет вроде, только как это в firemonkey реализовать? (там нет процедуры form1.canvas.draw) есть куча подобных, но я в них не разобрался...
0
angstrom
10.04.2014, 23:53 35
Я удалил XE версию Дельфи, так что, увы, помочь не смогу.
10.04.2014, 23:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2014, 23:53
Помогаю со студенческими работами здесь

Движение изображения с помощью курсора!
Доброго времени суток! Как запрограммировать движение изображения с помощью курсора. Например,...

Движение изображения по произвольной траектории
И все это в Windows Forms Перемещение изображения по произвольной траектории: 1)Нужен код...

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

Движение изображения на форме в хаотичном порядке
Нужно написать программу чтобы картинка двигалась рандомно по всей форме.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru