![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброе время суток.
Подскажите, пожалуйста. На форме расположен ScrollBox: TScrollBox, со свойством Align = alClient, на котором расположена pnlPanel:TPanel, со свойствами: Код:
pnlPanel.Height = 250; pnlPanel.Align = alClient; pnlPanel.Constraints.MinHeight = 200. Таким образом, при изменении высоты формы, панель будет занимать все свободное место на форме, НО нельзя будет установить высоту формы меньше минимальной высоты панельки (200). Задача: Необходимо добавить возможность пользователям уменьшать высоту формы до нуля, но высота панельки не должна быть меньше своей минимально возможной высоты, для этого при высоте формы меньшей высоты панельки должны появляться полосы прокрутки скроллбокса. Для решения этой задачи на событии OnResize формы выполняется следующая процедура. Код:
procedure TForm3.FormResize(Sender: TObject); begin if ScrollBox.Height < pnlPanel.Constraints.MinHeight + 10 then pnlPanel.Align := alTop else pnlPanel.Align := alClient; end; Но почему то, после запуска приложения, когда начинаешь уменьшать высоту формы и высота формы приближается к минимально допустимой высоте панельки, дальнейшее уменьшение невозможно, хотя pnlPanel.Align устанавливается в alTop. Но если в этот момент прервать уменьшение формы (отпустить левую кнопку мыши), а потом опять начать уменьшать форму, то форма будет без проблем уменьшаться до нужных размеров. Подскажите, пожалуйста, как сделать возможным уменьшение формы до нужных размеров без прерывания. PS: Извиняюсь, если описал проблему не совсем понятно. Последний раз редактировалось Admin, 02.09.2012 в 15:50. |
#2
|
|||
|
|||
![]() Точно не уверен, но вроде у TForm есть св-ва HorzScroll и VertScroll. Т.е. вам не нужен к-т ScrollBar. Кидайте на форму все что вам надо и при уменьшении формы она сама покажет скролбары (ИМХО, дельфы нет под рукой)
|
#3
|
|||
|
|||
![]() Спасибо за ответ, но все равно не получится установить высоту формы меньше минимальной высоты панельки
|
#4
|
|||
|
|||
![]() Всем спасибо, проблему решил, но сомнительным способом.
Как я уже писал выше "если в этот момент прервать уменьшение формы (отпустить левую кнопку мыши), а потом опять начать уменьшать форму, то форма будет без проблем уменьшаться до нужных размеров." Поэтому я генерирую программно отпускание и нажатие левой кнопки мыши: Код:
procedure TForm3.FormResize(Sender: TObject); begin if ScrollBox.Height < pnlAlClientOrAlTop.Constraints.MinHeight + 10 then begin if pnlAlClientOrAlTop.Align <> alTop then begin pnlAlClientOrAlTop.Align := alTop; mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); end; end else begin if pnlAlClientOrAlTop.Align <> alClient then pnlAlClientOrAlTop.Align := alClient; end; end; Буду благодарен за другие решения, а также за комментарий этого. |
#5
|
||||
|
||||
![]() Цитата:
Код:
object Panel2: TPanel Align = alNone Left = 0 Top = 0 Width = 10 Height = 200 BevelInner = bvNone BevelOuter = bvNone Caption = '' end |
#6
|
||||
|
||||
![]() а так не катит? :
Код:
procedure TForm1.FormResize(Sender: TObject); begin if ClientHeight<=(Panel1.Constraints.MinHeight) then begin panel1.Align:=alTop; end else begin panel1.Align:=alClient; end; end; |