Поиск аналога виндовых функций в FPC

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 10:16:47

Доброе время суток. Сейчас разрабатываю проект в делфях (мне в нем пока проще). Затем хочу перетащить его на fpc. В качестве IDE буду юзать Lazarus. Компилить хочу и для винды и для линукса. На данный момент разрабатываю парсер wmf/emf файлов. Без использования специализированной winapi метадряни. Для отрисовки хотел заюзать функции типа BeginPath, EndPath, PathToRegion, PaintRGN, FrameRGN и т.п. из юниты windows.
Такой вопрос есть ли аналоги этих функций в fpc/lazarus под виндой/линуксом? Если есть то в какой юните они лежат.
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Mr.Smart » 24.07.2009 10:37:45

Всё что для Windows в соответсвующем модуле Windows :wink:
Утверждать небуду, но возможно есть аналоги и для Linux....
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 10:55:59

но возможно есть аналоги и для Linux....

вот это "возможно" хотелось бы и узнать точно. В противном же случае придется обходиться без этих функций, что в конечном итоге сильно повлияет на скорость.

да и еще небольшой вопрос. Чтоб новую ветку не создавать.
На делфях у мну такой код

var
pRecWmf:PMetaRecord;
buff:string;
...
setlength(buff, size);
pRecWmf:=Pointer(buff)
...

работает на ура. Под лазарем же ругается, что-то типа "Error convert что-то там. непомню"

возможно из-за юникодовского string, хотя недолжно бы. Да и кстати какой тип строки в фпк не юникодовский
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Mr.Smart » 24.07.2009 11:20:48

String - однобайтная строка
WideString - двухбайтная строка
Код: Выделить всё
pRecWnf:=@buff[1];


Добавлено спустя 10 минут 25 секунд:
Посмотри этот пакет. Там реализован класс TMetaFile

Добавлено спустя 43 секунды:
но он только для Windows :(
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 11:38:33

я его уже смотрел прежде чем начинать писать парсер. Он и впрям только для винды (все из за "специализированной winapi метадряни") и ктомуже


Код: Выделить всё
procedure TMetafile.LoadFromFile(const Filename: String);
begin
     [b] raise EComponentError.Create('Not Implemented');[/b]
end;
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Vadim » 24.07.2009 11:55:53

Alex_123_1
А Вы напишите на русском языке, что делает каждая из этих функций, тогда можно быстро им найти замену или в Linux или fpc (несвязанную с WinAPI).
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 12:33:11

Vadim 24.07.2009 11:55:53


Код: Выделить всё
var
  rgn: hRGN;    ////указатель на структуру региона в памяте

begin


/////////////////////////////////////////// привязываем хендл канвы к создаваемому пути
  BeginPath(canvas.Handle);
///////////////////////////////////////////рисуем на канве////////////////////
  Canvas.Rectangle(50, 50, 200, 200);       
  Canvas.Rectangle(80, 80, 120, 120);
///////////////////////////////////////////закрываем путь////////////////////
  EndPath(canvas.Handle);
////////////////////////////////////////считываем с канвы инвормацию преобразуя ее в регион/////
  RGN := PathToRegion(canvas.Handle);
////////////////////////////////////////отрисовываем регион "заливку"/////////
  Canvas.Brush.Color := clred;
  PaintRGN(canvas.Handle, RGN);
////////////////////////////////////////отрисовываем регион "обводку"/////////
  Canvas.Brush.Color := clblue;
  FrameRGN(canvas.Handle, rgn, canvas.Brush.Handle, 5, 2);

end;


в итоге получается красный квадрат, со сковзной дыркой и синей обводкой, которая внизу и верху 2 пикселя, а по бокам 5 пикселей.
Это нужно для того чтоб получилась заливка на канве (без floodfill) например этого



EMR_HEADER
EMR_SETMAPMODE
EMR_SETWINDOWORGEX
EMR_SETWINDOWEXTEX
EMR_SETWINDOWORGEX
EMR_SETWINDOWEXTEX
EMR_SETVIEWPORTORGEX
EMR_SETVIEWPORTEXTEX
EMR_SETWINDOWEXTEX
EMR_SETVIEWPORTEXTEX
EMR_SETPOLYFILLMODE
EMR_EXTCREATEPEN
EMR_SELECTOBJECT

EMR_BEGINPATH
EMR_MOVETOEX
EMR_LINETO
EMR_POLYBEZIERTO16
EMR_LINETO
EMR_POLYBEZIERTO16
EMR_LINETO
EMR_POLYBEZIERTO16
EMR_LINETO
EMR_POLYBEZIERTO16
EMR_CLOSEFIGURE
EMR_ENDPATH


EMR_STROKEPATH
EMR_SELECTOBJECT
EMR_DELETEOBJECT
EMR_EOF

или чтонить еще сложнее.

Это считка команд с emf файла. Где отображен квадрат с круглеными углами
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Vadim » 24.07.2009 12:49:00

Alex_123_1 писал(а):привязываем хендл канвы к создаваемому пути

Вот если, к примеру, что такое хэндл канвы я понимаю, в Х-ах ему соответствует графический контекст, который получают функцией XCreateGC() (в WinAPI аналог - CreateDC() или GetDC() ), то что такое "путь", Вы можете рассказать?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 13:13:35

что такое "путь", Вы можете рассказать?


то же, что и кривые безье, только (насколько я знаю) более сложно организваные.

в частности регион это (грубо) замкнутый объект с заливкой внутри.
При выполнении команды
RGN :=PathToRegion(canvas.Handle);
на самом деле создается два региона при отрисовке которых происходит вычитание одного из другого, таким образом появляется "дырка"

а path же ето единая кривая без всяких вырезаний. Ее можно хорошо наблюдать например в кореле. Когда из одного объекта вырезаешь другой
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Vadim » 24.07.2009 13:17:58

Alex_123_1
Хм... Можно ли тогда сказать, что "путь" - это контуры (границы) фигуры?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 13:25:10

можно сказать и так. Причем им (контурам) совсем не обязательно принадлежать единой обводке. Например можно отобразить два квадрата на растоянии метра друг от друга и объеденить их в один "путь". И этот "путь" будет единой кривой со всеми вытекающими из этого свойствами.

Добавлено спустя 8 минут 36 секунд:
а path же ето единая кривая без всяких вырезаний.


а еще точнее, если не ошибаюсь, это массив регионов...
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Max Rusov » 24.07.2009 14:34:49

Используйте Wine. У Вас будет все (почти все), что есть под Windows.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Поиск аналога виндовых функций в FPC

Сообщение Alex_123_1 » 24.07.2009 14:57:39

да ну, както несерьезно.
Вот можно попытаться выдернуть реализацию этих функций из исходников wine... но чувствую это будет еще тот гемор
Alex_123_1
новенький
 
Сообщения: 26
Зарегистрирован: 24.07.2009 10:02:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Павел Ишенин » 24.07.2009 16:11:16

Не все функции для отрисовки ломаных реализованы в lazarus. Так, например, есть MoveToEx, LineTo, PolyLine, но нет BeginPath, EndPath. Для их использования надо подключать модуль LCLIntf. При нахождении аналогов необходимых функций в gtk2, qt, carbon их будет можно добавить и в LCL.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Поиск аналога виндовых функций в FPC

Сообщение Vadim » 24.07.2009 17:29:28

Alex_123_1 писал(а):да ну, както несерьезно.

Наоборот, как раз именно это и серьёзно. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

Рейтинг@Mail.ru