Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#1: 2008-04-01 23:52:26 ЛС | профиль | цитата
Galkov, может есть смысл снабдить данной фичей все визуальные контролы, естественно опционально. Регулярно начинает вымораживат мерцание, особенно, тонких прогрессбаров при перерисовке позиции. Большая таблица тоже, кстати, сильно мерцает при скроллинге. Я проверял эту установку, со своей целью -- убирание мерцания, она справляется неплохо.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#2: 2008-04-02 00:29:22 ЛС | профиль | цитата
Нет.
До полного понимания как это работает, и фиксинга багов из этого понимания вытекающего
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#3: 2008-04-02 01:10:22 ЛС | профиль | цитата
Galkov писал(а):
До полного понимания как это работает

А что-нибудь из соображений есть, или еще нет
------------ Дoбавленo:

Galkov писал(а):
фиксинга багов из этого понимания вытекающего

Ну баги тяжело поймать, если не пробовать метод в работе, так можно и вообще с места не сдвинуться. А так можно нарваться на баг в работе примера, и пробовать его устранить, хоть будет чего устранять. И я же про опционально говорил -- не понравился баг, отключил свойство, но отметил, что вот в такой ситуации проявляется. Все-таки, экспериментальная база, тоже сильная штука. А вообще, смотри сам -- нет, так нет, особо не настаиваю. Я, лично, у себя в Win прописал, буду пробовать, каши не просит. Глядишь, на что-нибудь нарвусь.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#4: 2008-04-02 01:21:32 ЛС | профиль | цитата
Любое включение прозрачности в контроллах автоматически включает DoubleBuffered
Уже сегодня.
В следствии чего мы всегда и имеем баги.
Разберись, предложи фиксинг - можно будет продолжить разговор

В общем, научись плавать сначала, потом можно будет и воду налить
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2008-04-02 01:28:37 ЛС | профиль | цитата
Galkov писал(а):
В общем, научись плавать сначала, потом можно будет и воду налить

Ну шутник Там, в KOL'e у Кладова, черт ногу сломает.
А сам-то думал над этой фигней, поделился бы хоть мыслями
карма: 22

0
Ответов: 9906
Рейтинг: 351
#6: 2008-04-02 01:48:50 ЛС | профиль | цитата
Ну я и поделился: надо сначала лезть и тщательно все смотреть, а уже потом принимать решения о конкретных действиях.
Эксперимент тогда начинает отличаться от "метода тыка", когда, делая чего-то, ты можешь сделать какой-то вывод из любого его результата
Для этого просто необходимо понимание происходящего.
А смотреть - очень даже есть чего, уже сегодня

Сейчас, лично я - другим занят
Ты у нас по рисованию - вот и давай...
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2008-04-02 11:28:38 ЛС | профиль | цитата
Galkov писал(а):
Ты у нас по рисованию - вот и давай...

Ага, вот я б еще ассемблер знал в совершенстве, тогда бы точно полез...
И, все равно, ты меня озадачил, надо будет лезть, не сегодня, так завтра -- точно...

------------ Дoбавленo:


Вот смотри, Кладов поменял реализацию DoubleBuffered в последенем KOL'e

Вот наш


//[procedure TControl.SetDoubleBuffered]
procedure TControl.SetDoubleBuffered(const Value: Boolean);
begin
if CannotDoubleBuf then Exit;
fDoubleBuffered := Value;
Global_OnBufferedDraw := WndProcBufferedDraw;
Global_Invalidate := @ InvalidateDblBufParent;
Global_DblBufCreateWnd := @ DblBufCreateWndProc;
end;

{$IFDEF ASM_VERSION}
//[procedure TControl.SetTransparent]
procedure TControl.SetTransparent(const Value: Boolean);
asm
CMP [EAX].fTransparent, DL
JZ @@exit
MOV [EAX].fTransparent, DL
TEST DL, DL
JZ @@exit
MOV ECX, [EAX].fParent
JECXZ @@exit
XCHG EAX, ECX
CALL SetDoubleBuffered
@@exit:
end;
{$ELSE ASM_VERSION} //Pascal
procedure TControl.SetTransparent(const Value: Boolean);
begin
if fTransparent = Value then Exit;
fTransparent := Value;
//ExStyle := ExStyle or WS_EX_TRANSPARENT;
if fParent = nil then Exit;
if Value then
fParent.DoubleBuffered := True;
end;
{$ENDIF ASM_VERSION}

