1 (edited by wertyby 2018-01-31 20:15:13)

Topic: Вертикальный скролл на форме

Дмитрий никак не могу понять как активировать вертикальный скролл на форме по вертикали. По горизонтали включается но он не нужен. а вертикальный никак? И еще возможно ли в шапке грида активировать перенос строки, т.е. шапка таблицы могла иметь более одной строки, а то название колонки длинное, а помещаемая информация в ячейку несколько символов?

Re: Вертикальный скролл на форме

wertyby wrote:

Дмитрий никак не могу понять как активировать вертикальный скролл на форме по вертикали.

Возьму на себя смелость ответить за Дмитрия. В событии формы onShow напишите следующее: имя_вашей_формы.VertScrollBar.Range := 1000; Вместо 1000 может быть, естественно и другое значение, нужное вам, главное чтобы оно не было меньше ширины самой формы, иначе не сработает.


По второму вопросу: есть в Delphi вроде как UseMultiTitle, например: form_main.tablegrid1.UseMultiTitle := True;, но тут не работает.

Re: Вертикальный скролл на форме

wertyby wrote:

Дмитрий никак не могу понять как активировать вертикальный скролл на форме по вертикали. По горизонтали включается но он не нужен. а вертикальный никак?

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

procedure Form1_TableGrid1_OnMouseEnter (Sender: TObject);
begin
  Form1.TableGrid1.SetFocus;
end;

Как выяснилось, это не совсем удобно, особенно если на этой же форме есть поля ввода данных (например, фильтр).

Хотелось бы услышать лучшее решение.

Визуальное программирование: блог и телеграм-канал.

Re: Вертикальный скролл на форме

В моем случае таки необходим скролл формы, т.к. очень много компонентов необходимо разместить именно вертикально, для исключения путаницы при вводе данных. Последовательный переход табом по полям. И проблема возникла, что на мониторах с более низким разрешением, становится невидимой нижняя часть формы. Решение предложенное tronador-om -:), пробовал, активируется почему то только горизонтальный.

Re: Вертикальный скролл на форме

wertyby
Установите свойства формы
AutoScroll = True
BorderStyle = Sizeable


Скролл на форме появится автоматически, если компоненты будут находится за пределами формы.


Но как подсказали выше, можно и принудительно показать скролл

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
    Form1.VertScrollBar.Range := 1000;
    Form1.VertScrollBar.Tracking := true; // и это, если необходим плавный скролл
end;


Для переноса строк в заголовках грида

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns[0].Header.Multiline := true;
    Form1.TableGrid1.Columns[1].Header.Multiline := true;
    Form1.TableGrid1.Columns[2].Header.Multiline := true;
    Form1.TableGrid1.HeaderSize:=28;
end;
Dmitry.

Re: Вертикальный скролл на форме

Решено. Спасибо, при таких параметрах работает.

Re: Вертикальный скролл на форме

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

Post's attachments

Attachment icon Снимок.JPG 18.96 kb, 228 downloads since 2018-02-01 

Re: Вертикальный скролл на форме

И multiline что то не сработал. Может еще, что либо активировать нужно?

Post's attachments

Attachment icon Снимок1.JPG 10.55 kb, 232 downloads since 2018-02-01 

Re: Вертикальный скролл на форме

wertyby wrote:

И multiline что то не сработал. Может еще, что либо активировать нужно?

Да, забыл упомянуть, в название заголовка необходимо добавить символы для переноса строки

вот так

Серийный\r\nНомер
Dmitry.

Re: Вертикальный скролл на форме

wertyby wrote:

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

Просто разверните окно на весь экран, нажав на соответствующий значек, и форма займет размеры экрана.

Dmitry.

Re: Вертикальный скролл на форме

DriveSoft wrote:

wertyby
Установите свойства формы
AutoScroll = True
BorderStyle = Sizeable

Скролл на форме появится автоматически, если компоненты будут находится за пределами формы.

Дмитрий, а прокрутку формы мышью реализовать не получится никак?

Re: Вертикальный скролл на форме

wertyby

Всмысле колесиком мышки? Можно так:

procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
    if WheelDelta > 0 then
        TAForm(Sender).VertScrollBar.Position := TAForm(Sender).VertScrollBar.Position - 5
    else
        TAForm(Sender).VertScrollBar.Position := TAForm(Sender).VertScrollBar.Position + 5;
end;


begin
  // перечисляем формы, для которых нужен скролл
  Form1.OnMouseWheel := @OnMVDMouseWheel;
  Form2.OnMouseWheel := @OnMVDMouseWheel;
end.
Dmitry.