Текущий архив: 2006.12.03;
Скачать: CL | DM;
Вниз
Перекрыл GetClientRect, отрисовывается не весь компонент Найти похожие ветки
← →
Vasiliy (2006-11-14 21:51) [0]В наследнике TCustomControl перекрыл метод GetClientRect для того, чтобы компоненты располагающиеся на нем занимали только отведенную клиентскую область.
Всё хорошо, только компонент перестал отрисовываться снизу и справа от клиентской области, тоесть Canvas.ClipRect при отрисовке имеет размер меньше чем область которую нужно отрисовывать.
Как с этим бороться?
← →
Ketmar © (2006-11-14 22:23) [1]вот удивительно-то. я кусок вырезал, и на вырезаном не рисует...
← →
DrPass © (2006-11-14 23:25) [2]
> В наследнике TCustomControl перекрыл метод GetClientRect
> для того, чтобы компоненты располагающиеся на нем занимали
> только отведенную клиентскую область
А ты не перекрывай GetClientRect. В Коране такого нет, где ты такую ересь нашел? Истинный воин джихада должен отлавливать WM_NCCALCSIZE и в этом обработчике писать размеры клиентской области. Только так он может пройти после смерти по мосту, который тоньше человеческого волоса и острее меча.
← →
Vasiliy (2006-11-15 08:20) [3]Удалено модератором
← →
Vasiliy (2006-11-18 11:48) [4]
> отлавливать WM_NCCALCSIZE и в этом обработчике писать размеры
> клиентской области.
Сделал вот так:procedure TavpGraphForm.WMNCCalcSize(var Message: TWMNCCalcSize);
begin
inherited;
with Message.CalcSize_Params^ do
begin
With rgrc[0] do
begin
Inc(Left, FLeftImage.Width); // Размер левой части рамки
Inc(Top, FLeftImage.Height); // Размер верхней части рамки
Dec(Right, FRightImage.Width); // Размер правой части рамки
Dec(Bottom, FBottomImage.Height); // Размер нижней части рамки
end;
end;
end;
Работает, только не так как надо :(
Теперь и моя рамка рисуется в уменьшенной области.
А нужно чтобы было так:
Рисую рамку и определяю клиентскую область для остальных компонентов, чтобы не вылазили на рамку.
Может мне не клиентскую область нужно изменять?
Чтото уже совсем запутался :(
← →
DrPass © (2006-11-18 13:53) [5]
> Vasiliy (18.11.06 11:48) [4]
Да нет, все верно. Смотря только где ты надумал рисовать свою рамку. Теперь, поскольку у тебя она за пределами клиентской области, то и перерисовывать ее нужно в обработчике WM_NCPAINT
← →
Vasiliy (2006-11-18 14:36) [6]
> DrPass © (18.11.06 13:53) [5]
А примера отрисовки за пределами клиентской области в WM_NCPaint нет случайно?
← →
Vasiliy (2006-11-18 15:27) [7]Рзобрался ...
Определил вот такой обработчик:procedure TavpGraphForm.WMNCPaint(var Message: TMessage);
Var ACanvas: TCanvas;
begin
inherited;
ACanvas := TCanvas.Create;
try
ACanvas.Handle := GetWindowDC(Handle);
NCPaint(ACanvas);
finally
ReleaseDC(Handle, ACanvas.Handle);
ACanvas.Free;
end;
end;
Где NCPaint бывший метод Paint.
Всё работает, только теперь проблемы с WM_MouseMove, неправильные координаты X и Y получаются :)
Будем дальше разбираться ....
DrPass Спасибо!
Страницы: 1 вся ветка
Текущий архив: 2006.12.03;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.032 c