А вот новый


//[procedure TControl.SetDoubleBuffered]
procedure TControl.SetDoubleBuffered(const Value: Boolean);
begin
if CannotDoubleBuf then Exit;
fDoubleBuffered := Value;
AttachProc(WndProcTransparent);
{$IFNDEF SMALLEST_CODE}
Global_AttachProcExtension := @TransparentAttachProcExtension;
{$ENDIF}
end;

//[procedure TControl.SetTransparent]
{$IFDEF ASM_VERSION}
{$ELSE ASM_VERSION} //Pascal
procedure TControl.SetTransparent(const Value: Boolean);
begin
fTransparent := Value;
if fParent = nil then Exit;

{$IFDEF GRAPHCTL_XPSTYLES}
if not AppTheming then
fClassicTransparent := Value;
{$ENDIF}

if Value then begin
AttachProc(WndProcTransparent);
fParent.DoubleBuffered := TRUE;
end;
end;
{$ENDIF ASM_VERSION}

------------ Дoбавленo:


Galkov, ты вообще этот глюк с прозрачностью рассматривал -- на что он влияет и как влияет

Вот маленький эксперимент с глюком, проявляется он у меня только на дочерних формах


Add(MainForm,12310116,105,105)
{
Left=20
Top=105
Color=32768
}
Add(Label,1547846,203,105)
{
Left=70
Top=65
Width=87
Height=41
Font=[MS Sans Serif,24,1,0,1]
Transparent=0
}
Add(Label,10179485,154,105)
{
Left=190
Top=130
Width=87
Height=41
Font=[MS Sans Serif,24,1,0,1]
Transparent=0
}
Add(ChildFormEx,7528158,154,154)
{
}
BEGIN_SDK
Add(EditMultiEx,2479969,21,21)
{
}
Add(MainForm,11508501,35,105)
{
Left=35
Top=105
}
END_SDK


Если убрать дочернюю, то глюк исчезает... странный глюк

И вот еще что, если поставить Control.Doublebuffered := true; в тот же Label, но выключить прозрачность, то глюка нет, а это значит, что это все относится только к Transparent и никак не относится к Doublebuffered


карма: 22

0
Ответов: 16884
Рейтинг: 1239
#8: 2008-04-02 11:53:33 ЛС | профиль | цитата
А у дочерней поменять TransparentColor не пробовал ? или двигать ее на экране ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#9: 2008-04-03 01:12:37 ЛС | профиль | цитата
------------ Дoбавленo:


Galkov, ну что, я добил эту тему (правда, не знаю насколько глубоко)

А вот схема проверки. Rich стоит специально, тк он не поддерживает прозрачность.


Add(MainForm,3363257,329,252)
{
Left=20
Top=105
Color=32768
}
Add(Label,12473907,329,203)
{
Left=15
Top=20
Width=167
Height=41
Font=[MS Sans Serif,24,1,0,1]
Transparent=0
Alignment=2
}
Add(ChildFormEx,7528158,385,203)
{
}
BEGIN_SDK
Add(EditMultiEx,2479969,21,21)
{
Width=356
Height=326
}
Add(MainForm,11508501,56,105)
{
Left=35
Top=105
Color=32768
Point(Handle)
}
Add(ChildFormEx,1320682,175,238)
{
}
BEGIN_SDK
Add(EditMultiEx,2479969,21,21)
{
Width=251
Height=186
}
Add(MainForm,11508501,56,105)
{
Left=35
Top=105
Color=32768
AlphaBlendValue=200
Point(Handle)
}
Add(Label,12473907,189,112)
{
Left=110
Top=100
Width=167
Height=41
Font=[MS Sans Serif,24,1,0,1]
Transparent=0
Alignment=2
}
END_SDK
Add(Label,12473907,189,112)
{
Left=125
Top=75
Width=167
Height=41
Font=[MS Sans Serif,24,1,0,1]
Transparent=0
Alignment=2
}
Add(ListBox,9680544,252,98)
{
Left=185
Top=20
Width=185
Height=230
Transparent=0
Strings=#7:dfsdfsd|7:sdfsdsf|8:sdsdffsd|
}
END_SDK
Add(RichEdit,14296980,385,252)
{
Left=195
Top=20
Width=185
Height=235
}



