ScrollBar формы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

ScrollBar формы

Сообщение EmeraldMan » 17.01.2009 02:54:28

Подскажите, а как убрать ScrollBar'ы с формы? Когда какой-нибудь компонент, например кнопка, вылазит за границы формы, то появляются эти ScrollBar'ы... Свойства стоят так:
Код: Выделить всё
AutoScroll:=False;
HorzScrollBar.Visible:=false;
VertScrollBar.Visible:=false;

На Delphi помогает одна только верхняя строчка, тут вертикальный убирается, горизонтальный ни в какую...
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: ScrollBar формы

Сообщение Andreich » 17.01.2009 10:02:54

У меня при AutoScroll:=False; убираются обе полосы прокрутки как в режиме проектирования, так и в рантайм.
Что у тебя за версия Lazarus'a?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: ScrollBar формы

Сообщение EmeraldMan » 17.01.2009 12:15:48

Версия 0.9.25 Win32.
Заметил интересную вещь, по-эксперементируйте:
Ставим AutoScroll:=False; кидаем кнопку немного выходящую за границы формы - полос прокрутки нет.
А если наоборот: Кидаем кнопку за границы, а потом AutoScroll:=False; полосы не убираются как в режиме проектирования, так и в рантайм.

У меня в проекте по нажатии кнопки форма меняет свои размеры и часть контролов оказываются вне поля зрения и после пару раз пользования функцией появляются эти полосы, а это не очень хорошо... Не помогает и при событии OnResize убираение скролбаров...
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: ScrollBar формы

Сообщение Andreich » 17.01.2009 12:54:10

Версия 0.9.27 SVN linux Gtk2
Повторил описанные операции - все работает!
Сейчас поставлю .25 Win, проверю и отпишусь.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: ScrollBar формы

Сообщение EmeraldMan » 17.01.2009 13:01:48

Прошу прощения за опечатку - 0.9.26 версия
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: ScrollBar формы

Сообщение Andreich » 17.01.2009 13:22:25

В Windows на 0.9.25 AutoScroll:=False; сам по себе действительно работать отказывается, но если к нему приписать HorzScrollBar.Visible:=false; и VertScrollBar.Visible:=false; то все полосы прокрутки отключаются. Я пробовал оставлять за пределами видимой части формы разные контролы, но комбинация:

Код: Выделить всё
AutoScroll:=False;
HorzScrollBar.Visible:=false;
VertScrollBar.Visible:=false;

Работает всегда!

Добавлено спустя 2 минуты 13 секунд:
Попробую раздобыть .26 и проверить не ней, но думаю, что результат будет таким же. Быть может Вы используете в своем проекте нестандартные компоненты?

Добавлено спустя 19 минут 47 секунд:
На 0.9.26 комбинация тоже работает, но только в том случае, если она выполнена уже после изменения размеров формы (когда контролы уже оказались "за бортом"). Решается следующим образом:

Код: Выделить всё
procedure TForm1.FormChangeBounds(Sender: TObject);
begin
  Form1.AutoScroll:=true;
  Form1.AutoScroll:=false;
  Form1.VertScrollBar.Visible:=false;
  Form1.HorzScrollBar.Visible:=false;
end; 
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: ScrollBar формы

Сообщение EmeraldMan » 17.01.2009 16:26:06

Спасибо! Помогает. Правда весьма специфично:
Код: Выделить всё
Form1.AutoScroll:=true;
Form1.AutoScroll:=false;
Form1.VertScrollBar.Visible:=false;
Form1.HorzScrollBar.Visible:=false;

это классно работает, но когда форма запускается сразу с невидимыми контролами все равно полосы остаются, в дальнейшем при изменении размера исчезают.

Вот ещё кой чего нашел:
Код: Выделить всё
SetScrollRange(Handle, SB_VERT, 0, 0, false);
SetScrollRange(Handle, SB_HORZ, 0, 0, false); 
//или
ShowScrollBar(Handle, SB_VERT, false);
ShowScrollBar(Handle, SB_HORZ, false);

Работает всегда.
Однако, событие надо ставить каждый раз на ReSize и полосы прокрутки во время этого действия на долю секунды промелькивают.

Добавлено спустя 6 минут 12 секунд:
Кстати нестандартные компоненты действительно использую и с ними первый вариант похоже и правда не очень работает...
А это как-нибудь лечится? Что-то в компоненте надо прописывать? Компонент потомок от TGraphicControl.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: ScrollBar формы

Сообщение Andreich » 17.01.2009 20:49:56

EmeraldMan писал(а):когда форма запускается сразу с невидимыми контролами все равно полосы остаются, в дальнейшем при изменении размера исчезают

Попробуй сразу в процедуре создания формы изменять ее размер (скажем на 1 пиксель),.. быть может не очень эстетично с точки зрения программирования, но зато очень функционально на практике.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: ScrollBar формы

Сообщение EmeraldMan » 17.03.2009 16:01:58

На этот раз вопрос таков - как лучше убрать ScrollBar у ListBox'а?
Дело в том, что у меня программа имеет свой стиль, и обычные скроллы ну ни как не вписываются. Я их заменил на - двигаешь картиночку и перемещаемся по записям ListBox.
Убирал ScrollBar функциями что и в случае с формой (SetScrollRange или ShowScrollBar), однако надо вызывать их каждый раз при отрисовке (onDrawItem), а то при прокрутке появляются. Но когда быстро листаешь - мелькают стандартные Scroll'ы постоянно... как с этим бороться?
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: ScrollBar формы

Сообщение Tango » 13.06.2013 16:15:05

Как убрать скролы на DBGid?
Если я делаю так



procedure TNoScrollBarDBGrid.Paint;
Begin
inherited;

TNoScrollBarDBGrid=class(TDCLDBGrid)protected
procedure Paint; override;
End;

procedure TNoScrollBarDBGrid.Paint;
Begin
SetScrollRange(Handle, SB_VERT, 0, 0, False);
SetScrollRange(Handle, SB_HORZ, 0, 0, False);
inherited;
End;


То убираются, но со следующим косяком.

На Форме два ДБГрида, Один нормальный (верхний),другой (нижний) таблица подсуммировки, без скролов.
Но в нижнем гриде рисуется строчка от верхнего и она похожа на мусор.

Изображение

Добавлено спустя 2 минуты 52 секунды:
Lazarus 1.0.8
fpc 2.6.2
Win 7 x64
Аватара пользователя
Tango
постоялец
 
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 226

Рейтинг@Mail.ru