Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизВот привожу код и пусть кто мне сможет сказать что нем Найти похожие ветки
← →
Программер_ (2004-09-18 15:47) [0]что-нить не так!
PROCEDURE RebuildWindowRgn(Sender:TPageControl);
VAR FullRgn, Rgn,CurrentRgn: Hrgn;
LeftCl,TopCl,ClientX, ClientY, I,P,CWidth,CHeight: Integer;
BEGIN
WITH Sender DO
BEGIN
//определяем координаты закладок
CWidth := TabRect(PageCount-1).Right;
CHeight := TabRect(0).bottom-TabRect(0).top+3;
// определяем относительные координаты клиенской части
ClientX := (Width - ClientWidth) DIV 2;
ClientY := Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn := CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn := CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
//Создаем реион закладок и добавляем его к FullRgn
Rgn := CreateRectRgn(0,0,CWidth,CHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
//Создаем регион между закладками и TabSheet и добавляем его к FullRgn
Rgn := CreateRectRgn(0,Cheight,Width,CHeight-1);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
END;
WITH Sender.ActivePage DO
BEGIN
FOR I:= 0 TO ControlCount -1 DO
WITH Controls[I] DO
BEGIN
TopCl := Top+Sender.ActivePage.Top;
LeftCl := Left+Sender.ActivePage.Left;
Rgn := CreateRectRgn(ClientX + LeftCl, ClientY + TopCl, ClientX + LeftCl +
Width, ClientY + TopCl + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
END;
END;
SetWindowRgn(Sender.Handle,FullRgn,true);
END;
← →
DiamondShark © (2004-09-18 15:51) [1]
> ClientY := Height - ClientHeight - ClientX;
Эт чяво?
← →
Чайник (2004-09-18 18:28) [2]Каждый раз при вызове процедуры типа Create...Rgn под него выделяется память и его Handle помещается в стек. В приведенной процедуре я увидел пять вызовов Create. Так что удивляться, что после нескольких десятков вызовов данной процедуры стек переполняется???
После того, как использовал регион, убивай его:
DeleteObject(Rgn);
← →
Чайник (2004-09-18 18:32) [3]В данной программе, как мне кажется, Rgn надо убивать каждый раз после вызова CombineRgn, а регион FullRgn - после SetWindowRgn.
← →
Igorek © (2004-09-18 19:06) [4]
> Программер_ (18.09.04 15:47)
> что-нить не так!
Ага. Все.
← →
Программер_ (2004-09-19 14:27) [5]Фух огромное спасибо исправился...
все или может еще что-нить не то?
PROCEDURE RebuildWindowRgn(Sender:TPageControl);
VAR FullRgn, Rgn,CurrentRgn: Hrgn;
LeftCl,TopCl,ClientX, ClientY, I,P,CWidth,CHeight: Integer;
BEGIN
WITH Sender DO
BEGIN
//определяем координаты закладок
CWidth := TabRect(PageCount-1).Right;
CHeight := TabRect(0).bottom-TabRect(0).top+3;
// определяем относительные координаты клиенской части
ClientX := (Width - ClientWidth) DIV 2;
ClientY := Height - ClientHeight - ClientX;
// создаем регион для всей формы
FullRgn := CreateRectRgn(0, 0, Width, Height);
// создаем регион для клиентской части формы
// и вычитаем его из FullRgn
Rgn := CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
DeleteObject(Rgn);
//Создаем реион закладок и добавляем его к FullRgn
Rgn := CreateRectRgn(0,0,CWidth,CHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
DeleteObject(Rgn);
//Создаем регион между закладками и TabSheet и добавляем его к FullRgn
Rgn := CreateRectRgn(0,Cheight,Width,CHeight-1);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
DeleteObject(Rgn);
// теперь добавляем к FullRgn регионы каждого контрольного элемента
END;
WITH Sender.ActivePage DO
BEGIN
FOR I:= 0 TO ControlCount -1 DO
WITH Controls[I] DO
BEGIN
TopCl := Top+Sender.ActivePage.Top;
LeftCl := Left+Sender.ActivePage.Left;
Rgn := CreateRectRgn(ClientX + LeftCl, ClientY + TopCl, ClientX + LeftCl +
Width, ClientY + TopCl + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
DeleteObject(Rgn);
END;
END;
SetWindowRgn(Sender.Handle,FullRgn,true);
DeleteObject(FullRgn);
END;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.066 c