Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.20;
Скачать: CL | DM;

Вниз

ограничить клиентскую область   Найти похожие ветки 

 
DevilDevil ©   (2006-11-24 15:43) [0]

надо решить задачу, думаю простенький компонент на основе панели написать. Всё упирается в одно: необходимо ограничить клиентскую область, внутри которой действуют все Align-законы  дочерних компонентов


 
DimaBr   (2006-11-24 15:48) [1]

AlignControls(AControl: TControl; var Rect: TRect);
Заполняем Rect


 
GrayFace ©   (2006-11-25 17:20) [2]

Лучше, наверное, AdjustClientRect.


 
DevilDevil ©   (2006-11-25 18:42) [3]

спасибо, попробую в понеделник


 
DevilDevil ©   (2006-11-27 13:00) [4]

пробую в конструкторе компонента-панели:

и AdjustClientRect(Rect(100, 100, 500, 400));
и AlignControls(Self, Rect(100, 100, 500, 400));

результат прежний. Можно примерчик?


 
DimaBr   (2006-11-27 13:23) [5]

ARect.Top := 30;


 
DimaBr   (2006-11-27 13:27) [6]

TMyPanel = class(TPanel)
 protected
   procedure AlignControls(AControl: TControl; var Rect: TRect);override;
end;

procedure TMyPanel.AlignControls(AControl: TControl; var Rect: TRect);
begin
 Rect.Top := 20;
 inherited;
end;


 
DevilDevil ©   (2006-11-27 13:41) [7]


> DimaBr   (27.11.06 13:27) [6]


Спасибо большое!


 
DevilDevil ©   (2006-12-06 16:02) [8]

Странные вещи с творятся с Border. Если я наследую компонент от TCustomControl, то мышиные события на бордюре отлавливаются. Если я меняю родителя на TCustomControl, то мышиные события не приходят. Почему? Как лечить?


 
DimaBr   (2006-12-06 16:47) [9]

Вообще-то  родителя с TCustomControl на TCustomControl поменять невозможно, разве что через промежуточное звено.


 
DevilDevil ©   (2006-12-06 17:21) [10]

Сорри. Если наследую от TCustomPanel, то всё нормально. Нужно от TCustomControl


 
DimaBr   (2006-12-07 08:45) [11]

Само понятие Border (BorderWidth) только в TCustomPanel и появляется, откуда оно в TCustomControl ??? Неужеле трудно ткнуть мышкой  в класс + Ctrl и посмотреть ???


 
DevilDevil ©   (2006-12-07 15:06) [12]

> DimaBr   (07.12.06 08:45) [11]

Нет, Borders заложены ещё в TCustomControl. Отрисовок никаких (вроде) не делает, делает только отступы. В исходниках TCustomPanel мыштных собтий не перехватывается ....... странно как-то всё.


 
DimaBr   (2006-12-07 15:21) [13]

 TCustomControl = class(TWinControl)
 private
   FCanvas: TCanvas;
   procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
 protected
   procedure Paint; virtual;
   procedure PaintWindow(DC: HDC); override;
   property Canvas: TCanvas read FCanvas;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;

В упор не вижу BORDERS, ткните пожалуйста неуча.


 
DevilDevil ©   (2006-12-07 15:26) [14]

см TWinControl


 
DimaBr   (2006-12-07 15:26) [15]

Зато

procedure TCustomPanel.AdjustClientRect(var Rect: TRect);
var
 BevelSize: Integer;
begin
 inherited AdjustClientRect(Rect);
 InflateRect(Rect, -BorderWidth, -BorderWidth);
 BevelSize := 0;
 if BevelOuter <> bvNone then Inc(BevelSize, BevelWidth);
 if BevelInner <> bvNone then Inc(BevelSize, BevelWidth);
 InflateRect(Rect, -BevelSize, -BevelSize);
end;


 
DimaBr   (2006-12-07 15:28) [16]

Вы  можете ясни изъяснить что имеете и чего хотите достичь, а то всё вилами по воде.


 
DevilDevil ©   (2006-12-07 15:52) [17]

> DimaBr   (07.12.06 15:28) [16]

Спасибо, на данный момент я обошёл эту проблему: свойство BorderWidth не открываю, Border-смещение делаю самостоятельно (AlignControls). Бордюры буду прорисовывать самостоятельно.

Один несрочный вопрос меня всё же интересует. Я перекрываю процедуру Paint и inherited не вызываю. Однако цвет (свойство "Color") до сих пор оказывает влияние.


 
DimaBr   (2006-12-07 16:31) [18]

Метод Paint - пустой, смотрим
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;



Страницы: 1 вся ветка

Текущий архив: 2008.01.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
2-1198242627
new_user)
2007-12-21 16:10
2008.01.20
Сложение с плавающей точкой


15-1197918092
Eraser
2007-12-17 22:01
2008.01.20
Цифровая подпись для exe и dll модулей


15-1197724641
Tirael
2007-12-15 16:17
2008.01.20
как умирают компы?


8-1172655767
DevilDevil
2007-02-28 12:42
2008.01.20
Проиграть OGG.


1-1192791014
salexn
2007-10-19 14:50
2008.01.20
Application Server и передача Stream