Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Flicker, сплошное моргание 
V
    Опции темы
Kefir
Дата 16.6.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



В моей проге довольно много различных контролов, почти на всех свои картинки и к тому же много прозрачности (прозрачные сами картинки на контролах, прозрачные панельки и т.д.). В основном программа работает на видимости/невидимспанелей (т.е. на somecontrol.Visible = true/false). Всё это сильно моргает и относительно долго прорисовывается. Всё это будет стоять в публичных местах и просто по зарез надо убрать такие моргания. У формы в SetStyle уже стоит DoubleBuffered, AllDrawingInPaint (ну или что-то такое), OptimizedDoubleBuffered - результат чисто "на глаз" просто никакой (я не заметил изменений).
Что делать-то с этим? Как лечиться? 
PM MAIL WWW Skype   Вверх
VisualProgrammerNET
Дата 16.6.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Почему оно моргает? Чё там у тебя такое хитрое, что ничего не работает? 


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
ivashkanet
Дата 17.6.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Ааааа..., Kefir, дело то плевое вот в чем .....
Цитата(VisualProgrammerNET @  16.6.2006,  21:38 Найти цитируемый пост)
Почему оно моргает? Чё там у тебя такое хитрое, что ничего не работает

Я вот тоже не сильно представляю что ты там для этого делаешь  smile 
Мы ж не телепаты, поподробнее, плз, поподробнее. 
PM MAIL WWW ICQ   Вверх
-ser-
Дата 17.6.2006, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



попробуй делать все изменения в блоке 

SuspendLayout
...
ResumeLayout 

 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Kefir
Дата 17.6.2006, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Нууу... что делаю... программу я делаю %).
Значит что я делал - накидал всяких панелек на форму (панели друг на друге). Из этих панелей только одна Visible = true. На этой первой панели можно выбрать категорию каталога. Как только юзер счёлкает по кнопке - панелька с выбором категории становится Visible = flase и другая панелька (на которой идёт инфа о категории) становится Visible = true. Это основной принцип работы программы. И вот именно на переключении видимости/невидимости панелей программа моргает. Общее количество контролов - около 60. Не знаю, влияет ли это. Если нужен какой-либо кусок кода, то скажите какой. Повторюсь - моргание идёт всегда на переключении видимости контролов. Больше нигде. На все контролы натянуты свои фоны. Эти все фоны PNG, причём с прозрачностью. Почти везде BackColor = transparent. Не знаю чего ещё рассказать...

Добавлено @ 08:41 
-ser-, у мя так - если на панели x, происходят изменения контролов, то эти изменения обязательно проходят в Суспенд/Резюм.

Так слушайте, а правильно ли я двойной буфер вставил?... Я его только на форму поставил, т.к. в контролах нет такой возможности... Мож куда в контролы надо запихать? 
PM MAIL WWW Skype   Вверх
-ser-
Дата 19.6.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



попробуй вместо панелей использовать табконтрол, у которого можно не показывать шапки. 

только не помню, есть ли в стандартном такая возможность. во всех других третьесторонненаписанных это можно делать. 

хотя уверен, умельцы уже что-то и со стандартным понаделали если хорошо поискать.


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


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Kefir
Дата 19.6.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



ммм... я с табконтролом пробовал возится. в стандартном без проблем можно сделать так, чтобы сами табы не показывались, только вот я так и не понял как ему прозрачный фон назначить. т.е. самим страницам таба можно, а вот у табконтрола даже проперти такой нету (или я не нашёл???) 
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 19.6.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Можно перекрыть WndProc() у формы, и на время переключения между панелями запрещать/разрешать обработку WM_PAINT. Код сообщения WM_PAINT можно узнать рефлектором. Чтобы запретить обработку сообщения, в перекрытом WndProc достаточно просто не вызывать base.WndProc(). 


--------------------
user posted image
PM MAIL WWW   Вверх
stab
Дата 21.6.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

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



Цитата(Kefir @  17.6.2006,  12:33 Найти цитируемый пост)
Так слушайте, а правильно ли я двойной буфер вставил?... Я его только на форму поставил, т.к. в контролах нет такой возможности... Мож куда в контролы надо запихать? 


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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Kefir
Дата 21.6.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Всё. Дурак я полный. Породил свою собственную панельку и поставил ей дабл-буфер. Моргание исчезло. Спасиб всем. Вопрос решён. 
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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