Управление изображением на мониторе через COM порт

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

значит сажусь за фотошоп - рисовать

собственно вот Изображение

лифт имеется отдельно, взгляните может я какие косяки не доглядел?И вообще как выглядит?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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.
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

когда дельфя подсвечивает ошибку, она ее распознаёт(даёт ей номер) и расшифровывает в самом нижнем списке окна с программным текстом. у вас скорее всего юнит был переименован вручую после создания. так делать нельзя. используйте дла переименований инспектор проекта. shx(shy) измеряется в пикселях.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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.

(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

при старте х неопределено и может быть любым. присвойте ему 500 в событии Form1.OnCreate
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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 открыть сразу гиф картинку ,для меня это будет проще намного, правда я не понял как установить библиотеку
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

img2.Canvas.Draw(x,y,lift);
здесь: что-бы двигаться по вертикали х следует оставить фиксированным, и менять y.
y следует описать в var и проинициализировать внутри OnCreate.
gif лучше не использовать. могут получиться проблемы со связью изображения с внутринними программными событиями.
я бы просто нарисовал 3 или более разных бмп и показывал их по-мере надобности. но это всё рюшечки. самое главное - добиться правильности ВВ в порт. для этого достаточно и лабеля или эдита.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

лабель и эдит нужны были просто что бы действительно увидеть результат --получилось или нет , но так как это оказалось непросто я подумал что проще аралельно сообразить подпрограммы к которым будет переходить основная по команде с кнопки --как в общем-то и задумывалось
я бы просто нарисовал 3 или более разных бмп
ну я планирую сам дом сделать фоном,а лифт корабликом который будет перерисовыватся
я просмотрел программу и не нашел событие OnCreate только FormCreate и по прежнему открыт вопрос как программа находит картинки,т.к. она их ненаходит --при запуске белая форма,я поместил картинки в папку с проектом и даже пытался засунуть их перетаскиванием в форму
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

загрузить картинку просто:
в менеджере объектов есть свойство picture тип - TBitmap. рядом кнопка с тремя точками. жмёте - диалог загрузки файла. по-моему, изображение встраивается в программный код. для инициализации переменных используйте FormCreate.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

он пишет Stream ream error и не загружает файл,тип файла БМП поставлен,да и сам он бмп
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

какой у файла размер? может этот файл открыт какой другой программой? у меня нормально загружается.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

1024х768 так же я поставил в инспекторе
\\точно весь фэйл в размере --сам лифт нормально загрузился--какой максимальный размер можно туда затюхать?он кстати стал отображатся в форме при запуске ,но никуда не едет
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

зачем так много? поставте флаг stretch, и этим вы растяните ваш битмап на весь canvas. после установки на окно обоих картинок, меньшую следует двигать её свойством top.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

поставте флаг stretch
там 2 значения тру и фальш--при обоих она остается меньше окна формы
меньшую следует двигать её свойством top.
двигать можно и мышкой но точность маленькая(( а каким свойством ее сдвинуть по горизонтали?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

при установке флага stretch в тру картинка растягивается до размеров рамки картинки.
по горигонтали картингка двигается её свойством left
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

а можно сделать так что бы картинка вставала по окну формы после запуска
взависимости от его размеров?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

у рамки рисунка есть свойство anchors содержащее 4 компонента. установите их все в тру, и будет.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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;

(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

первая цифра -у вас называется y и Вы её меняете, хотя она описывает координату X. и у Вас она менняться не должна
вторая цифра - 60 это положение по Y она у Вас не меняется, а нужно менять её.
двигать canvas внутри рамки рисунка - некошерно. лучше меняйте img2.top это работает коректнее. шаг движения вычисляется из относительных размеров рисунков(img1.High и img2.High )
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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.
(\_(\
(=' :') радиоКотЭ
(,('')('')
Ответить

Вернуться в «Интеграция с ПК»