Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ограничить клиентскую область


DevilDevil ©   (2006-11-24 15:43:00) 

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


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

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


DevilDevil   (2006-12-07 15:52:00) [2]

> DimaBr   (07.12.06 15:28) [16]

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

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


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

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


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

Зато

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;


DevilDevil   (2006-12-07 15:26:00) [5]

см TWinControl


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

 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:06:00) [7]

> DimaBr   (07.12.06 08:45) [11]

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


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

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


DevilDevil   (2006-12-06 17:21:00) [9]

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


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

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


DevilDevil   (2006-12-06 16:02:00) [11]

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


DevilDevil   (2006-11-27 13:41:00) [12]


> DimaBr   (27.11.06 13:27) [6]


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


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

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;


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

ARect.Top := 30;


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

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

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

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


DevilDevil   (2006-11-25 18:42:00) [16]

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо