VB6 vs VB net: Братцы, верну вопрос о "твип -> пиксе

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

VB6 vs VB net: Братцы, верну вопрос о "твип -> пиксе

Сообщение BMA » 11.01.2007 (Чт) 9:18

Спасибо всем, кто дал мне ссылку на коды, связанные с определением соотношения твип/пиксел. Это конечно, выход, но выход "с позором". Что касается глолбального перевода работы на пикселы - так ничего и не выудил (возможно, тут - сам опозорился). Так что, если я чего-то недопонял, то поясните тупому: есть ли в "глобальных" настройках VB6 функция (кнопка, флажок, список...) перехода с твипсов на пикселы как единицы измерения? Кодовое решение этой проблемы оказалось возможным, но уж больно оно тяжеловесно и, порой, всего не учесть. Совершенно случайно услыхал, что основной единицей измерения в VB net является как раз пиксел, а не твип. Это так (а то под рукой справочного материала нету)?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2007 (Чт) 10:03

Вопрос неясен.
Равно как неясна история вопроса.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.01.2007 (Чт) 10:24

Глобального флажка нет. Надо устанавливать для каждой формы и для элементов управления устанавливать ScaleMode = 3 (Pixel).
В VB.NET по умолчанию действительно пикселы.

И присоединяюсь к GSerg насчет предыстории вопроса. Что-то такое вспоминается, но хотелось бы видеть ссылку.
Весь мир матрица, а мы в нем потоки байтов!

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Да Бог с ней, ссылкой: суть вот в чем -

Сообщение BMA » 11.01.2007 (Чт) 11:42

(обсуждалось много, но ничего кардинального в решениях из обсуждений я не почерпнул) - при изменении размера шрифта в свойствах экрана (сиречь соотношения пиксел/твип) ранее писаные программы "разъезжаются" элементами во все стороны. Задача была привести все единицы измерения к пикселам. Это можно сделать, но при этом - необходимо каждый раз по поводу КАЖДОГО размера и положения элемента это обговаривать посредством оператора screen.twips...X или screen.twips...Y. Если в VB NET все идет в пикселах априори, то задача проста: переходить на него. Это так?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Да Бог с ней, ссылкой: суть вот в чем -

Сообщение alibek » 11.01.2007 (Чт) 11:56

BMA писал(а):screen.twips...X или screen.twips...Y

ScaleX/ScaleY еще оцени.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Да Бог с ней, ссылкой: суть вот в чем -

Сообщение GSerg » 11.01.2007 (Чт) 11:59

BMA писал(а):Задача была привести все единицы измерения к пикселам.

Зачем?

BMA писал(а):Это можно сделать, но при этом - необходимо каждый раз по поводу КАЖДОГО размера и положения элемента это обговаривать посредством оператора screen.twips...X или screen.twips...Y.

Что за глупость?

BMA писал(а):Если в VB NET все идет в пикселах априори, то задача проста: переходить на него. Это так?

Неясна как предпосылка, так и вывод из неё.


Поясни, в чём вопрос, наконец.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Попробую тогда по порядку:

Сообщение BMA » 11.01.2007 (Чт) 12:10

Если написать программу на VB, то после изменения размера системного шрифта Windows (то есть, изменить соотношение твип/пиксел) все элемента, надписи, картинки и пр. разъедутся в стороны.
Если написать программу, в которой единица измерения будет не твип (как в Бэйсике), а пиксел, то этой проблемы не возникнет. В коде программы можно переводить твипы в пикселы, если заранее определить их соотношение (есть там оператор Screen.Twips....Y или Screen.Twips....Y). Но для этого требуется каждую координату и все размеры ВСЕХ элементов, включая саму форму, представлять в виде простой формулы. Однако ее необходимо совать везде, а это неудобно, громоздко, есть возможность что-то упустить и т.д.
Я задавал вопрос: нельзя ли каким-то переключателем изначально заставить компиллятор использовать в качестве мерной единицы пиксел ВО ВСЕХ элементах? Ответили, что в VB нельзя. А в VB net - как раз все работает именно в пикселах. Вот и следующий вопрос: тогда вместо нагромождения кода формулами просто следует перейти на программировани в VB net? и проблема совместимости программ отпадет?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 11.01.2007 (Чт) 12:16

это что за бред, откуда такие выводы?

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Бред - это ответы или мои вопросы? Последние -

