Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Размер формы / 13 сообщений из 13, страница 1 из 1
24.12.2003, 17:26
    #32362397
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Всем привет!
Есть такая проблема
Есть фома главная в ней подчиненна
хотелось бы чтобы при развертывании на весь экран все элементы пропорционально изменяли размеры
Вопрос как это сделать универсально чтобы код можно было применить к любой форме
и не городить для каждой формы отдельно
...
Рейтинг: 0 / 0
24.12.2003, 17:32
    #32362413
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
купить один раз Гетца и скопировать то, что ты спросил, с компакт диска.
...
Рейтинг: 0 / 0
24.12.2003, 17:35
    #32362420
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
ну если не сложно мог бы кто нибудь скопировать для меня в форум если не очень сложно
У меня нет Гетца, и никогда небыло
...
Рейтинг: 0 / 0
24.12.2003, 17:41
    #32362428
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Лох Позорный - ну скопирую будь человеком
...
Рейтинг: 0 / 0
24.12.2003, 17:45
    #32362431
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
глянь на http://am.rusimport.ru/MsAccess может там кто-нибудь выложил
...
Рейтинг: 0 / 0
24.12.2003, 17:46
    #32362432
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
2 avkv
А с чего ты взял что он у меня есть а) под рукой б) под ногой в) вообще где-нибудь?
Давным давно почитать отдал первый том.
...
Рейтинг: 0 / 0
24.12.2003, 17:48
    #32362433
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
А с чего ты взял что он у меня есть а) под рукой б) под ногой в) вообще где-нибудь?
Думал раз советуешь то у тебя есть
...
Рейтинг: 0 / 0
24.12.2003, 17:57
    #32362447
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Был
...
Рейтинг: 0 / 0
24.12.2003, 18:23
    #32362476
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
avkv писал:ну если не сложно мог бы кто нибудь скопировать для меня в форум если не очень сложно

В правилах сказано:Запрещается ... публикация серийных ключей, лицензий, способов взлома ПО и других методов, которые можно квалифицировать как преследуемые по закону;

В начале книги Литвина П., Гетца К., Гунделоя М. написано:Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Это так, к слову.
...
Рейтинг: 0 / 0
24.12.2003, 18:25
    #32362480
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
:))
...
Рейтинг: 0 / 0
24.12.2003, 18:43
    #32362498
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Шо "гы"? Кажи, поймал чи ни?

На вот:

Код: 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.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
Option Compare Database
Option Explicit

Dim AlreadyWorking As Boolean ' Проверка, выполняется ли уже обработка изменения размера'

'************************************************************************************'
' ГРУППА ФУНКЦИЙ ДЛЯ ОБРАБОТКИ ФОРМ С МАСШТАБИРУЕМЫМИ ЭЛЕМЕНТАМИ'
'************************************************************************************'
Public Function SetMinFormSize()
On Error GoTo HaveError

  Dim rsFormSize As Recordset ' Таблица размеров форм'
  Dim sFormName As String
  Dim ctrl As Control

  On Error Resume Next
  sFormName = Screen.ActiveForm.Name
  If Err.Number <>  0  Or Forms(sFormName).CurrentView <>  1  Then
    On Error GoTo HaveError
    Beep
    MsgBox  "Клавиши Ctrl-M используются для задания минимального размера формы "  _
&  "с масштабируемыми элементами. Активным окном должна быть форма в режиме "  _
&  "простой или ленточной формы!" 
    GoTo EndProc
  End If
  On Error GoTo HaveError

  Set rsFormSize = CurrentDb.OpenRecordset( "сРазмеры" , dbOpenDynaset)
  rsFormSize.FindFirst  "[NameForm]='" & sFormName & "'" 
  If Not rsFormSize.NoMatch Then
    If MsgBox( "По форме '" & sFormName & _
"' уже есть данные о ее минимальных размерах. Заменить их?" , vbYesNo,  "Внимание!" ) = vbNo Then
      GoTo EndProc
    End If
    While Not rsFormSize.NoMatch
      rsFormSize.Delete
      rsFormSize.FindFirst  "[NameForm]='" & sFormName & "'" 
    Wend
  End If

  rsFormSize.AddNew ' Сохраняю данные о самой форме'
  rsFormSize![NameForm] = sFormName
  rsFormSize![MinHeight] = Screen.ActiveForm.InsideHeight
  rsFormSize![MinWidth] = Screen.ActiveForm.InsideWidth
  rsFormSize![MinUpper] = Screen.ActiveForm.Section(acDetail).Height
  rsFormSize.Update

  ' Сохраняю данные об элементах формы'
  For Each ctrl In Screen.ActiveForm
    rsFormSize.AddNew
    rsFormSize![NameForm] = sFormName
    rsFormSize![NameControl] = ctrl.Name
    rsFormSize![MinUpper] = ctrl.Top
    rsFormSize![MinLeft] = ctrl.Left
    rsFormSize![MinHeight] = ctrl.Height
    rsFormSize![MinWidth] = ctrl.Width
    rsFormSize.Update
  Next ctrl
  
  MsgBox  "Новые данные о минимальном размере формы '" & sFormName & _
