Главная страница
    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.044 c
15-1197634269
Piter
2007-12-14 15:11
2008.01.20
Обсудим if?


2-1198237513
авыф
2007-12-21 14:45
2008.01.20
Unicod


4-1182432484
Nikfel
2007-06-21 17:28
2008.01.20
Как сделать окно активным.


15-1197834037
Riply
2007-12-16 22:40
2008.01.20
Инициализация переменных в С


2-1197977411
Emish
2007-12-18 14:30
2008.01.20
Не выполняется SQL запрос через ADOQuery update [ #pay_order] set





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