![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ограничить клиентскую область
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