"' и ее элементов были сохранены." 
  
EndProc:
  Set ctrl = Nothing
  On Error Resume Next
  rsFormSize.Close
  On Error GoTo HaveError
  Set rsFormSize = Nothing
Exit Function
HaveError:
мсКонтрОшибок.CalcErr  "мсМасштФорм" ,  "SetMinFormSize" , Err.Number, Err.Description
End Function

Public Function SetChangeFormSize()
On Error GoTo HaveError

  Dim rsFormSize As Recordset ' Таблица размеров форм'
  Dim sFormName As String
  Dim ctrl As Control
  Dim CngFormHeight, CngFormWidth As Long

  On Error Resume Next
  sFormName = Screen.ActiveForm.Name
  If Err.Number <>  0  Or Forms(sFormName).CurrentView <>  1  Then
    On Error GoTo HaveError
    Beep
    MsgBox  "Клавиши Ctrl-N используются для задания правил изменения размера "  _
&  "формы с масштабируемыми элементами. Активным окном должна быть форма в "  _
&  "режиме простой или ленточной формы!" 
    GoTo EndProc
  End If
  On Error GoTo HaveError

  Set rsFormSize = CurrentDb.OpenRecordset( "сРазмеры" , dbOpenDynaset)
  rsFormSize.FindFirst  "[NameForm]='" & sFormName & "' And ([NameControl]='' Or [NameControl] Is Null)" 
  If rsFormSize.NoMatch Then
    Beep
    MsgBox  "Сначала выполните обработку минимальных размеров формы."  & Chr( 10 ) & _
            "Обработка остановлена." , vbCritical
    GoTo EndProc
  End If
  CngFormHeight = Screen.ActiveForm.InsideHeight - rsFormSize![MinHeight]
  CngFormWidth = Screen.ActiveForm.InsideWidth - rsFormSize![MinWidth]
  If CngFormHeight <=  0  Or CngFormWidth <=  0  Then
    Beep
    MsgBox  "Перед сохранением изменения размеров вы должны изменить их!"  & Chr( 10 ) & _
            "Обработка остановлена." , vbCritical
    GoTo EndProc
  End If

  ' Сохраняю данные об изменении размера области данных формы'
  rsFormSize.Edit
  rsFormSize![ChangeUpper] = (Screen.ActiveForm.Section(acDetail).Height - rsFormSize![MinUpper]) / CngFormHeight
  rsFormSize.Update

  ' Сохраняю данные об элементах формы'
  For Each ctrl In Screen.ActiveForm
    rsFormSize.FindFirst  "[NameForm]='" & sFormName & "' And [NameControl]='" & ctrl.Name & "'" 
    If rsFormSize.NoMatch Then
      Beep
      MsgBox  "Найдены элементы, отсутствующие в описании минимальных размеров."  & Chr( 10 ) & _
              "Выполните обработку минимальных размеров формы повторно "  _
&  "или добавьте недостающие записи в описание вручную."  & Chr( 10 ) & _
              "Обработка остановлена." , vbCritical
      GoTo EndProc
    End If
    rsFormSize.Edit
    rsFormSize![ChangeUpper] = (ctrl.Top - rsFormSize![MinUpper]) / CngFormHeight
    rsFormSize![ChangeLeft] = (ctrl.Left - rsFormSize![MinLeft]) / CngFormWidth
    rsFormSize![ChangeHeight] = (ctrl.Height - rsFormSize![MinHeight]) / CngFormHeight
    rsFormSize![ChangeWidth] = (ctrl.Width - rsFormSize![MinWidth]) / CngFormWidth
    rsFormSize.Update
  Next ctrl

  MsgBox  "Правила изменения размера формы '" & sFormName & "' и ее элементов были сохранены." 
  
EndProc:
  Set ctrl = Nothing
  On Error Resume Next
  rsFormSize.Close
  On Error GoTo HaveError
  Set rsFormSize = Nothing
