|
|
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 13:36:59 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Для формы надо использовать InsideHeight и InsideWidth ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:47:18 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Спасибо! Буду знать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:52:37 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Но есть, как говориться, нюансы. 1. Если имеется указатель записи - от InsideWidth долой 270 твипов. 2. Если есть номера записи и скроллбары - от InsideWidth и InsideWidth доллой еще сколько-то, наизусть не помню. 3. InsideHeight должно хватать на сумму секций. Я почему-то всегда организую форму из одной секции Section(0), и на ней размещаю всю информацию. Тогда остальными Section можно перенебречь. 4. Порядок переразмещения элементов и изменения размеров формы имеет значение. Нельзя сделать Section(0).Height меньше, чем фактически занимают элементы. Поэтому алгоритм обычно такой: а) поджать все эелементы в верхний левый угол, у кого можно - обнулить Height и Width. б) Расчитать новые Top, Left, Height и Width элементов, постепенно располагая их сверху вниз и справа налево с учетом имеющихся InsideHeight и InsideWidth и 1) и 2). в) Присвоить Section(0).Height = Me.InsideHeight При этом надо иметь флажок, что бы при Section(0).Height = Me.InsideHeight не входить в Repaint два раза. Вернее сразу выходить, войдя второй раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 17:13:38 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Только вчера решал такую задачу (давно хотелось, а то RunCommand acCmdSizeToFitForm не всегда можно применить). Использовал я тот же подход, что и "Программист-Любитель" - через свойства формы InsideWidth и InsideHeight (пробовал я, кстати, ради интереса, то же сделать через WinAPI, но не вполне успешно - почему-то вычисляемые AdjustWindow координаты отличаются от ожидаемых на 2 пиксела каждая, да и определить высоту аксессовской панели с кнопками перехода по записям, чтобы прибавить её к сумме высот секций формы, я не смог). Хотелось бы в этой связи кое-что уточнить. 1) Я тоже поломал голову над учётом ширины указателя записи. Но хорошее решение (лучше, чем абсолютная величина в твипах) нашлось - свойство CurrentSectionLeft формы. Согласно его описанию, оно служит не для этого и по логике вещей должно относиться к секции, в которой сейчас находится фокус, но, к счастью для нашей задачи, независимо от фокуса оно возвращает как раз ширину указателя записи. 2) Вот этого, признаться, я не понял. В моих тестах высота панели с навигационными кнопками учитывалась свойством InsideHeight автоматически и не требовалось ничего корректировать. Я что-то не учёл? 3) Сверившись с первым томом "Гетца", я написал простую функцию, которая возвращает текущую "высоту" формы как сумму высот отображаемых секций. Вот мой код (ввиду тривиальности процедур обработчики ошибок я писать не стал): Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 17:41:56 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
Я тут заметил у себя ошибку в венгерской нотации: Код: plaintext Смысл переменной в процессе разработки изменил, а префикс скорректировать забыл. Извиняюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 18:36:16 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
По поводу 2). Пусть Section(0) единственная основная секция формы без вяких header'ов и прочего. У меня типичные ситуации когда не форма натягивается на нарисованную в дизайнере раскладку, а наоборот, при изменении резиновой формы надо вписать в нее гриды и др. элементы. Вот тут если форма уменьшается и попробовать сделать Section(0).Height меньше .Top + .Height самого низкого/высокого контрола, то не выйдет. Сама по себе InsightHeight может стать меньше этой величины и меньше Section(0).Height, но при этом будет некрасивый эффект - по PdDn часть формы уйдет под верхнюю рамку, что бы показать невлезшее в нижней части. Отсюда и последовательность 4. а), б), в). После того, как это сделал я в Developers Handbook специальный класс нашел. Минусы этого класса - нельзя задавать пропорции (чего-то 30% от ширины, чего-то - 40%, чего-то остальное), только фиксировано в одну/другую сторону. - в сиду универсализма работает медленно на сложных формах (с табстрипами, да на каждом табстрипе по куче элементов). Вот пример простой в этом отношении формы: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 21:01:29 |
|
||
|
Изменение размера формы
|
|||
|---|---|---|---|
|
#18+
На самом деле я имел в виду вот это: Программист-Любитель2. Если есть номера записи и скроллбары - от InsideWidth и InsideWidth доллой еще сколько-то, наизусть не помню. Дело в том, что по моим наблюдениям, свойства InsideWidth и InsideWidth автоматически учитывают (в отличие от указателя записи) размеры и навигационных кнопок с номером записи, и скроллбаров, так что никакой ручной коррекции не требуется (MS Access 2000 SP3). Я хотел бы знать, в чём причина такого расхождения в наших наблюдениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 11:33:55 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1669999]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 402ms |

| 0 / 0 |
