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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2013, 18:49   #1
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию Плавное изменение размеров панелей

Доброго всем времени суток.

Скажите, пожалуйста, как можно реализовать нечто подобное, как в Total Commander, т.е. когда изменяешь размеры главного окна, то две основные панели (с ListView) плавно изменяют свои размеры по отношению друг к другу?

Я пробовал сделать сам, но у меня панели "дергаются" при изменении окна, а при нажатии на кнопку "развернуть" или "свернуть" - панели вообще раскидывает на over9000 % в сторону, так, что выскакивает ошибка "A call to an OS function falled".
Xo66um вне форума Ответить с цитированием
Старый 01.06.2013, 20:46   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Скажите, пожалуйста, как можно реализовать нечто подобное, как в Total Commander, т.е. когда изменяешь размеры главного окна, то две основные панели (с ListView) плавно изменяют свои размеры по отношению друг к другу?
Якорями(Anchors) это называется. Есть у любого компонента delphi(визуального).
Человек_Борща вне форума Ответить с цитированием
Старый 01.06.2013, 20:52   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у меня панели "дергаются" при изменении окна
Тоесть? У тебя там какая-то перерисовка идет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2013, 05:53   #4
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Якорями(Anchors) это называется. Есть у любого компонента delphi(визуального).
Я знаю об этом. Но на форме помимо двух панелей есть также сплиттер (штуковина, за которую можно схватиться, и перетащить в сторону, после чего изменятся размеры двух панелей). Поэтому якоря тут сильно не помогают.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тоесть? У тебя там какая-то перерисовка идет?
Не совсем перерисовка. Просто две панели (одна справа, другая слева), и по середине Splitter.

Изменение размеров панелей Сплиттером нормально проходит, но мне надо чтобы размеры панелей изменялись в пропорциях от размера окна программы. Как в Total Commander.

Я пробовал сам сделать, но у меня не получается уйти от "дергания" панелей при изменении размеров окна программы, а после нажатия на "Развернуть" или "Свернуть в окно" - одна из панелей растягивается слишком широко, что бывает выскакивает ошибка.
ЛИБО одна из панелей просто "ездит" в сторону при изменении размеров окна (см. код ниже).

Собственно, вот один из вариантов кода:
Код:
procedure TForm1.FormResize(Sender: TObject);
begin
 Form1.Panel1.Width := Form1.ClientWidth - Form1.Panel2.Width;
 Form1.Panel2.Width := Form1.ClientWidth - Form1.Panel1.Width;
end;

Последний раз редактировалось Xo66um; 02.06.2013 в 05:56.
Xo66um вне форума Ответить с цитированием
Старый 02.06.2013, 16:33   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.FormResize(Sender: TObject);
begin
 Panel1.Width := Width div 2;
end;
Первую панель поставь align:=alLeft;
Сплиттер тоже в лефт.
А вот вторую панель сделай align:=alClient;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2013, 04:53   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

смотри. можно сделать используя глобальную переменную для процентов размеров от формы. Как я понял ты хочешь, чтобы из ||.|..|| получалось ||..|....||. для этого достаточно завести 1 переменную PercentForLeftPanel и в ресайзе прописать
Код:
Panel1.Width:=round(Form1.width/100*PercentForLeftPanel);
Panel2.Width:=Form1.width-Panel1.Width;
//сюда же можно просто прописать обновление сплиттера на позицию round(Form1.width/100*PercentForLeftPanel); вместо первых 2х строк
а в изменении сплиттера прописать
Код:
PercentForLeftPanel:=splitter.left/(Form1.width/100);
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 04.06.2013, 09:13   #7
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Были проблемы с компьютером, не смог зайти раньше, извините.

Stilet, alextrof94, спасибо вам огромное, оба варианта работают на ура! Оставил отзыв alextrof94, но Stilet не смог, форум ошибку пишет, что якобы я уже отзыв добавлял, хотя это не так...

Последний раз редактировалось Xo66um; 04.06.2013 в 09:16.
Xo66um вне форума Ответить с цитированием
Старый 04.06.2013, 09:26   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хотя это не так...
За меня не переживай - не пропаду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плавное изменение цвета панели (Delphi) Andrey_RTF Помощь студентам 2 27.05.2012 15:47
изменение размеров рамки Алек Помощь студентам 0 16.12.2011 17:19
Плавное изменение размера формы TaTT DoGG Общие вопросы .NET 5 31.03.2010 16:53
Изменение размеров pinksky Microsoft Office Excel 3 18.04.2008 15:52
Изменение размеров элементов romets Win Api 2 18.02.2008 23:28