Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Перекрыл 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
2-1163580837
Sanyok
2006-11-15 11:53
2006.12.03
По правте пожалуйста этот запрос не правильно делит


15-1163252014
antonn
2006-11-11 16:33
2006.12.03
опять про пхп (а может и нет...)


2-1163602406
maxXP
2006-11-15 17:53
2006.12.03
Выделение целой строки StringGrid


2-1163394280
Lebedev
2006-11-13 08:04
2006.12.03
Можно ли регулировать положение текста (caption) TPanel?


6-1152261039
Alexey_
2006-07-07 12:30
2006.12.03
Задержка при подключении через сокетные компоненты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский