Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Вниз

Помогите перевести код на паскаль   Найти похожие ветки 

 
Художник   (2009-07-26 03:00) [0]

Структуры уже в паскале

type
cairo_path_data_t = record
   case LongInt of
     0 : ( header : record
           _type : cairo_path_data_type_t;
           length : LongInt;
         end );
     1 : ( point : record
           x : Double;
           y : Double;
         end );
 end;
Pcairo_path_data_t = ^cairo_path_data_t;

type
cairo_path_t = record
   status : cairo_status_t;
   data : Pcairo_path_data_t;
   num_data : LongInt;
 end;
Pcairo_path_t = ^cairo_path_t;

cairo_copy_path() возвращает в Pcairo_path_t

Собсно сам код.

{
   String string = "";
   cairo_path_t* path = cairo_copy_path(platformPath()->m_cr);
   cairo_path_data_t* data;

.....

 for (int i = 0; i < path->num_data; i += path->data[i].header.length) {
       data = &path->data[i];



Вот непонятно каким образом может быть data[i]? и как можно это обойти. Единственное что приходит на ум делать сделать динамический массив и ему присвоить указатель на поле data. Попробовал. Вроде работает, но както странно. Допустим вводишь четыре точки, возвращает восемь. И поля через один чередуются со всякой чухней.

Кстати это с++?

да привожу полную процедуру может там что напутал. Хотя недолжно бы...

procedure TForm1.Button1Click(Sender: TObject);
var
 cr: Pcairo_t;
 Surfase: Pcairo_surface_t;
 dc: THandle;
 pt: Pcairo_path_t;
 data: array of cairo_path_data_t;
 x: integer;
begin
 Surfase := cairo_win32_surface_create_with_dib(CAIRO_FORMAT_ARGB32, 300, 300);

 cr := cairo.cairo_create(Surfase);
 cairo_scale(cr, 300, 300);

 cairo_set_source_rgba(cr, 1, 1, 1, 1);
 cairo_paint(cr);

 cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);

 cairo_move_to(cr, 0, 0);
 cairo_line_to(cr, 0.8, 0.8);
 cairo_line_to(cr, 0.4, 0.8);
 cairo_line_to(cr, 0, 0);

 
/////////////////////////////////////////////////
 pt := cairo_copy_path(cr);
 setlength(data, pt.num_data);
 pointer(data) := pt.data;

 for x := 0 to pt.num_data - 1 do
 begin
 showmessage(inttostr(data[x].header.length));
   memo1.Lines.Add(floattostr(data[x].point.x) + "x" + floattostr(data[x].point.y));

   case data[x].header._type of
     CAIRO_PATH_MOVE_TO: showmessage("CAIRO_PATH_MOVE_TO");
     CAIRO_PATH_LINE_TO: showmessage("CAIRO_PATH_LINE_TO");
     CAIRO_PATH_CURVE_TO: showmessage("CAIRO_PATH_CURVE_TO");
     CAIRO_PATH_CLOSE_PATH: showmessage("CAIRO_PATH_CLOSE_PATH");
   end;
 end;
 ////////////////////////////////////////////////////

 cairo_set_source_rgba(cr, 1, 0, 1, 1);
 cairo.cairo_fill(cr);
 cairo_stroke(cr);

 cairo_destroy(cr);

 dc := cairo_win32_surface_get_dc(Surfase);
 bitblt(canvas.Handle, 0, 0, 300, 300, dc, 0, 0, SRCCOPY);

 cairo_surface_destroy(Surfase);

end;


 
TUser ©   (2009-07-26 07:12) [1]


> Вот непонятно каким образом может быть data[i]

Это указатель. Вместо массивов используется - указатель на первый элемент. То есть разумнее написать Pcairo_path_data_t (longint (data) + i * sizeof (cairo_path_data_t)) или вообще заменить на массив (но тогда, возможно, думать придется).



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.09.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
2-1248329999
Лёша
2009-07-23 10:19
2009.09.27
Экпрорт в Excel произвольного набора данных.


15-1248813004
Юрий
2009-07-29 00:30
2009.09.27
С днем рождения ! 29 июля 2009 среда


1-1216800759
artkil
2008-07-23 12:12
2009.09.27
Unicode в Delphi через TntListBox


15-1248848901
ZeroDivide
2009-07-29 10:28
2009.09.27
Подножка для Delphi


2-1247846262
datorn
2009-07-17 19:57
2009.09.27
Эффект падающих цифр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский