Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
ВнизНекорректное определение Trect Найти похожие ветки
← →
webpauk © (2008-02-21 12:22) [0]
program Project1;
uses
Windows;
{$R *.res}
var
fReg: HRGN;
fRect: Trect;
fArr: array of Tpoint;
begin
SetLength(fArr, 3);
fArr[Low(fArr)].X:=100;
fArr[Low(fArr)].Y:=100;
fArr[Low(fArr)+1].X:=150;
fArr[Low(fArr)+1].Y:=90;
fArr[Low(fArr)+2].X:=200;
fArr[Low(fArr)+2].Y:=110;
fReg:=CreatePolygonRgn(fArr, Length(fArr), WINDING);
GetRgnBox(fReg, fRect);
sleep(0);
end.
fRect = (0, 0, 0, 0)???
← →
webpauk © (2008-02-21 12:28) [1]а когда
fArr: array[1..3] of Tpoint;
всё ок
?!
← →
Palladin © (2008-02-21 12:40) [2]
CreatePolygonRgn(@fArr[0], Length(fArr), WINDING);
учим разницу между статическими и динамическими массивами
← →
ЮЮ © (2008-02-21 12:42) [3]array of Tpoint - это же чистое Delphi. Снаружи это не поймут. Иначе зачем им ещё Length(fArr) нужен? :)
Тогда уж CreatePolygonRgn(fArr[0], Length(fArr), WINDING);
P.S.
fArr[Low(fArr)].X:=100;
...
fArr[Low(fArr)+2].Y:=110;
Почему бы без лтшнего выпендрежа не написать
fArr[0].X:=100;
...
fArr[3].Y:=110;
Побайтная система оплаты труда?
← →
Григорьев Антон © (2008-02-21 12:46) [4]
> fReg:=CreatePolygonRgn(fArr, Length(fArr), WINDING);
В случае динамического массива вы передаёте в этой строчке не указатель на массив, а указатель на указатель на массив, и регион либо не создаётся (что более вероятно), либо создаётся совсем не такой, как вы хотели.
Отсюда две морали. Во-первых, писать надо так:fReg:=CreatePolygonRgn(fArr[Low(fArr)], Length(fArr), WINDING);
Это подойдёт и для статического, и для динамического массива.
Во-вторых, результаты API-функций проверять надо, чтобы знать, где ошибка.
← →
webpauk © (2008-02-21 12:54) [5]ладно
есть еще вопрос
а почему Rect имеет значения (100, 91, 198, 110)
а
fArr[Low(fArr)]:=Point(100, 100);
fArr[Low(fArr)+1]:=Point(150, 90);
fArr[Low(fArr)+2]:=Point(200, 110);
← →
Григорьев Антон © (2008-02-21 13:11) [6]Что-то я припоминаю в книге Феня Юаня на тему того, что прямоугольники для регионов считаются не так, как при рисовании - дополнительная единица отбрасывается и т.п. Думаю, вы столкнулись с этим эффектом. Если у вас есть эта книга, поищите там.
← →
webpauk © (2008-02-21 13:15) [7]
> Григорьев Антон © (21.02.08 13:11) [6]
ушел от GetRgnBox
вручную прошелся по array и нашел Max(X, Y) и Min(X, Y)
глюки ушли...
← →
Григорьев Антон © (2008-02-21 13:25) [8]
> webpauk © (21.02.08 13:15) [7]
> глюки ушли...
Наивный :) Нарисуйте красным яэтот прямоугольник, а поверх него - ваш многоугольник чёрным :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c