Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> масштаб Label 
:(
    Опции темы
Guest45
  Дата 29.3.2019, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Задача:
разместить текстовую метку Label1 у правого края формы, с учетом изменения размеров формы мышкой.
Единицы измерения в программе - твипы (по умолчанию).

Решение: стандартное -
поставил в процедуру Form_Resize строчку:

Label1.Left = Form1.Width - Label1.Width

А вот теперь начинается детектив)))))
При запуске метка правильно устанавливается по правому краю. Но при малейшей попытке масштабировать форму мышкой - исчезает из поля зрения. Вообще.

Пошаговое исследование при помощи точек останова показало следующее.
При первом вызове Form_Resize, ширина метки- 1095 и она устанавливается в правильную позицию.
А при следующем вызове ширина той же метки показывается как 25.84071 (?!)
Я так понял, что это число теперь в единицах знакомест. Если и Label1.Left теперь считается тоже в знакоместах вместо твипов, то, разумеется, метка улетела далеко вправо за пределы и не видна.
Проверка подтвердила, что это действительно так и есть.

Вот и мой вопрос:
Каким образом могла самопроизвольно смениться система единиц измерения? В программе не используется обращение к ScaleMode. Нигде и ни разу вообще.

Можно конечно сделать костыль в виде запоминания первоначального числа, а потом вычислять координату с учетом изменения пропорции.
Но мне хочется понять - в чем тут дело: это на моем компе такие глюки, или это известный баг?
Или я чего-то делаю неправильно?


Это сообщение отредактировал(а) Guest45 - 29.3.2019, 13:18
PM MAIL   Вверх
Naghual
Дата 29.3.2019, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Измени просто ScaleMode


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Guest45
Дата 29.3.2019, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Цитата(Naghual @ 29.3.2019,  13:26)
Измени просто ScaleMode

Не, не помогло.

Или Вы имели ввиду изначально всё считать в знаках?
Так делать не следует, потому что у Виндовс есть настройка размера шрифта, и если она изменена - то в этом случае вся программа разъедется по швам(((( это я уже давно проходил, когда только осваивал и много с разными системами единиц игрался.
Твипы - форева. Хоть и не совсем удобные иногда, но зато программа будет нормально выглядеть на любом компе.

PM MAIL   Вверх
Naghual
Дата 29.3.2019, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Давно я на VB ничего не писал... Поставлю, попробую, отпишу.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Akina
Дата 29.3.2019, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Цитата(Guest45 @  29.3.2019,  14:15 Найти цитируемый пост)
Решение: стандартное -
поставил в процедуру Form_Resize строчку:

Label1.Left = Form1.Width - Label1.Width

А вот теперь начинается детектив

Решение воспроизвести удалось. Детектив - нет. Всё работает, как часы.
Проверял - накоплением данных (Label1.Left, Form1.Width, Label1.Width, Form1.Width - Label1.Width) в массив log(4,32000) as double со сбросом в файл и очисткой при достижении верхней границы массива, по кнопке, при закрытии формы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Guest45
Дата 1.4.2019, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Какое накопление? Не понял.

Если у Вас метка ездит вместе с правым краем формы при движении его мышкой, - значит и правда детектив не воспроизвелся.

PM MAIL   Вверх
Akina
Дата 1.4.2019, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Цитата(Guest45 @  1.4.2019,  13:17 Найти цитируемый пост)
Какое накопление? Не понял.

Я не только смотрел (ездит), но и проверял значение переменных (пытаясь отловить факт "при следующем вызове ширина той же метки показывается как 25.84071 (?!)" в случае, если бы он возникал однократно и убивался последующей перерисовкой - безрезультатно).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Guest45
Дата 1.4.2019, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



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

Вот фрагмент, выдернутый из настоящего проекта:

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  test.zip 1,59 Kb
PM MAIL   Вверх
Oldshelf
Дата 1.4.2019, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 22.4.2018

Репутация: 2
Всего: 4



Код

'Picture1.ScaleWidth = 120

PM MAIL WWW   Вверх
Guest45
Дата 1.4.2019, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.5.2009

Репутация: нет
Всего: нет



Угу, Вы правы. Метка находится над пикчурбоксом, а он - не просто объект, а контейнер, о чем я и забыл...
Поэтому метка имеет координату не на форме, а в системе координат пикчурбокса))))

Ну а дальше всё просто:

Label1.Left = 120 - Label1.Width

потому что система координат пикчурбокса сделана одного и того же заданного масштаба.

Спасибо!

PM MAIL   Вверх
Naghual
Дата 2.4.2019, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Код

Dim lExitResize As Boolean
Dim pTop As Integer


Private Sub Form_Initialize()
    pTop = 200
    Picture1.Left = 0
    Picture1.Top = pTop
End Sub

Private Sub Form_Resize()

    If Me.WindowState = 1 Then Exit Sub
    
    lExitResize = False
    
    If Me.Height < 1800 Then
      Me.Height = 1800
      lExitResize = True
    End If
    
    If Me.Width < 3000 Then
      Me.Width = 3000
      lExitResize = True
    End If
    
    If lExitResize Then Exit Sub
    
    
    Picture1.Width = Me.ScaleWidth
    Picture1.Height = Me.ScaleHeight - pTop
    Rem Picture1.ScaleWidth = 120
    Rem Picture1.ScaleHeight = -100
    Rem Picture1.ScaleTop = -Picture1.ScaleHeight
    Rem Picture1.Cls
    
    Label1.Left = (Picture1.Width - Label1.Width) / 2
    
End Sub



--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1350 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.