Exit Function
HaveError:
мсКонтрОшибок.CalcErr  "мсМасштФорм" ,  "SetChangeFormSize" , Err.Number, Err.Description
End Function

Public Function ChangeFormSize(ByVal fForm As Access.Form)
On Error GoTo HaveError

  Dim rsFormSize As Recordset ' Таблица размеров форм'
  Dim ctrl As Control
  Dim CngFormHeight, CngFormWidth As Long
 
  If AlreadyWorking Then GoTo EndProc
  AlreadyWorking = True
 
  If fForm.CurrentView =  1  Then
    Set rsFormSize = CurrentDb.OpenRecordset( "сРазмеры" , dbOpenDynaset)
    rsFormSize.FindFirst  "[NameForm]='" & fForm.Name & "' And ([NameControl]='' Or [NameControl] Is Null)" 
    If rsFormSize.NoMatch Then
      GoTo EndProc
    End If
 
    CngFormHeight = fForm.InsideHeight - rsFormSize![MinHeight]
    CngFormWidth = fForm.InsideWidth - rsFormSize![MinWidth]
    If CngFormHeight <=  0  Or CngFormWidth <=  0  Then
      fForm.InsideHeight = rsFormSize![MinHeight]
      fForm.InsideWidth = rsFormSize![MinWidth]
      CngFormHeight =  0 
      CngFormWidth =  0 
    End If
    fForm.Section(acDetail).Height = rsFormSize![ChangeUpper] * CngFormHeight + rsFormSize![MinUpper]
    fForm.Width = rsFormSize![MinWidth] + CngFormWidth
 
    For Each ctrl In fForm
      rsFormSize.FindFirst  "[NameForm]='" & fForm.Name & "' And [NameControl]='" & ctrl.Name & "'" 
      If Not rsFormSize.NoMatch Then
        ctrl.Height = rsFormSize![ChangeHeight] * CngFormHeight + rsFormSize![MinHeight]
        ctrl.Width = rsFormSize![ChangeWidth] * CngFormWidth + rsFormSize![MinWidth]

On Error Resume Next
        ctrl.Top = rsFormSize![ChangeUpper] * CngFormHeight + rsFormSize![MinUpper]
        ctrl.Left = rsFormSize![ChangeLeft] * CngFormWidth + rsFormSize![MinLeft]
On Error GoTo HaveError
      End If
    Next ctrl
  End If

  AlreadyWorking = False
  
EndProc:
  Set ctrl = Nothing
  On Error Resume Next
  rsFormSize.Close
  On Error GoTo HaveError
  Set rsFormSize = Nothing
  Set fForm = Nothing
Exit Function
HaveError:
мсКонтрОшибок.CalcErr  "мсМасштФорм" ,  "ChangeFormSize" , Err.Number, Err.Description
End Function


К этой штуке нужна табличка "сРазмеры"
NameForm/String/Имя формы
NameControl/String/Имя элемента, если пусто - данные о форме
MinUpper/Long/Минимальная верхняя координата, твип (только для элемента)
MinLeft/Long/Минимальная левая координата, твип (только для элемента)
MinHeight/Long/Минимальная высота
MinWidth/Long/Минимальная ширина
ChangeUpper/Double/Коэффициент изменения верхней координаты по отношению к изменению разницы текущей и минимальной высоты формы
ChangeLeft/Double/Коэффициент изменения левой координаты по отношению к изменению разницы текущей и минимальной ширины формы
ChangeHeight/Double/Коэффициент изменения высоты элемента по отношению к изменению разницы текущей и минимальной высоты формы
ChangeWidth/Double/Коэффициент изменения ширины элемента по отношению к изменению разницы текущей и минимальной высоты формы

SetMinFormSize и SetChangeFormSize д.б. повешены в autokeys или как бишь его и задают минимальный возможный размер и изменение размера соответственно. В них же надо поставить проверку, кому можно, а кому нельзя их запускать. И обработки ошибок надо повыкидывать или поставить свои.

Любая часть данного текста может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав, желательно после телеграфирования пива.
...
Рейтинг: 0 / 0
24.12.2003, 18:50
    #32362510
avkv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Впоймал
Да тут между делом поискал в глубинах инета еще чего нибудь
Спасибо попробую
...
Рейтинг: 0 / 0
04.02.2004, 20:30
    #32398609
Ю.Ш.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер формы
Автоматическое изменение размеров форм
http://hiprog.com/access/article.asp?id=442
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Размер формы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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