------------ Дoбавленo:


Всем, кто что-то шарит в замене кодов можно попробовать этот обработчик заменить в KOL'e (в любом нашем, и для Delphi, и для FPC) и попробовать пример в действии.

Код WndProcBufferedDraw ниже
карма: 22

0
Ответов: 9906
Рейтинг: 351
#10: 2008-04-03 05:03:00 ЛС | профиль | цитата
Вот я интересуюсь, чему в твоих кодах равна переменная Self_DblBufTopParent ?
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#11: 2008-04-03 12:44:28 ЛС | профиль | цитата
Galkov, а на кой черт эта переменная нужна, если она локальная, и больше нигде не используется

------------ Дoбавленo:


Кстати, Кладов сильно упростил этот обработчик в новом KOL'e и ввел понятие списка контролов для отрисовки, тем самым упорядочив последовательность отрисовки по Z, чего в нашем KOL'e нет, а потому может нарушаться BackToFront и FrontToBack.

------------ Дoбавленo:


Galkov, давай подходить к вопросу конструктивно. Результат виден уже сейчас, возможно, нужно чего-либо добавить. Но надо подумать -- на что это может повлиять и нужно ли добавлять вообще.

------------ Дoбавленo:


Galkov, хорошо, объясни мне разницу


Self_DblBufTopParent := Self_.DblBufTopParent;
if Self_DblBufTopParent = nil then Exit;


if Self_.DblBufTopParent = nil then Exit;

------------ Дoбавленo:


Ну Galkov, нашел же... Сейчас переделаю.

------------ Дoбавленo:


Ну вот, что получилось

Смотрите дальше
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#12: 2008-04-03 16:52:28 ЛС | профиль | цитата
nesco, схема твоя, только раскрашенная. Запусти и покрути мышкой над лабелями.
code_8745.txt
------------ Дoбавленo:

а так все вроде нормально.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_8745.txt [859B] [298]
Разработчик
Ответов: 26163
Рейтинг: 2127
#13: 2008-04-03 17:03:22 ЛС | профиль | цитата
Tad, да, я этот прикол тоже наблюдаю

nesco писал(а):
чего в нашем KOL'e нет, а потому может нарушаться BackToFront и FrontToBack


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

Может чего Galkov еще подскажет.

карма: 22

0
Ответов: 16884
Рейтинг: 1239
#14: 2008-04-03 18:18:15 ЛС | профиль | цитата
Если сделать у одной Transparent=False, то менять Z будет та у которой Transparent=True
------------ Дoбавленo:

А здесьпроведи мышкой над лабелями, но смотри на панели

Add(Label,15591883,63,28)
{
Left=10
Top=15
Width=104
Height=38
Color=65535
Font=[Arial,22,1,16711680,204]
Transparent=0
Caption="Label 1"
}
Add(ChildPanel,10089595,105,14)
{
}
BEGIN_SDK
Add(EditMulti,4968307,21,21)
{
}
Add(Panel,8029753,35,105)
{
Left=210
Top=15
Color=65535
Caption="Panel1"
Point(doColor)
}
END_SDK
Add(ChildPanel,2704980,126,35)
{
}
BEGIN_SDK
Add(EditMulti,522680,21,21)
{
}
Add(Panel,5519791,35,105)
{
Left=230
Top=45
Color=16776960
Caption="Panel2"
Point(doColor)
}
END_SDK
Add(ChildPanel,10738245,147,56)
{
}
BEGIN_SDK
Add(EditMulti,4642224,21,21)
{
}
Add(Panel,1229619,35,105)
{
Left=250
Top=75
Color=65280
Caption="Panel3"
Point(doColor)
}
END_SDK
Add(Label,15567467,84,49)
{
Left=40
Top=30
Width=104
Height=38
Color=16776960
Font=[Arial,22,1,16711935,204]
Transparent=0
Caption="Label 2"
}
Add(Label,4287436,105,70)
{
Left=70
Top=45
Width=104
Height=38
Color=65280
Font=[Arial,22,1,255,204]
Transparent=0
Caption="Label 3"
}


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#15: 2008-04-03 19:14:23 ЛС | профиль | цитата
Ну да, смена напрвления координаты Z
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)