|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
Постоянная перерисовка формы при изменении ее размеров25.09.2012, 14:27. Показов 7648. Ответов 17
Метки нет (Все метки)
Есть форма. (на ней некий график, не суть) Иногда хочется изменить ее размеры, потащив за рамку, например. Но при этом форма постоянно перерисовывается (довольно трудоемкая операция - открытие файла, масштабирование и тп). Пользователь получает раздражающее и бестолковое мигание. Как с этим бороться? (Бюльдер-6).
Где-то я читал, что можно запретить перерисовку формы на какое-то время, но забыл где. А может быть это относилось не к Бюльдеру, а к Qt? И как это сделать в случае плавного изменения размеров? Как поймать начало изменения и конец? Наверное, есть очень простое решение проблемы... для тех, кто знает...
0
|
|
| 25.09.2012, 14:27 | |
|
Ответы с готовыми решениями:
17
Масштабирование рисунка при изменении размеров формы Изменение размеров кнопок при изменении самой формы |
|
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
|
||||||
| 25.09.2012, 16:26 | ||||||
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||
| 25.09.2012, 17:46 [ТС] | |||||||
|
Добавлено через 8 минут Может быть, дело в том, что график я рисую не на форме, а на ее PaintBox. Попытка поставить
Добавлено через 17 минут Очень странно ведет себя эта DoubleBuffered... Оставляет следы от прошлых прорисовок (это уже на форме) Пока держу мышь на рамке - график на PaintBox1 виден. Отпустил - он стирается... Нет, ребята, все не так...
0
|
|||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 26.09.2012, 20:40 [ТС] | |||
|
Но найдено очень смешное решение. В настройках рабочего стола - эффекты - снять галочку "Рисовать окно при перемещении" (или что-то в этом роде). И все стало хорошо! Значит у винды есть эта возможность, какая-то функция WinApi. Но вот я ее к сожалению, не знаю. Наверное, можно и через таймер как-то, и через хук отпускания мыши, и еще как-то почесать левой ногой правое ухо. Но ведь есть простая функция! Почему ее от меня скрывают? Облазил кучу форумов, потрошил Гугл - все набрали в рот воды.
0
|
|||
|
|
|
| 26.09.2012, 20:56 | |
|
Все логично, в общем-то, бережем память - теряем скорость и наоборот.
![]() Если график хранится в виде изображения, то рисовать его на контрол напрямую вполне корректно. Если же, однако, в файле хранятся данные о том, как его рисовать, и прорисовка линий и прочего идет ручками с помощью методов канвы, то рисовать надо на канве временного tbitmap. Это азбука. В винде есть возможность не отображать содержимое окна при изменении его формы и положения, но возможность эта может распространяться лишь на все окна сразу. Система просто не заточена на индивидуальное поведение относительно конкретного окна.
0
|
|
|
Супер-модератор
|
||
| 26.09.2012, 21:03 | ||
|
Не по теме: А зачем, интересно, у меня 16 Гб памяти? Чтоб вот также какой-нибудь программист экономил байты и из-за этого тормозила перерисовка?
0
|
||
| 26.09.2012, 23:09 | |
|
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 27.09.2012, 10:10 [ТС] | |||
|
Я очень сожалею, что в стартовом посте в скобках говорил о содержательной части задачи. О графиках, масштабировании, файлах и прочем. Это я для наглядности, что ли написал. Но проблема вовсе не в этом. Тут я уж справлюсь кое-как. Эта азбука мне известна и не составляет сложностей... Добавлено через 7 минут Не по теме: Это одна из неуклюжек Винды. А вообще-то этих неуклюжек - тьма! Может быть это от того, что набор функций WinAPI ведет свою родословную от Windows 3.1 ?
0
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 27.09.2012, 15:52 [ТС] | ||
|
0
|
||
|
|
|
| 27.09.2012, 16:43 | |
|
Дык, я и не предлагаю совсем отключать. Можно отключать на время ресайза - в событии onresize отключаем масштабирование и запускаем таймер, проверяющий факт изменения размеров; если размеры не меняются в течение определенного времени, таймер включает масштабирование обратно.
Костыль, конечно, но моргание, как ты выразился, - судя по всему, исчезнет.
1
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 27.09.2012, 18:02 [ТС] | ||
|
Я тут придумал 2 возможных костыля. 1. Через таймер. OnResize включает таймер и блокирует перерисовку. По срабатыванию таймера блокировка снимается и вызывается Paint. Тут что может быть? User во время движения рамки задумался на 500 мсек - и бух - получает новую картинку. Не страшно. 2. Опять же OnResize блокирует перерисовку. А OnMouseUp ее разблокирует. Но OnMouseUp не данной формы, а всего приложения, типа ловушки (теорию хуков читал, но на практике не применял ни разу, даже любопытно попробовать) Но все это - костыли, что обидно, так как навярняка есть и более прямой путь. Сейчас это все лежит не в главном русле моей работы. Но вот поеду в деревню на последние денечки бабьего лета, прочищу бризом заплесневевшие мозги , может и придумается какой костыль (а главное - построится). Ночи начинаются рано, глядишь - может чего и накропается.О результатах, буде они будут, обязательно всех оповещу.
0
|
||
|
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
|
|
| 24.12.2014, 16:55 | |
|
Продолжая интересную тему...
Товарищи знатоки, а как же из C++ установить опцию "Отображать содержимое окон при перетаскивании"? Или хотя бы проверить её флаг?
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 24.12.2014, 20:33 [ТС] | |
|
Whatson, как тут уже было сказано, изменяя в реестре этот ключ, ты меняешь поведение для всех программ на компе. А юзеру это надо?
0
|
|
|
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
|
||||||
| 28.12.2014, 00:00 | ||||||
|
volvo, Байт, спасибо за ответ! Но, "чем дальше в лес, тем толще партизаны"... Расскажу всю предысторию:
На(!) форме есть некий компонент (TAdvSmoothDock), который при её перетаскивании, когда на компе отключено "Отображать содержимое окон при перетаскивании", не перерисовывается в конечное состояние (то есть не перемещается в соответствующее конечное положение на форме). Но его можно заставить это сделать дополнительным кликом по нему, когда он застрял на экране. Потом оказалось, если включить "Отображать содержимое окон при перетаскивании" и опять отключить, то всё работает как положено до следующей перезагрузки XP x86. Я думаю, что эта проблема не критична для программы, но неприятна. Также в режиме не "Отображать содержимое окон при перетаскивании" возник следующий интересный вопрос: перестаёт работать залипание "формы" у краёв рабочего стола. Ни задаваемое в design-time опцией ScreenSnap/SnapBuffer, ни перехватом сообщения WM_WINDOWPOSCHANGING(которое наступает) с дальнейшей поправкой позиции формы в
Подскажите, кто знает, как им управлять при перетаскивании? (То, что можно сделать прилипание видно на примере клиента Steam. Или они там всё сами рисовали? =*)
0
|
||||||
|
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
|
||||||||||||||||
| 01.01.2015, 13:25 | ||||||||||||||||
|
Второй вопрос решил. Рамкой этой можно управлять через
полный код
Как я переписал прилипание формы, оооочень громоздко, но работает =*):
0
|
||||||||||||||||
| 01.01.2015, 13:25 | |
|
Помогаю со студенческими работами здесь
18
Изменение размера динамических объектов при изменении размеров формы Перерисовка при изменении размеров формы Перерисовка всех объектов формы при изменении ее размеров Автоматическое изменение размеров компонентов при изменении размеров формы Изменение размеров элементов, сохраняя пропорции, при изменении размеров самой формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|