Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Вниз

Фрейм мелькает   Найти похожие ветки 

 
REA   (2007-09-21 14:47) [0]

Создаю в run-time фрейм с выравниваением alClient, устанавливаю Parent := Panel. Фрейм сначала появляется на панели и только потом выравнивается. Из за этого получается мелькание. Эксперименты с Visible ни к чему не привели. Как избавиться от мелькания?


 
DVM ©   (2007-09-21 14:50) [1]


> Как избавиться от мелькания?

попробуй вручную задать размер равный размеру панели и лишь потом выравнивание


 
REA   (2007-09-21 14:54) [2]

Да вроде можно, но придется еще одну панель тогда сделать (потому как на той не один этот фрейм). Уже была такая мысль.
А запретить ему мелькать никак на время выравнивания?


 
Ega23 ©   (2007-09-21 14:56) [3]


> А запретить ему мелькать никак на время выравнивания?


Пожалуй никак.


 
homm ©   (2007-09-21 15:01) [4]

> [2] REA   (21.09.07 14:54)
> А запретить ему мелькать никак на время выравнивания?

Есть зверски оригинальное решение, подходящее в твоем случае. Создаешь форму, размерами такими-же как твоя, делаешь поверх своей основной, потом создаешь фрейм, уничтожаешь форму. Фишка в том, что-бы перехватывать все сообщения WM_PAINT WM_ERASEBKGND для этой формы, и на ней ничего не бцдет рисоватся.


 
homm ©   (2007-09-21 15:04) [5]

Вот демка в тему:
http://kolmck.net/demos/DemoNoFlicks.zip


 
REA   (2007-09-21 16:27) [6]

Ну это действительно зверски... я как то уже сделал как в [1]. Приемлемо вроде. WM_ERASEBKGND перехватил для панели на которой рисуется - так поменьше заметно мелькание


 
REA   (2007-09-21 16:29) [7]

До этого хотел сделать TPageControl с динамически пересоздаваемыми страницами - вообще ужасно мелькает даже без фреймов. Помучался, отказался от этой идеи. Может с формой и не самая абсурдная мысль.


 
Суслик ©   (2007-09-21 16:44) [8]

вообще не должно мелькать то.
у меня все в динамике - ничего не мелькает.


 
REA   (2007-09-25 10:41) [9]

Наткнулся тут еще на трюк - при создании делают изначально нулевой размер (фрейма, панели и т.п.)


 
Котик Б   (2007-09-26 10:15) [10]

Еще актуально ?


 
REA   (2007-09-26 10:27) [11]

Может пригодиться - если есть информация, давай


 
Котик Б   (2007-09-26 11:14) [12]

Я делал так:

// На начало операции в главное окно выведен фрейм с Align = alClient
// И создан дополнительный фрейм которым нужно заменить текущий активный
// Используется в главной форме property ActiveFrame: TFrame read FActiveFrame write FActiveFrame;
// У всех фреймов установлен Align = alClient независимо от того какого размера они в design-time

 LockWindowUpdate(Parent.Handle); // Тут хендл окна куда будем выводить активный фрейм
 ActiveFrame.Hide(); // Прячем текущий
 Sleep(100); // Впринципе не нужен - но этим достигается приятное психологическое восприятие, оптимальный диапазон 50-150
---
тут несколько опраторов для переназначения активного фрейма и назначения парентов - если не указал ранее
---
 ActiveFrame.Show(); // Уже новый активный фрейм - старый сохранён в стеке
 LockWindowUpdate(0);


 
REA   (2007-09-26 14:35) [13]

LockWindowUpdate это тяжелая артилерия. Одно окно может быть только заблокировано и я опасаюсь эту функцию использовать.


 
Котик Б   (2007-09-26 15:05) [14]


> LockWindowUpdate это тяжелая артилерия. Одно окно может
> быть только заблокировано и я опасаюсь эту функцию использовать.
>


У тебя во время смены фреймов что-то рисуется ?
У меня нет - да и при показе нового фрейма стараюсь ничего не считать.
А если бы нужно было что-то пересчитывать - то засунул бы в паралельный поток.


 
REA   (2007-10-05 15:18) [15]

Да нет конечно, но конкретно эта функция влияет и на другие приложения похоже.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1195900395
Igor Zorkov
2007-11-24 13:33
2007.12.23
Как поместить MainMenu на ControlBar


15-1195585647
lookin
2007-11-20 22:07
2007.12.23
Непонятно - а чем телефон лучше песни?


2-1196600812
..::KraN::..
2007-12-02 16:06
2007.12.23
Двойной клик в TStringGrid


2-1196060084
O.O
2007-11-26 09:54
2007.12.23
Отключение от FireBird


15-1195631021
nexo
2007-11-21 10:43
2007.12.23
числовые головоломки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский