Форум: "Компоненты";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Внизограничить клиентскую область Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c