Страница 10 из 12
Re: Управление изображением на мониторе через COM порт
Добавлено: Вт дек 28, 2010 12:46:30
FRIM@N
значит сажусь за фотошоп - рисовать
собственно вот
лифт имеется отдельно, взгляните может я какие косяки не доглядел?И вообще как выглядит?
Re: Управление изображением на мониторе через COM порт
Добавлено: Чт дек 30, 2010 23:09:26
FRIM@N
http://kurspk2009.narod.ru/progr/delphi/animeDelphi.htm
там внизу есть листинг исходника
только вот при запуске встает на первом операторе unit pav; это опять каклй-то доп. нестандартный юнит?непрописан путь к открываемым картинкам--это как дельфи их находить будет,только по именам?что бы изменить направления движения на вертикальное нужно просто вместо X понаставить Y?Чему равен шаг shx? Для чего нужны ограничения "if x>500 then shx:=shx*-1;// ограничение справа"?
Код: Выделить всё
unit pav;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure rmKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
//Описание типов переменных
var
Form1: TForm1;
fon:tbitmap;//ГРАФИЧЕСКИЙ ОБРАЗ дома
KORB:TBITMAP;//ГРАФИЧЕСКИЙ ОБРАЗ лифта
x:integer;//координаты X лифта
shx:integer;//Шаг движения лифта по X
implementation
{$R *.DFM}
//Старт главной формы
procedure TForm1.FormCreate(Sender: TObject);
begin
shx:=6;
//
fon:=tbitmap.Create;//
korb:=tbitmap.Create;//
//
fon.LoadFromFile('Dom.bmp');//Загрузить в переменную 'fon' файл 'fon.bmp'
//
korb.LoadFromFile('lift.bmp');//Загрузить в переменную 'korb' файл 'korb.bmp'
korb.transparent:=true;//Прозрачность вокруг контура корабля
//
image1.Canvas.Draw(0,0,fon);//
image1.Canvas.Draw(x,60,korb);//
end;
//Работа таймера движение корабля
procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+shx;//текущая координата + шаг
if x>500 then shx:=shx*-1;// ограничение справа
if x<0 then shx:=shx*-1;//ограничение слева
image1.Canvas.Draw(0,0,fon);//возобновление фона
image1.Canvas.Draw(x,60,korb);//движение корабля
//
end;
end.
Re: Управление изображением на мониторе через COM порт
Добавлено: Пт дек 31, 2010 11:28:16
Murlock
когда дельфя подсвечивает ошибку, она ее распознаёт(даёт ей номер) и расшифровывает в самом нижнем списке окна с программным текстом. у вас скорее всего юнит был переименован вручую после создания. так делать нельзя. используйте дла переименований инспектор проекта. shx(shy) измеряется в пикселях.
Re: Управление изображением на мониторе через COM порт
Добавлено: Пт дек 31, 2010 13:47:30
FRIM@N
я произвел некоторую рихтовку,добавил в форму объекты таймера и image выпилил ненужные процедуры направление движения с клавиатуры и о чудо все запустилось без ошибок --только в форме пустой белый экран без движения.
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
img1: TImage;
img2: TImage;
tmr1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Tmr1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//Îïèñàíèå òèïîâ ïåðåìåííûõ
var
Form1: TForm1;
Dom:tbitmap;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ äîìà
lift:TBITMAP;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ ëèôòà
x:integer;//êîîðäèíàòû X ëèôòà
shx:integer;//Øàã äâèæåíèÿ ëèôòà ïî X
implementation
{$R *.DFM}
//Ñòàðò ãëàâíîé ôîðìû
procedure TForm1.FormCreate(Sender: TObject);
begin
shx:=6;
//
Dom:=tbitmap.Create;//
lift:=tbitmap.Create;//
//
Dom.LoadFromFile('Dom.bmp');//Çàãðóçèòü â ïåðåìåííóþ 'fon' ôàéë 'fon.bmp'
//
lift.LoadFromFile('lift.bmp');//Çàãðóçèòü â ïåðåìåííóþ 'korb' ôàéë 'korb.bmp'
//
img1.Canvas.Draw(0,0,Dom);//
img2.Canvas.Draw(x,60,lift);//
end;
//Ðàáîòà òàéìåðà äâèæåíèå êîðàáëÿ
procedure TForm1.tmr1Timer(Sender: TObject);
begin
x:=x+shx;//òåêóùàÿ êîîðäèíàòà + øàã
if x>500 then shx:=shx*-1;// îãðàíè÷åíèå ñïðàâà
if x<0 then shx:=shx*-1;//îãðàíè÷åíèå ñëåâà
img1.Canvas.Draw(0,0,Dom);//âîçîáíîâëåíèå ôîíà
img2.Canvas.Draw(x,60,lift);//äâèæåíèå êîðàáëÿ
end;
end.
Re: Управление изображением на мониторе через COM порт
Добавлено: Пт дек 31, 2010 13:57:30
Murlock
при старте х неопределено и может быть любым. присвойте ему 500 в событии Form1.OnCreate
Re: Управление изображением на мониторе через COM порт
Добавлено: Пт дек 31, 2010 14:49:54
FRIM@N
var
Form1: TForm1;
Dom:tbitmap;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ äîìà
lift:TBITMAP;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ ëèôòà
x:integer;//êîîðäèíàòû X ëèôòà
shx:integer;
здесь дописать Form1.OnCreate;x:=500;
и почему именно 500?
или вот
http://www.delphi-guru.pp.ua/news/otkry ... -12-13-113 открыть сразу гиф картинку ,для меня это будет проще намного, правда я не понял как установить библиотеку
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 22:08:16
Murlock
img2.Canvas.Draw(x,y,lift);
здесь: что-бы двигаться по вертикали х следует оставить фиксированным, и менять y.
y следует описать в var и проинициализировать внутри OnCreate.
gif лучше не использовать. могут получиться проблемы со связью изображения с внутринними программными событиями.
я бы просто нарисовал 3 или более разных бмп и показывал их по-мере надобности. но это всё рюшечки. самое главное - добиться правильности ВВ в порт. для этого достаточно и лабеля или эдита.
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 22:19:43
FRIM@N
лабель и эдит нужны были просто что бы действительно увидеть результат --получилось или нет , но так как это оказалось непросто я подумал что проще аралельно сообразить подпрограммы к которым будет переходить основная по команде с кнопки --как в общем-то и задумывалось
я бы просто нарисовал 3 или более разных бмп
ну я планирую сам дом сделать фоном,а лифт корабликом который будет перерисовыватся
я просмотрел программу и не нашел событие OnCreate только FormCreate и по прежнему открыт вопрос как программа находит картинки,т.к. она их ненаходит --при запуске белая форма,я поместил картинки в папку с проектом и даже пытался засунуть их перетаскиванием в форму
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 22:48:34
Murlock
загрузить картинку просто:
в менеджере объектов есть свойство picture тип - TBitmap. рядом кнопка с тремя точками. жмёте - диалог загрузки файла. по-моему, изображение встраивается в программный код. для инициализации переменных используйте FormCreate.
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:10:10
FRIM@N
он пишет Stream ream error и не загружает файл,тип файла БМП поставлен,да и сам он бмп
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:14:15
Murlock
какой у файла размер? может этот файл открыт какой другой программой? у меня нормально загружается.
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:19:48
FRIM@N
1024х768 так же я поставил в инспекторе
\\точно весь фэйл в размере --сам лифт нормально загрузился--какой максимальный размер можно туда затюхать?он кстати стал отображатся в форме при запуске ,но никуда не едет
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:27:18
Murlock
зачем так много? поставте флаг stretch, и этим вы растяните ваш битмап на весь canvas. после установки на окно обоих картинок, меньшую следует двигать её свойством top.
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:47:08
FRIM@N
поставте флаг stretch
там 2 значения тру и фальш--при обоих она остается меньше окна формы
меньшую следует двигать её свойством top.
двигать можно и мышкой но точность маленькая(( а каким свойством ее сдвинуть по горизонтали?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб янв 01, 2011 23:59:40
Murlock
при установке флага stretch в тру картинка растягивается до размеров рамки картинки.
по горигонтали картингка двигается её свойством left
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс янв 02, 2011 00:24:01
FRIM@N
а можно сделать так что бы картинка вставала по окну формы после запуска
взависимости от его размеров?
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс янв 02, 2011 13:03:14
Murlock
у рамки рисунка есть свойство anchors содержащее 4 компонента. установите их все в тру, и будет.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс янв 02, 2011 16:09:34
FRIM@N
почти получилось,у меня после запуска картинка не влезала в монитор если развернуть окно формы --появлялась прокрутка ,после изменения anchors все получилось но несоразмерно изменялся лифт и дом,у лифта я этот параметр тоже менял,вернул все на место прокрутка исчезла волшебным образом
но лифт так и стоит т.к. изображения выводятся и отображаются --наверно дело в таймере может лифт в ограничение движения упирается? или время обновления таймера мало?
Код: Выделить всё
procedure TForm1.tmr1Timer(Sender: TObject);
begin
y:=y+shx;//текущая координата + шаг
if y>500 then shx:=shx*-1;// ограничение справа \\\зачем эти ограничения может их убрать?
if y<0 then shx:=shx*-1;//ограничение слева
img1.Canvas.Draw(0,0,Dom);//возобновление фона
img2.Canvas.Draw(y,60,lift);//движение корабля \\\\цифра 60 это начальные координаты?тогда почему только 1 цифра ?
end;
Re: Управление изображением на мониторе через COM порт
Добавлено: Пн янв 03, 2011 11:45:05
Murlock
первая цифра -у вас называется y и Вы её меняете, хотя она описывает координату X. и у Вас она менняться не должна
вторая цифра - 60 это положение по Y она у Вас не меняется, а нужно менять её.
двигать canvas внутри рамки рисунка - некошерно. лучше меняйте img2.top это работает коректнее. шаг движения вычисляется из относительных размеров рисунков(img1.High и img2.High )
Re: Управление изображением на мониторе через COM порт
Добавлено: Пн янв 03, 2011 18:24:01
FRIM@N
он встает на первом же top а если применить анимацию в виде AVI файла ее размеры тоже можно будет растаскивать по форме?старт \стоп с нужных кадров?
Код: Выделить всё
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
img1: TImage;
img2: TImage;
tmr1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Tmr1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//Îïèñàíèå òèïîâ ïåðåìåííûõ
var
Form1: TForm1;
Dom:tbitmap;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ äîìà
lift:TBITMAP;//ÃÐÀÔÈ×ÅÑÊÈÉ ÎÁÐÀÇ ëèôòà
y:integer;//êîîðäèíàòû y ëèôòà
shx:integer;//Øàã äâèæåíèÿ ëèôòà ïî y
implementation
{$R *.DFM}
//Ñòàðò ãëàâíîé ôîðìû
procedure TForm1.FormCreate(Sender: TObject);
begin
shx:=6;
//
Dom:=tbitmap.Create;//
lift:=tbitmap.Create;//
//
Dom.LoadFromFile('Dom.bmp');//Çàãðóçèòü â ïåðåìåííóþ 'Dom' ôàéë 'Dom.bmp'
//
lift.LoadFromFile('lift.bmp');//Çàãðóçèòü â ïåðåìåííóþ 'lift' ôàéë 'lift.bmp'
//
img1.top.Draw(0,0,Dom);//
img2.top.Draw(60,x,lift);//
end;
//Ðàáîòà òàéìåðà äâèæåíèå ëèôòà
procedure TForm1.tmr1Timer(Sender: TObject);
begin
y:=y+shx;//òåêóùàÿ êîîðäèíàòà + øàã
if y>500 then shx:=shx*-1;// îãðàíè÷åíèå ñïðàâà
if y<0 then shx:=shx*-1;//îãðàíè÷åíèå ñëåâà
img1.top.Draw(0,0,Dom);//âîçîáíîâëåíèå ôîíà
img2.top.Draw(60,x,lift);//äâèæåíèå êîðàáëÿ
end;
end.