Сообщение BMA » 11.01.2007 (Чт) 12:20

наверняка могут быть бредом (я - новичок). Но вопрос я задал совершенно конкретный, а конкретного ответа от маститых не обнаружил - все больше или ехидные комментарии или посылы в поиск или неконкртности в ответа (типа "и да и нет"). Увы....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Попробую тогда по порядку:

Сообщение GSerg » 11.01.2007 (Чт) 12:25

BMA писал(а):Если написать программу на VB, то после изменения размера системного шрифта Windows (то есть, изменить соотношение твип/пиксел) все элемента, надписи, картинки и пр. разъедутся в стороны.

Потому что надо использовать методики по борьбе с этим, коих на этом форуме немало.

BMA писал(а):Если написать программу, в которой единица измерения будет не твип (как в Бэйсике), а пиксел, то этой проблемы не возникнет.

Глупость.
Возникнет ещё как.

BMA писал(а):В коде программы можно переводить твипы в пикселы, если заранее определить их соотношение (есть там оператор Screen.Twips....Y или Screen.Twips....Y).

Можно. Но зачем?

BMA писал(а):Я задавал вопрос: нельзя ли каким-то переключателем изначально заставить компиллятор использовать в качестве мерной единицы пиксел ВО ВСЕХ элементах?

"Все элементы" используют единицу измерения, выставленную в контейнере. Поставишь форме пиксели, у всех контролов размеры будут в пикселях.
Но тебе это не надо, хотя ты пока этого не понимаешь.

BMA писал(а):А в VB net - как раз все работает именно в пикселах.

В VB .NET масштабирование определяется свойством AutoScale и от пикселей или не пикселей не зависит.
Код для свойства AutoScale (см. п.1 данного ответа) предлагается взять и вставить в программу на VB.

BMA писал(а):Вот и следующий вопрос: тогда вместо нагромождения кода формулами просто следует перейти на программировани в VB net? и проблема совместимости программ отпадет?

Какая проблема совместимости программ? Первый раз слышу.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Ну, дык, понятно, что мало знаю, хотя многие вещи

Сообщение BMA » 11.01.2007 (Чт) 13:16

мне неясны не по незнанию, а практическим соображениям: почему сделано так, а не иначе, хотя напрашивается...

1. Потому что надо использовать методики по борьбе с этим, коих на этом форуме немало.
Жаль, что их надо искать и использовать в качестве борьбы, хотя очевидно, что возникает проблема, и ее надо было б решать при производстве компиллятора :(

2. Глупость. Возникнет ещё как.
Вот этого я не поймы никак. Почему, если все будет в пискелах, то при смене соотношения твип/пиксел расположение элементов поменяется? Твипы-то тут уже вообще не будут использоваться. Экран - в пикселях, размеры и координатов элементов - тоже в пикселях. Куда же все поползет? Не должно.

3. Можно. Но зачем?
Пока без комментариев, ибо они должны быть аргументированы, а у меня знаний на это не хватает :)

4. "Все элементы" используют единицу измерения, выставленную в контейнере. Поставишь форме пиксели, у всех контролов размеры будут в пикселях. Но тебе это не надо, хотя ты пока этого не понимаешь.
Вот тут спасибо - этого я не знал (про общие единицы в контейнере).

5. В VB .NET масштабирование определяется свойством AutoScale и от пикселей или не пикселей не зависит. Код для свойства AutoScale (см. п.1 данного ответа) предлагается взять и вставить в программу на VB.
Эх, ссылочку бы на этот код, а? Просто у меня Инет до того ленивый, что пока найду - поседею :)

6. Какая проблема совместимости программ? Первый раз слышу.
Проблема как раз в "расползании элементов" (но про это я уже писал).

Огромное спасибо!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Ну, дык, понятно, что мало знаю, хотя многие вещи

Сообщение alibek » 11.01.2007 (Чт) 13:20

BMA писал(а):Куда же все поползет? Не должно.

Должно. Есть окна (и элементы управления) отрисовываются через API, то все координаты задаются в пикселах. Тем не менее, при изменении разрешения система их тоже масштабирует.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Ну, дык, понятно, что мало знаю, хотя многие вещи

Сообщение alibek » 11.01.2007 (Чт) 13:25

BMA писал(а):Почему, если все будет в пискелах, то при смене соотношения твип/пиксел расположение элементов поменяется? Твипы-то тут уже вообще не будут использоваться.

