VB6 Форма Высота / Ширина игнорируется при построении командной строки - PullRequest
1 голос
/ 04 апреля 2009

Мы выходим из VB6 так быстро, как только можем, но тем временем мы начали собирать наши приложения VB6 из командной строки на сервере сборки.

Проблема: Сервер сборки имеет базовый видеоадаптер и заставляет формы обрезаться до разрешения базового адаптера, а не высоты и ширины в самой форме.

Один обнаруженный нами обходной путь требует перехода к каждому событию загрузки формы и ручному заданию свойств высоты и ширины для наблюдаемых размеров в окне свойств формы.

Тьфу ..

Есть много десятков форм, связанных с этим приложением, и еще больше приложений с большим количеством десятков форм. Я хочу создать скрипт для этого.

Два вопроса:

1) Где в коде / проекте / и т. Д. Я могу найти высоту и ширину формы, как показано в окне свойств? Поиск в файле * .frm не выявил победителей; также не работает файл * .frx и не преобразуется известная высота или ширина в шестнадцатеричное значение (затем выполняется поиск).

2) Могу ли я сделать что-то еще, кроме редактирования каждой формы?

Заранее спасибо.

Jon

Ответы [ 4 ]

3 голосов
/ 04 апреля 2009

Формат FRM задокументирован в руководстве VB6 . Он говорит, что высота и ширина хранятся в Twips, как заметил Angry Jim. Это не объясняет ClientHeight и ClientWidth, но, как сказали OneNerd и cmsjr, это размер внутренней части формы (без полос меню и границ). Сервер сборки также может изменять ClientLeft и ClientTop, если у вас есть какие-либо формы с StartupPosition, установленным в ручную.

Никогда не устанавливайте высоту и ширину формы во время выполнения. К ним относятся строка меню и границы, которые имеют разную толщину в разных версиях Windows или с разными темами. Таким образом, вы получите неправильные размеры. Вместо этого установите ScaleHeight и ScaleWidth, которые являются размерами внутренней части формы. Среда выполнения VB6 рассчитывает соответствующую высоту и ширину из них.

И, наконец, просто купите новый сервер сборки (или новую видеокарту). Приведите всех разработчиков к боссу, размахивающему горящими факелами и вилами, или, возможно, просто спокойно объясните разницу между стоимостью ПК и стоимостью времени разработчика.

2 голосов
/ 04 апреля 2009

Если вы откроете файлы .frm в блокноте или любом текстовом редакторе, размеры формы будут определены в нескольких строках сверху:

например:

 ClientHeight    =   8445
 ClientLeft      =   60
 ClientTop       =   450
 ClientWidth     =   9960

Я не уверен, почему вы столкнулись с проблемой - кажется странной - но если ваш сервер сборки вызывает проблему, то единственные варианты, которые я вижу, это (1) смена сервера сборки (или, возможно, обновление видеокарты), или запись в коде события загрузки для каждой формы, о которой вы упомянули, хотя это может повлиять на центрирование формы, если в IDE установлен центр postion->, поэтому убедитесь, что ваши формы по-прежнему центрированы, если это Ваш желаемый результат.

0 голосов
/ 04 апреля 2009

Высота и ширина хранятся в Twips (единица измерения, не зависящая от устройства), поэтому вам нужно разделить на Screen.TwipsPerPixelX и -Y, чтобы получить правильное значение. Для большинства дисплеев это будет 15. (При использовании ширины в примере OneNerd 9960 твипов составляют 664 пикселя.)

0 голосов
/ 04 апреля 2009

На основании this Я бы сказал, что высота, отображаемая в окне свойств, является вычисленным значением, которое включает в себя ClientHeight формы (который находится в .frm) + высоты границ и заголовка. Так что ClientHeight - это, вероятно, номер, который вы ищете.

...