Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.048 c
4-1182432484
Nikfel
2007-06-21 17:28
2008.01.20
Как сделать окно активным.


2-1198228273
alshtam
2007-12-21 12:11
2008.01.20
firbird


15-1197517281
Slider007
2007-12-13 06:41
2008.01.20
С днем рождения ! 13 декабря 2007 четверг


2-1198161943
Lobach
2007-12-20 17:45
2008.01.20
ListView


15-1197556569
Petr V. Abramov
2007-12-13 17:36
2008.01.20
Коннект к MSSQL-2000





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