Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2012, 19:27   #1
andrey_60
 
Регистрация: 21.12.2010
Сообщений: 4
Вопрос Проблема с изменением высоты формы

Доброе время суток.
Подскажите, пожалуйста.

На форме расположен 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: Извиняюсь, если описал проблему не совсем понятно.

Последний раз редактировалось Stilet; 01.09.2012 в 20:04.
andrey_60 вне форума Ответить с цитированием
Старый 01.09.2012, 20:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm2.FormResize(Sender: TObject);
begin
 if (Panel1.Height<>Height) and (Height>Panel1.Constraints.MinHeight) then
  Panel1.Height:=Height;
end;
Проверял - должно помочь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2012, 20:29   #3
andrey_60
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
procedure TForm2.FormResize(Sender: TObject);
begin
 if (Panel1.Height<>Height) and (Height>Panel1.Constraints.MinHeight) then
  Panel1.Height:=Height;
end;
Проверял - должно помочь.
Спасибо за ответ, не помогло.
Высоту формы не удается установить меньше минимальнодопустимой высоты панельки
andrey_60 вне форума Ответить с цитированием
Старый 01.09.2012, 20:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значит где-то у тебя в проекте еще прописаны ограничивающие свойства.
У меня это работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2012, 21:11   #5
andrey_60
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Значит где-то у тебя в проекте еще прописаны ограничивающие свойства.
У меня это работает.
см. выше, pnlPanel.Constraints.MinHeight = 200.

Всем спасибо, проблему решил, но сомнительным способом.
Как я уже писал выше "если в этот момент прервать уменьшение формы (отпустить левую кнопку мыши), а потом опять начать уменьшать форму, то форма будет без проблем уменьшаться до нужных размеров." Поэтому я генерирую программно отпускание и нажатие левой кнопки мыши:

Код:
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;
Буду благодарен за другие решения, а также за комментарий этого.

Последний раз редактировалось Stilet; 01.09.2012 в 22:25.
andrey_60 вне форума Ответить с цитированием
Старый 01.09.2012, 22:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
см. выше, pnlPanel.Constraints.MinHeight = 200.
Читай внимательно. Я не говорил о ограничении в размере панели конкретно, а о ограничениях, описанных в твоем коде, которые косвенно влияют на результат.
Короче я имел ввиду что проблема не только в том куске что ты описал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.09.2012, 22:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
ScrollBox1.Align:=alClient;
Panel1.Align:=alTop;
Panel1.Height:=ScrollBox1.ClientHeight;
//Constraints.MinHeight не надо

procedure TForm1.FormResize(Sender: TObject);
begin
  if ScrollBox1.ClientHeight>200 then Panel1.Height:=ScrollBox1.ClientHeight
                                 else Panel1.Height:=200;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.09.2012 в 22:43.
Аватар вне форума Ответить с цитированием
Старый 01.09.2012, 23:54   #8
andrey_60
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
ScrollBox1.Align:=alClient;
Panel1.Align:=alTop;
Panel1.Height:=ScrollBox1.ClientHeight;
//Constraints.MinHeight не надо

procedure TForm1.FormResize(Sender: TObject);
begin
  if ScrollBox1.ClientHeight>200 then Panel1.Height:=ScrollBox1.ClientHeight
                                 else Panel1.Height:=200;
end;
Спасибо, помогло
andrey_60 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с изменением PATH в OpenSUSE Andrody Операционные системы общие вопросы 1 19.03.2012 02:28
Проблема с изменением listbox MoHoMaXFR Microsoft Office Excel 18 26.05.2011 19:57
Проблема с изменением, удалением формы/отчета XEfri Microsoft Office Access 0 21.12.2010 12:00
Проблема с изменением hosts _-Re@l-_ Безопасность, Шифрование 6 19.11.2010 21:20
Проблема с изменением буквы лок. диска mibbim Операционные системы общие вопросы 1 20.07.2010 15:38