Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2008-04-10 13:48:22 ЛС | профиль | цитата
Значит так...

1) чтобы убрать "лишние бипы" надо:

  • выкинуть Global_Invalidate из KOL вообще напрочь - только и делает, что добавляет лишние рисования
  • в WndProcPaint заменить WM_PRINT на WM_PRINTCLIENT, а то есть реакция не в тему на SendMessage(W,WM_PRINT,DC,PRF_NONCLIENT) из DoDrawChildrenDblBuffered

    2) наблюдения за последовательностью происходящего с помощью LogFileOutput показывают:

  • ошибся я, и двойное onPaint, после предложенного тобой фикса, возникает не у инвалидного контролла, а у TOP-а. Но это тоже не есть хорошо...
  • получается так, что (при прозрачности) за каким-то лядом вызывается рисование невидимого контролла (по крайней мере, первый раз), и никак ему валидность сделать не удается (без вызова DefWindowProc). И сидит в очереди этот WM_PAINT, точно его заклинило, и все время непрерывно обрабатывается...
  • поэтому такое компромиссное предложение
    
    #pas
    .....
    if Self_DblBufTopParent.fDblBufPainting then Exit;
    DoDrawDblBuffered( Self_ );
    if not IsWindowVisible( Self_.fHandle ) then exit;
    Rslt := 0;
    Result := True;
    end;
    на вид глупо, но работает...
  • чтобы уменьшить объем рисования, хорошо бы делать ValidateRect для всех уже отрисованных контроллов в DoDrawChildrenDblBuffered Скажем, включаем видимость (да хоть бы и той же формы), а там ВСЕ инвалидное...
    И начинается: отрисовали один раз, второй - ровно то же самое, третий - ровно то же самое....
    что к чему....
    ------------ Дoбавленo:

    Про WM_SETTEXT...
    В этой схеме, без обработчика (как ты предлагаешь) - флики ЕСТЬ
    Add(Timer,13184380,112,35)
    {
    Interval=10
    link(onTimer,15760076:doData,[])
    }
    Add(Label,4699369,315,35)
    {
    Left=35
    Top=70
    Width=200
    Height=30
    Color=12632256
    Font=[Arial Black,18,1,255,204]
    Caption="TEST1"
    AutoSize=1
    Alignment=2
    Point(onMouseDown)
    Point(Handle)
    }
    Add(DoData,15760076,168,35)
    {
    Data=String(TEST-TEST)
    link(onEventData,10987532:doEvent1,[])
    }
    Add(Label,7314866,315,91)
    {
    Left=35
    Top=30
    Width=200
    Height=30
    Color=12632256
    Font=[Arial Black,18,1,255,204]
    Transparent=0
    Caption="TEST"
    AutoSize=1
    Alignment=2
    Point(onMouseDown)
    Point(Handle)
    }
    Add(Hub,10987532,231,35)
    {
    link(onEvent1,4699369:doText,[])
    link(onEvent2,7314866:doText,[(289,48)(289,97)])
    }
  • карма: 9

    0