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




Вниз

Уважаемые ! Как побороть эффект 


UnDISCOvery   (2002-03-04 12:14) [0]

Вот наткнулся на пренеприятный эффект: есть основная форма, на ней есть 3 панельки, которые по таймеру, каждую секунду, произвольно меняют свой цвет. И есть кнопка - нажав которую, пользователь получает на экран еще одно окошко. Рождается оно так:
var
TmpWin: TForm2;
begin
TmpWin:= TForm2.Create(Application);
TmpWin.Parent:= PanelShow;
... установка заголовка и положение в панели ...
TmpWin.Show;
end;
Так вот, когда мышкой хватаешь за заголовок этого самого нового окна, то панели ПЕРЕСТАЮТ ПЕРЕКРАШИВАТЬСЯ. Причем не из-за того что не возниакет собитые OnPaint, а из-за того что не возникает событие OnExecute в Timer1 !!! Все это дело висит на "паузе" дл тех пор пока не отпустишь заголовок окна.
КАК ПОБОРОТЬ ? Как заставить панельки перерисовываться ВСЕГДА ???



Kozhanov   (2002-03-04 12:21) [1]

> UnDISCOvery
А ежели перекрыть метод TForm2.NCHitTest и поставить
там Application.ProcessMessages...



Kozhanov   (2002-03-04 12:29) [2]

уточнение : TForm2.NCHitTest -> TForm2.WMNCHitTest



Nebula   (2002-03-04 12:56) [3]

Странно,но все работает (D6, W2000AS). Никакой паузы не возникает. В любом случае можно создать отдельный поток и в нем менять цвета. Как ты меняешь цвет? Я, просто, менял Panel1.Color в OnTimer.



Aleksandr   (2002-03-04 15:35) [4]

Ну, в общем-то лучше всего создать потомка от TThread, в констракторе добавить параметром массив Handle, а в Execute:

while NOT Terminated do begin
for i:=0 to length(HandleArray)-1 do
if HandleArray[i]>0 then
// найти объект с этим хэндлом и изменить его цвет
Sleep(100)
end;...
Абсолютно не тормозит, проверил...



UnDISCOvery   (2002-03-04 16:11) [5]

поправка: на Д6 с Вин2000 все нормально.



UnDISCOvery   (2002-03-04 16:28) [6]

2 Kozhanov: А поподробнее можно ? что за сообщение ? что делать в его перехватчике ?
попробывал просто ставить application.processmessages();
вызвало ошибку переполнения стэка.



Kozhanov   (2002-03-04 17:14) [7]

> UnDISCOvery
Нужно сначала наследовать родительский метод.
Добавь inherited, а потом application.processmessages.



UnDISCOvery   (2002-03-05 16:23) [8]

2 Kozhanov
не помогло ... переполнение стэка




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




Наверх





Память: 0.73 MB
Время: 0.024 c
3-66797           Ross                  2002-02-23 15:32  2002.03.21  
Варианты передачи данных в Word


14-66958          McSimm                2002-02-06 10:21  2002.03.21  
Об оптимизации.


14-66965          PVOzerski             2002-02-06 16:43  2002.03.21  
Мне тут NT 4 подарочек преподнесла... Как побороть?


6-66943           Igorok                2001-12-15 11:24  2002.03.21  
Как при ошибке коннекта перехватить окно


1-66897           madcap                2002-03-06 02:12  2002.03.21  
Тупой вопрос