На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Изменение размера формы вручную
    Имеется форма со свойством BorderStyle=0
    Нужно сделать возможность менять ее размер как при BorderStyle=2
    Конекретнее, я не знаю как вычислить текущее расположение курсора относительно frm.Left или frm.Top
      Можно поинтересоваться, для чего это, т.е. какую задачу преследуете ?
        Цитата SCINER @
        Можно поинтересоваться, для чего это, т.е. какую задачу преследуете ?

        Задача самая простая. Сделать ресайз формы. Просто сама форма имеет скин свой собственный, без обычной шапки.
        Прикреплённая картинка
        Прикреплённая картинка
          Элементарное действие, наподобии вот этого Как сделать прилипание формы
          Либо посложнее используя API.
            Цитата SCINER @
            Элементарное действие, наподобии вот этого Как сделать прилипание формы

            Спасибо, посмотрю.
              ExpandedWrap disabled
                If Button = vbLeftButton Then
                    Me.MousePointer = 8
                    SngX = X
                    SngY = Y
                    Call ResizeForm(Me)
                Else
                    Me.MousePointer = 1
                End If


              ExpandedWrap disabled
                Public Sub ResizeForm(Frm As Form)
                On Local Error Resume Next
                 
                With Frm
                    .Width = .Width + SngX
                    .Height = .Height + SngY
                End With
                End Sub


              1. Ресайз работает.
              2. Не могу ограничить минимальный размер ФОРМЫ. Если сделаю так
              ExpandedWrap disabled
                With Frm
                    if .Width>=3000 then
                        .Width = .Width + SngX
                        .Height = .Height + SngY
                    else
                        .Width =3000
                    endif
                End With

              то это не срабатывает. К тому же если я отпущу мышку и размер окажется минимальным, то он даже не даст увеличить размер формы.
              3. При уменьшении размера формы остаются следы ее уменьшения. Смотрим скрин. Стираются когда останавливаю мышку.
              Как избавится от следов и все таки ограничить минимальные размеры. Просто пока я дежу кнопку мыши нажатой он уменьшит
              Прикреплённая картинка
              Прикреплённая картинка
                ScaleMode = vbPixels
                если не поможет, то скинь проект сюда, поправлю.
                  Цитата SCINER @
                  ScaleMode = vbPixels
                  если не поможет, то скинь проект сюда, поправлю.

                  Проблема в том, что придется все размеры менять под пикселы. Что бы поставить ScaleMode = vbPixels.
                  И тогда вопрос, как это может помочь избавится от следа уменьшения формы? Ведь и то(Pixels) и то(Twip) всего лишь единицы измерения.
                    Есть уж баг один.
                      Вот, посмотрите. Там Ресайз при щелчке на правый нижний уголок ток..
                      Сообщение отредактировано: Spectr-7 -

                      Прикреплённый файлПрикреплённый файлnew.zip (58.32 Кбайт, скачиваний: 112)
                        Как вариант (просто код не смотрел) в Form_Resize() добавить On Error Resume Next и можно уменьшать до любого размера :D
                          Делай обычную форму, со свойствами:
                          BorderStyle = 2
                          ClipControls = true
                          ControlBox = true, вобщем обычная форма, так как она создается в самом начале.

                          Далее создай обычный модуль и впиши в него это:
                          ExpandedWrap disabled
                             Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
                                Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
                                Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
                                Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
                                
                                    Private Type RECT
                                    Left As Long
                                    Top As Long
                                    Right As Long
                                    Bottom As Long
                                    End Type
                                
                                Private Const GWL_STYLE = (-16)
                                Private Const WS_SYSMENU = &H80000
                                Private Const WS_MAXIMIZEBOX = &H10000
                                Private Const WS_MINIMIZEBOX = &H20000
                                Private Const WS_CAPTION = &HC00000
                                Private Const SWP_FRAMECHANGED = &H20
                                Private Const SWP_NOREPOSITION = &H200
                                Private Const SWP_NOZORDER = &H4
                             
                            Public Function ShowTitleBar(ByVal frmForm As Form, ByVal bState As Boolean)
                                'On Error Resume Next
                                Dim lStyle As Long
                                Dim tR As RECT
                                GetWindowRect frmForm.hwnd, tR
                                lStyle = GetWindowLong(frmForm.hwnd, GWL_STYLE)
                                
                                If (bState) Then
                                        frmForm.Caption = frmForm.Tag
                                    If frmForm.ControlBox Then
                                        lStyle = lStyle Or WS_SYSMENU
                                    End If
                                    If frmForm.MaxButton Then
                                        lStyle = lStyle Or WS_MAXIMIZEBOX
                                    End If
                                    If frmForm.MinButton Then
                                        lStyle = lStyle Or WS_MINIMIZEBOX
                                    End If
                                    If frmForm.Caption = "" Then
                                        lStyle = lStyle Or WS_CAPTION
                                    End If
                                Else
                                    frmForm.Tag = frmForm.Caption
                                    frmForm.Caption = ""
                                    lStyle = lStyle And Not WS_SYSMENU
                                    lStyle = lStyle And Not WS_MAXIMIZEBOX
                                    lStyle = lStyle And Not WS_MINIMIZEBOX
                                    lStyle = lStyle And Not WS_CAPTION
                                End If
                                SetWindowLong frmForm.hwnd, GWL_STYLE, lStyle
                                SetWindowPos frmForm.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED
                                frmForm.Refresh
                            End Function
                             
                            Public Sub HideTaskWindow(frm As Form)
                            ShowTitleBar frm, False: ShowTitleBar frm, True
                            End Sub

                          Далее в загрузке формы напиши следующее:
                          ExpandedWrap disabled
                            Private Sub Form_Load()
                            HideTaskWindow Me
                            End Sub

                          Думаю такой способ будет лучше, так как у тебя будет при этом видна программа в панели пуск, т.е. ты сможешь сворачивать форму и разворачивать как обычную...
                            ХМ.. Спасибо, это действительно помогло. Только тогда у формы появляется свой бордер, который закрывает мой скин, нор думаю это поправимо, если будет смотреться хорошо.
                              Будет олично, не сомневайся. Проверенно... ;)
                                Цитата
                                Будет олично, не сомневайся. Проверенно...

                                Не совсем... При сворачивании он для этой формы выдает эту панель заголовка - пустую. Допустим я дам ей .Caption
                                А вот при разворачивании он остается при ней. Сей заголовок. Так что не все работает как хотелось бы.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0386 ]   [ 16 queries used ]   [ Generated: 3.05.24, 23:08 GMT ]