2010-06-10 8 views
1

Используя следующий код в Delphi 2007:Заполнение области рисует его холст


procedure TfrmTest.PaintBox1Paint(Sender: TObject); 
const 
    Rect_Size = 10; 
begin 
    PaintBox1.Canvas.Brush.Color := clYellow; 
    PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.width, PaintBox1.height)); 

    PaintBox1.Canvas.Brush.Color := clRed; 
    DrawARect(PaintBox1.Canvas, 0, 0, Rect_Size, Rect_Size); 
end; 

procedure TfrmTest.DrawARect(ACanvas: TCanvas; iLeft, iTop, iWidth, iHeight: Integer); 
var 
    rgnMain: HRGN; 
begin 
    rgnMain := CreateRectRgn(iLeft, iTop, iLeft + iWidth, iTop + iHeight); 
    try 
    SelectClipRgn(ACanvas.handle, rgnMain); 
    ACanvas.FillRect(ACanvas.ClipRect); 
    SelectClipRgn(ACanvas.handle, 0); 
    finally 
    DeleteObject(rgnMain); 
    end; 
end; 

я получаю это: (Желтую область показывает границу PaintBox1).

alt text http://www.freeimagehosting.net/uploads/62cf687d29.jpg

(изображение показывает форму с желтой коробкой [PaintBox1] в центре. Однако мой красный прямоугольник в [rgnMain] был обращен в позиции 0,0 на форме)

Моих ожиданий было то, что красный прямоугольник будет в левом верхнем углу холста PaintBox1, а не в холсте формы. Почему нет? Можно ли использовать регионы только с элементами управления, имеющими дескриптор Windows?

Thanks

+0

Я отредактировал ваше сообщение, чтобы изображение появилось. –

+0

Спасибо за это, Mason – Xanyx

ответ

2

Контекст устройства требует ручку окна. То, что VCL делает для не оконных элементов управления, заключается в смещении порта представления DC, полученного для TWinControl, на котором они установлены, с использованием SetWindowOrgEx в TWinControl.PaintControls. Новый порт представления находится в логических единицах. Поэтому для «TGraphicControl», который не спускается с TWinControl, вы можете использовать функции GDI, которые работают с логическими координатами. См. Раздел примечаний для SelectClipRgn, в котором говорится, что координаты должны быть указаны в единицах устройства. Вы бы указали offset the region или координаты.

+0

Спасибо Sertac, что объясняет это – Xanyx

Смежные вопросы