Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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, к примеру...


Наверх

Титульная страница Поиск, карта сайта Написать письмо