![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetWindowRgn [D6, D7, Win95/98, WinME]
Asteroid © (2002-12-05 23:56:00)Что за глюк? Ставлю SetWindowRgn( wnd, R, true ), потом рисую - и он рисует за пределами региона! Повторный вызов SetWindowRgn( wnd, R, true ) ничего не дает
Asteroid (2002-12-06 19:20:00) [1]> Игорь Шевченко © (06.12.02 18:19)
Наверное
СПАСИБО! Оно работает!!! :))
Игорь Шевченко (2002-12-06 18:19:00) [2]wnd := Classes.AllocateHWND( WndProc );
Это что, в D7 она в Classes переехала ? :-)))
Asteroid (2002-12-06 18:12:00) [3]> han_malign © (06.12.02 17:23)
wnd := Classes.AllocateHWND( WndProc );
> Игорь Шевченко © (06.12.02 17:07)
Упс...Спасибо...
han_malign (2002-12-06 17:23:00) [4]К тому же - SetWindowRgn( Handle, R, true );
wnd - где и что???(в смысле инициализируется).
Игорь Шевченко (2002-12-06 17:07:00) [5]Canvas у TGraphicControl относится к форме (или к родительскому окну). Так делать нельзя ни в коем случае.
Надо наследовать от TCustomControl и управлять регионом окна, Handle которого уже имеется...
Asteroid (2002-12-06 16:07:00) [6]
type TNewButton = class ( TGraphicControl )
private
wnd: HWND;
.....
protected
procedure Paint(); override;
.....
end;
procedure TNewButton.Paint();
var DC: HDC;
R: HRGN;
RD: TRect;
begin
RD := ClientRect;
R := CreateRoundRectRgn( RD.Left, RD.Top, RD.Right, RD.Bottom, 20, 20 );
SetWindowRgn( wnd, R, true );
if ( Canvas= nil ) then exit;
Canvas.Lock();
DC := Canvas.Handle;
// далее отрисовка, в т.ч. приходится рисовать
// за пределами назначенной области R
// по всему ClientRect. Рисуется по DC.
.............
Canvas.Unlock();
SetWindowRgn( wnd, R, true );
end;
Игорь Шевченко (2002-12-06 15:05:00) [7]Я же кода не вижу на чем ты рисуешь...И в какой момент...
Asteroid (2002-12-06 14:29:00) [8]Т.е. DC от канваса не совпадает с DC окна и он рисует на канве за пределамиокна?
Игорь Шевченко (2002-12-06 09:43:00) [9]The SetWindowRgn function sets the window region of a window. The window region determines the area within the window where the operating system permits drawing. The operating system does not display any portion of a window that lies outside of the window region
Может, не там рисуешь ? Не в том DC, к примеру...