Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > VB6 > масштаб Label |
Автор: Guest45 29.3.2019, 13:15 |
Задача: разместить текстовую метку Label1 у правого края формы, с учетом изменения размеров формы мышкой. Единицы измерения в программе - твипы (по умолчанию). Решение: стандартное - поставил в процедуру Form_Resize строчку: Label1.Left = Form1.Width - Label1.Width А вот теперь начинается детектив))))) При запуске метка правильно устанавливается по правому краю. Но при малейшей попытке масштабировать форму мышкой - исчезает из поля зрения. Вообще. Пошаговое исследование при помощи точек останова показало следующее. При первом вызове Form_Resize, ширина метки- 1095 и она устанавливается в правильную позицию. А при следующем вызове ширина той же метки показывается как 25.84071 (?!) Я так понял, что это число теперь в единицах знакомест. Если и Label1.Left теперь считается тоже в знакоместах вместо твипов, то, разумеется, метка улетела далеко вправо за пределы и не видна. Проверка подтвердила, что это действительно так и есть. Вот и мой вопрос: Каким образом могла самопроизвольно смениться система единиц измерения? В программе не используется обращение к ScaleMode. Нигде и ни разу вообще. Можно конечно сделать костыль в виде запоминания первоначального числа, а потом вычислять координату с учетом изменения пропорции. Но мне хочется понять - в чем тут дело: это на моем компе такие глюки, или это известный баг? Или я чего-то делаю неправильно? |
Автор: Naghual 29.3.2019, 13:26 |
Измени просто ScaleMode |
Автор: Guest45 29.3.2019, 14:39 | ||
Не, не помогло. Или Вы имели ввиду изначально всё считать в знаках? Так делать не следует, потому что у Виндовс есть настройка размера шрифта, и если она изменена - то в этом случае вся программа разъедется по швам(((( это я уже давно проходил, когда только осваивал и много с разными системами единиц игрался. Твипы - форева. Хоть и не совсем удобные иногда, но зато программа будет нормально выглядеть на любом компе. |
Автор: Naghual 29.3.2019, 18:09 |
Давно я на VB ничего не писал... Поставлю, попробую, отпишу. |
Автор: Guest45 1.4.2019, 12:17 |
Какое накопление? Не понял. Если у Вас метка ездит вместе с правым краем формы при движении его мышкой, - значит и правда детектив не воспроизвелся. |
Автор: Akina 1.4.2019, 14:04 |
Я не только смотрел (ездит), но и проверял значение переменных (пытаясь отловить факт "при следующем вызове ширина той же метки показывается как 25.84071 (?!)" в случае, если бы он возникал однократно и убивался последующей перерисовкой - безрезультатно). |
Автор: Guest45 1.4.2019, 16:00 |
Если ездит - то и размер тоже в твипах значит. Если бы единицы сменились - метка вылетела бы за границы (что у меня и происходит). Причем как на домашнем компе, так и на рабочем... Вот фрагмент, выдернутый из настоящего проекта: |
Автор: Oldshelf 1.4.2019, 16:49 | ||
|
Автор: Guest45 1.4.2019, 17:50 |
Угу, Вы правы. Метка находится над пикчурбоксом, а он - не просто объект, а контейнер, о чем я и забыл... Поэтому метка имеет координату не на форме, а в системе координат пикчурбокса)))) Ну а дальше всё просто: Label1.Left = 120 - Label1.Width потому что система координат пикчурбокса сделана одного и того же заданного масштаба. Спасибо! |
Автор: Naghual 2.4.2019, 18:00 | ||
|