Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Некорректное определение 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
2-1203691244
San1
2008-02-22 17:40
2008.03.23
наследование свойства OnMouseMove


2-1204100700
DimOk
2008-02-27 11:25
2008.03.23
Формы fsMDIChild в DLL


2-1203715169
no
2008-02-23 00:19
2008.03.23
Case label outside of rang


2-1203944488
tytus
2008-02-25 16:01
2008.03.23
как Определить имя компа в локальной сети по IP адресу?


11-1186278717
ElectriC
2007-08-05 05:51
2008.03.23
Проблем-ка с TIcon