![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ScreenToClient [D5, Win95/98]
Fast © (2002-01-14 19:48:00)Есть Form1 на ней Image1 поверх картинки лежит Label1.
Задача: нарисовать прямоугольник на картинке точно под лейблом.
Делаю так
var
Rect:TRect;
..............
begin
pT:=Point(Label1.top,Label1.left);
REct.TopLeft:=Image1.ScreenToClient(Form1.ClientToScreen(pT));
pB:=Point(Label1.top+Label1.Width,Label1.left+Label1.Height);
Rect.BottomRight:=Image1.ScreenToClient(Form1.ClientToScreen(pB));
Image1.Canvas.FillRect(Rect);
end;
И теперь обясните мне почему нарисованный прямоугольник постоянно смещен на 32 точки ниже и 32 точки правее от лейбла.
По идее и черт бы этими 32"мя, но я сомневаюсь что это независт от системных настроек, тоесьт есть шанс получить у какого нибуть клиента лабуду.
Набережных С. (2002-01-14 22:21:00) [1]Недурно было-бы сделать так :
pT:=Point(Label1.left,Label1.top);
pB:=Point(Label1.left+Label1.Width,Label1.top+Label1.Height);
если только это не противоречит Вашим принципам.
Юрий Зотов (2002-01-14 21:57:00) [2]Попробуйте проще:
var
R: TRect;
begin
R := Label1.BoundsRect;
OffsetRecT(R, -Image1.Left, -Image1.Top);
Image1.Canvas.FillRect(R);
...
Adder (2002-01-14 21:45:00) [3]begin
Image1.Canvas.FillRect(Rect(Label1.Left,Label1.Top,
Label1.Left+Label1.Width,Label1.Top+Label1.Height));
end;
:)
Fast (2002-01-14 21:45:00) [4]Все я съехал. Извините все правилно просто я ширину с высоной перепутол.
Анатолий (2002-01-14 21:25:00) [5]А не проще вычислить координаты label на форме, учесть необходимое смещение и затем рисовать прямоугольник.