Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Резиновые формы - жаль добру пропадать…. / 2 сообщений из 2, страница 1 из 1
25.01.2005, 10:35:37
    #32881648
_ChaiNik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резиновые формы - жаль добру пропадать….
Волею судеб, пришлось создать процедурку(ки) для «правильного» изменения размеров простой формы, т.е. кнопки, поля, рисунки будут разъезжаться/сжиматься как то угодно. Не пробовал для ленточных и остальных, да и при большом количестве контролов будет тормозить. Но идея есть и работает. Контролу в свойстве tag (дополнительные сведения) надо указать «якоря»: @T,@B,@R,@L для закрепления в верхней, нижней, правой, левой части соответственно. Например @B@R привяжет кнопку к правому нижнему углу, а @T@B@R@L позволит растягивать ее вместе с формой. Последовательность якорей не имеет значения. Да, в форму надо добавить следующие строки в обработчики событий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_Load()
   nSetControlAnchors Me.Name
End Sub

Private Sub Form_Resize()
   nReDrawForm Me.Name, "dArea"
End Sub
, где "dArea" – наименование раздела области данных ,необходимо для нормального расположения контролов (по умолчанию в русской версии «Область данных»)
Ну и, конечно, основной модуль:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Option Compare Database
Option Explicit
Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Public Const br =  15  ' minimal border width
Public Const sRatio =  14 . 85  ' screen ratio

'-------------------------------------
' (C) Nafigator, 2005
'-------------------------------------
Public Sub nReDrawForm(stFormName As String, stDataAreaName As String)
    Dim i, j As Single, ps As Single, st As String
    Dim sB As Single, Xn As Integer, Yn As Integer, Rn As RECT
    GetWindowRect Forms(stFormName).Form.hWnd, Rn
    Xn = Rn.Right - Rn.Left
    Yn = Rn.Bottom - Rn.Top
    Forms(stFormName).Section(stDataAreaName).Height = Yn *  14 . 85 
    For Each i In Forms(stFormName).Controls
        st = i.Tag
        If InStr(st, "@R") >  0  Then
            j = InStr(i.Tag, "@X")
            If j >  0  Then ps = Val(Mid(st, j +  2 ,  9 ))
            sB = Xn * sRatio - ps
            If InStr(st, "@L") >  0  Then
                If sB - i.Left > br Then i.Width = sB - i.Left Else i.Width = i.Left + br
            Else
                If sB - i.Width > br Then i.Left = sB - i.Width Else i.Left = br
            End If
        End If
        If InStr(st, "@B") >  0  Then
            j = InStr(i.Tag, "@Y")
            If j >  0  Then ps = Val(Mid(st, j +  2 ,  9 ))
            sB = Yn * sRatio - ps
            If InStr(st, "@T") >  0  Then
                If sB - i.Top > br Then i.Height = sB - i.Top Else i.Height = i.Top + br
            Else
                If sB - i.Height > br Then i.Top = sB - i.Height Else i.Top = br
            End If
        End If
    Next
End Sub
'----------------------------------------------------------
Public Sub nSetControlAnchors(stFormName As String)
    Dim i, st As String, r As RECT
    Dim sX As Integer, sY As Integer
    GetWindowRect Forms(stFormName).hWnd, r
    sX = r.Right - r.Left
    sY = r.Bottom - r.Top
    For Each i In Forms(stFormName).Controls
        st = Trim(Str(Round(sX * sRatio - i.Width - i.Left,  2 )))
        i.Tag = i.Tag & "@X" & st & String( 10  - Len(st), " ")
        st = Trim(Str(Round(sY * sRatio - i.Height - i.Top,  2 )))
        i.Tag = i.Tag & "@Y" & st & String( 10  - Len(st), " ")
    Next
End Sub
...
Рейтинг: 0 / 0
26.01.2005, 01:41:43
    #32883543
Rafa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Резиновые формы - жаль добру пропадать….
http://access.boom.ru/Library/Forms/ResizeForm.htm

тут тоже..... типа этого....
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Резиновые формы - жаль добру пропадать…. / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]