Главная страница
    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.059 c
15-1163406200
Станислав
2006-11-13 11:23
2006.12.03
WinAPI программист


2-1163146941
Access
2006-11-10 11:22
2006.12.03
События (свойства) ListView


3-1159550644
Kley
2006-09-29 21:24
2006.12.03
Exel&Delphi


2-1163353965
md
2006-11-12 20:52
2006.12.03
DBEdit


15-1163494454
ORMADA
2006-11-14 11:54
2006.12.03
Сообщество Delphi7 развивает свою версию delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский