Видимость полосы прокрутки MDIForm

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Видимость полосы прокрутки MDIForm

Сообщение Jupiter » 18.05.2007 (Пт) 18:23

Мне нужно программно определить размер клиентской области формы MDIForm. Но естественно с учетом полос прокрутки, которые могут быть то видны, но не видны. Я могу воспользоваться GetClientRect, либо просто Me.Height. НО эти способы слепы к полосам прокрутки. Я согласен вручную вычесть ширину полосы, если она видна. Вопрос: Как программно определить, видна ли верт. или гор. полоса?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Видимость полосы прокрутки MDIForm

Сообщение tyomitch » 18.05.2007 (Пт) 19:30

Jupiter писал(а):Вопрос: Как программно определить, видна ли верт. или гор. полоса?

Искать в стилях WS_VSCROLL и WS_HSCROLL.
Но GetClientRect возвращает размеры уже без этих полос, я проверял.
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 18.05.2007 (Пт) 19:30

Свойство Height вернет размер всего окна - т.е. вместе с полосами прокрутки если они есть, с бордюром и заголовком, а ScaleHeight (если ScaleMode не трогать, кажется) вернет размер доступной области, например для того чтобы растянуть по ней другую форму или растянуть текстбокс по обычной форме... Отчего мешают именно полосы прокрутки?
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 19.05.2007 (Сб) 1:12

Не стоит забывать, что полосы прокрутки НЕ есть элементы MDIForm.
Они - части неклиентской области дочернего окна класса "MDIClient". (вот такая тавтология).

И как писал Темыч:
Искать в стилях WS_VSCROLL и WS_HSCROLL.


но не в MDIForm, а в его дочернем окне "MDIClient" (не путать с MDIChild).

P.S.
так, ради проверки
Код: Выделить всё
Option Explicit
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As Long) As Long
Dim rc As RECT
Dim hwcl As Long

Private Sub MDIForm_Load()
    Form1.Show
    hwcl = FindWindowEx(MDIForm1.hwnd, 0, "MDIClient", 0)
End Sub
Private Sub Timer1_Timer()
    GetClientRect hwcl, rc
    Debug.Print rc.Right
End Sub

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 24.05.2007 (Чт) 16:08

tyomitch писал(а):Но GetClientRect возвращает размеры уже без этих полос, я проверял.
Не совсем чтобы так. Размер получается без учета полос прокрутки (как будто их никогда нет).
Wolfie писал(а):ScaleHeight вернет размер доступной области
А вот это то что нужно!!! ScaleHeight рулит! С учетом полос!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.05.2007 (Чт) 16:40

EUGY писал(а):И как писал Темыч:
Искать в стилях WS_VSCROLL и WS_HSCROLL.


но не в MDIForm, а в его дочернем окне "MDIClient" (не путать с MDIChild).
Изображение

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 24.05.2007 (Чт) 17:31

А как получить программно доступ к MDIClient? Мне надо из программы двигать прокрутки.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.05.2007 (Чт) 17:35

FindWindowEx(0,"MDIClient",vbNullString)
Изображение

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 24.05.2007 (Чт) 17:48

tyomitch писал(а):FindWindowEx(0,"MDIClient",vbNullString)
Спасибо, дескриптор окна получили. А как теперь найти коэффициент прокрутки и как его менять? (Типа как в VB: VS.Value = 100). СПАСИБО!

Все, разобрался. ЭТо будет GetScrollPos.
Всем спасибо.
------------------


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 80

    TopList