Прокрутка формы на экране

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Matv
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 13.11.2002 (Ср) 9:20
Откуда: Украина, Харьков

Прокрутка формы на экране

Сообщение Matv » 23.04.2004 (Пт) 15:50

Форма целиком не помещается на экране.
Хотелось бы, используя боковые и вертикальные полосы прокрутки, пролистывать форму (хотя бы только вертикальные).
Возможно ли это реализовать средствами VB6?
Или нужно формировать 2 формы и включать/выключать их видимость?
Или организовывать изменение позиций (движение) элементов формы с включением/выключением крайних элементов (но это достаточно трудоёмко :cry: )
Заранее благодарен за совет.

mefestofele
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 17.04.2004 (Сб) 22:46
Откуда: Россия Тольятти

Сообщение mefestofele » 23.04.2004 (Пт) 19:40

:twisted: Полосы прокрутки использовать невозможно
:twisted: Если лишние формы не нужны создай масив
:twisted: Допустим зделай Frame-масив и изменяй его содержимое

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 23.04.2004 (Пт) 22:02

Да нифига! :evil:
Ставишь PictureBox / Frame, куда кидаешь все контролы, делаешь его больше формы, а затем в событии VScrollBar1_Change и HSrollBar1_Change ставишь изменение позиции контейнера в зависимости от положения полосы прокрутки.
Только сделай так, чтобы СкроллБары были не в контейнере (Frame / PictureBox), а на форме!
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.04.2004 (Сб) 11:29

А еще лучше, перетасуй контролы в TabStrip'ы. Если все элементы управления не умещаются на экране, это обычно признак плохого дизайна.
Lasciate ogni speranza, voi ch'entrate.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 24.04.2004 (Сб) 12:39

Верно. Есть ещё API
Код: Выделить всё
Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
, но она только показывает скроллбар, а форма не прокручивается. Ну, в общем-то, это и ожидалось...

Присоединюсь к alibek'у и пользуй TabStrip. Выглядит красиво и использовать удобно.

Matv
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 13.11.2002 (Ср) 9:20
Откуда: Украина, Харьков

Прокрутка формы. Попытка реализовать массив Frame.

Сообщение Matv » 26.04.2004 (Пн) 8:09

В форме около 50 вводимых различным способом значений (текстовые окна различной длины, ComboBox и т.п. и столько же подписей к ним) которые для удобства пользователей желательно заполнять в пределах одной формы. Кроме того дизайн мне "навязан" старым досовским вариантом. Я попытался обойти эту проблему созданием массива Frame (с радостью увидел такой же вариант в ответах).
Другие советы для меня не столь понятны, постораюсь разобраться.
Свой вариант представляю для конструктивной критики и советов.


VERSION 5.00
Begin VB.Form Form1
Caption = "Форма с вертикальной прокруткой"
ClientHeight = 3615
ClientLeft = 60
ClientTop = 405
ClientWidth = 5085
LinkTopic = "Form1"
ScaleHeight = 3615
ScaleWidth = 5085
StartUpPosition = 2 'CenterScreen
Begin VB.Frame Frame
Caption = "Frame5"
Height = 1335
Index = 4
Left = 120
TabIndex = 6
Top = 1440
Width = 4455
End
Begin VB.VScrollBar VScroll
Height = 7215
LargeChange = 25
Left = 4800
Max = 1000
SmallChange = 10
TabIndex = 5
Top = 0
Width = 255
End
Begin VB.Frame Frame
Caption = "Frame6"
Height = 975
Index = 5
Left = 120
TabIndex = 4
Top = 1800
Width = 4455
End
Begin VB.Frame Frame
Caption = "Frame4"
Height = 1455
Index = 3
Left = 120
TabIndex = 3
Top = 1080
Width = 4455
End
Begin VB.Frame Frame
Caption = "Frame3"
Height = 1215
Index = 2
Left = 120
TabIndex = 2
Top = 720
Width = 4455
End
Begin VB.Frame Frame
Caption = "Frame2"
Height = 1095
Index = 1
Left = 120
TabIndex = 1
Top = 360
Width = 4455
End
Begin VB.Frame Frame
Caption = "Frame1"
Height = 735
Index = 0
Left = 120
TabIndex = 0
Top = 120
Width = 4455
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim f0 As Integer, fZaz As Integer, CountFrame, k#, ArrPos() As Long
Private Sub Form_Load()
Dim i%
f0 = 20 'Отступ для первой Frame
fZaz = 20 'Зазор между Frame
CountFrame = 6 'Количество Frame
'Определение начальных позиций Frame и сохранение их в массиве ArrPos
ReDim ArrPos(CountFrame) As Long
For i = 0 To CountFrame - 1
If i = 0 Then
Frame(i).Top = f0
ArrPos(i) = Frame(i).Top
Else
Frame(i).Top = Frame(i - 1).Top + Frame(i - 1).Height + fZaz
ArrPos(i) = Frame(i).Top
End If
Next i
k = VScroll.Max / Frame(CountFrame - 1).Top 'коэффициент для пересчёта позиций Frame и значения VScroll.Max
VScroll.Value = 0
' Управление начальной видимостью VScrollBar
If ArrPos(CountFrame - 1) + Frame(CountFrame - 1).Height <= Form1.Height - 480 Then VScroll.Visible = False Else VScroll.Visible = True
End Sub
Private Sub Form_Resize()
' Управление размером и позицией VScrollBar в зависимости от размера Формы
VScroll.Height = Form1.Height - VScroll.Width * 2
VScroll.Left = Form1.Width - VScroll.Width * 1.5
VScroll.Refresh
' Управление видимостью VScrollBar в зависимости от размера Формы и текущей позиции Frame
If ArrPos(CountFrame - 1) + Frame(CountFrame - 1).Height <= Form1.Height - 480 Then VScroll.Visible = False Else VScroll.Visible = True
If VScroll.Value <> 0 Then VScroll.Visible = True
End Sub
Private Sub VScroll_Change()
Dim dpos#, i%
dpos = VScroll.Value / k 'Расчёт величины смещения Frame
For i = 0 To CountFrame - 1
Frame(i).Top = ArrPos(i) - dpos 'Расчёт позиций смещённых Frame
Next i
End Sub

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.04.2004 (Пн) 9:35

Ты ведь пишешь не в DOS с его текстовым режимом экрана с фиксированным разрешением. Если пишешь программу по требованию начальства/бухгалтерии, то умей настоять на своем. Клиент всегда прав только в той области, о которой он хоть какое-то представление. А аргумент "мы так привыкли" это на самом деле никакой не аргумент.

Прокрутка формы - это самое неудобное решение, его можно применять только для MDIChild'ов или форм, в которых используется неограниченное рабочее пространство (грид Excel'я, страница Word'а и т.п.).
Переделай дизайн, либо разбей на несколько форм (а-ля мастера), либо переложи все в Tab-Strip'ы.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

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

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

    TopList  
cron