Вот именно поэтому ты и не понимаешь. При смене разрешения не меняется соотношение twip/pixel. При смене разрешения меняется количество точек (пикселы, логические единицы) на дюйм (физические единицы). А twip -- это тоже физические единицы, поэтому пропорционально меняется и это соотношение. Но система работает именно с пикселами (логическими единицами), поэтому то, что ты задаешь на стадии разработки в твипах, все-равно переводится в пикселы.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Ну, дык, понятно, что мало знаю, хотя многие вещи

Сообщение GSerg » 11.01.2007 (Чт) 13:29

BMA писал(а):Жаль, что их надо искать и использовать в качестве борьбы, хотя очевидно, что возникает проблема, и ее надо было б решать при производстве компиллятора :(

Компилятор (пишется с одним "л") не имеет никакого отношения к свойствам формы и уже тем более не должен быть осведомлён о тонкостях её желаемого поведения.
Готовое решение (то, чего так алкают многие - готовое решение, когда ничё не надо делать) наличествует в .net. Надо - уперёд.

BMA писал(а):Вот тут спасибо - этого я не знал (про общие единицы в контейнере).

Да, тебя ждёт сюрприз, когда заюзаешь Frame...

BMA писал(а):Эх, ссылочку бы на этот код, а? Просто у меня Инет до того ленивый, что пока найду - поседею :)

Лентяй.
http://bbs.vbstreets.ru/viewtopic.php?t=30223
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Ха! Да не проэто речь идет же! Если просто сменить

Сообщение BMA » 11.01.2007 (Чт) 13:36

разрешение, то никаких сдвигов-разъезжаний элементов не происходит. Да это и понятно. Проблема возникает тогда, когда меняется в свойствах Экрана размер системного шрифта: тут меняется и соотношение пиксел/твипы - вот где все происходит. Стандартный размер - 15 твипов на пиксел, крупный - 12 твипов на пиксел, а уж если экзотические выбирать - то там что получится -то и получится. Так что дело не столько в разрешении экрана, сколько в размере этого чортова шрифта :) Вопсро-то почему встал так остро: у меня сейчас матрица 1600 х 1200, на таком разрешении обычный шрифт надо в лупу рассматривать, я его увеличил - и получил всю гамму удовольствий от ранее написанных программ.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ну, дык, понятно, что мало знаю, хотя многие вещи

Сообщение Andrey Fedorov » 11.01.2007 (Чт) 13:55

alibek писал(а):При смене разрешения не меняется соотношение twip/pixel.


Он не про разрешение - он про так называемый масштаб в настройках монитора. Тогда соотношение меняется. Соответственно меняются и TwipsPerPixelX, TwipsPerPixelY у Screen.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.01.2007 (Чт) 14:04

Ну почему же. Разрешение -- это не только высота*ширина. Это еще и разрешение в буквальном смысле, сколько точек на дюйм. Я (и он) именно про то, которое называется, как "Размер шрифта".
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ха! Да не проэто речь идет же! Если просто сменить

Сообщение Andrey Fedorov » 11.01.2007 (Чт) 16:48

BMA писал(а):Вопсро-то почему встал так остро: у меня сейчас матрица 1600 х 1200, на таком разрешении обычный шрифт надо в лупу рассматривать, я его увеличил - и получил всю гамму удовольствий от ранее написанных программ.


Ну у тебя и монитор не менее 21". По идее текст должен быть такого-же размера что и раньше.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Щазз! 15" (ноутбук) :)

Сообщение BMA » 11.01.2007 (Чт) 17:29

Я теперь "продвинутый", программирую "на коленке" :)

BMA
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 03.12.2002 (Вт) 10:12
Откуда: Russia

Огромное спасибо, кон по Вашей ссылке заработал, но

Сообщение BMA » 12.01.2007 (Пт) 14:25

не полностью: контролы типа TextBox, Label и Image "прихватились" отлично, даже со шрифтом продлем нет. А вот контролы Line - ни в какую. Вечером попробую прописать те же процедуры для Line, что и для формы. Я так понял, что Lines не относятся к категрии Control?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.01.2007 (Пт) 15:41

стоп, стоп, стоп... Какие такие теже процедуры для Line, что и для формы?

Line это элемент управления предназначенный толко для отображения линии, у него ни событий, ни окна нет.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot, Yandex-бот и гости: 6

    TopList