Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#31: 2008-04-06 23:20:53 ЛС | профиль | цитата
Galkov писал(а):
Чтобы глюки половить

Конкретный подход к теме

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


Действительно фликует... Очень интересно, есть над чем подумать. Но режим отрисовки интересный и перспективный, если удасться победить эту байду, то можно вставить в PaintBox.

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


Муть получается... Мне удалось победить, но это имеет отрицательную сторону -- сильно повышается загрузка процессора.

Тут вопрос возник по схеме -- зачем в ней таймер на перерисовку, просто так, что ли? Эта схема прекрасно работает без таймера, и картинка нормально двигается, без косяков, и фликера нет...
карма: 22

0
Ответов: 9906
Рейтинг: 351
#32: 2008-04-07 11:32:34 ЛС | профиль | цитата
nesco писал(а):
и картинка нормально двигается, без косяков, и фликера нет...

Чудес не бывает: если флики есть при таймере, то они есть и при движении.
И наоборот.
Их наличие, свидетельство неправильной работы системы кодов

карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#33: 2008-04-07 12:10:16 ЛС | профиль | цитата
Еще одну муть нашел в другом компоненте, в VisualShape


  Control.Transparent := _prop_Transparent;
Inherited;
end;

procedure THIVisualShape.Paint(sender:PControl;DC:HDC);
var
PT: Integer;
begin
with sender.canvas{$ifndef F_P}^{$endif} do
begin
Brush.Color := Sender.Color;

// Вот это я добавил, а то никакой прозрачности никогда не будет
if not _prop_Transparent then begin
Brush.BrushStyle := bsSolid;
end else
Brush.BrushStyle := bsClear;
FillRect(Sender.ClientRect);
Brush.BrushStyle := bsSolid;

Galkov писал(а):
Их наличие, свидетельство неправильной работы системы кодов

А я на чудеса и не расчитывал, и при движении тоже наблюдал флики, да и не только при движении но и при клацании мышой.
В любом случае, дополнительно выполняя Self_.Invalidate или Self_.DblBufTopParent.Invalidate, мы повторно вызываем DoDrawDblBuffered( Self_ ), что очень сильно грузит процессор, но убирает напрочь все флики. Вот как это победить, я пока не нашел.

карма: 22

0
Ответов: 9906
Рейтинг: 351
#34: 2008-04-07 12:30:39 ЛС | профиль | цитата
nesco писал(а):
Вот это я добавил, а то никакой прозрачности никогда не будет

Ты же говорил, что каждый день апдейт с SVN делаешь
Есть у меня прозрачность...
------------ Дoбавленo:

Ну и в очередной раз продемонстрировал, что простые пути - не для тебя
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#35: 2008-04-07 12:38:05 ЛС | профиль | цитата
Galkov писал(а):
Ты же говорил, что каждый день апдейт с SVN делаешь

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

Вот посмотри, что получается, при таймере грузит процессор, но убирает флик, но при перемещении флик не убирается.


//[function WndProcBufferedDraw]
function WndProcBufferedDraw( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
begin
Result := False;
if (Self_.DblBufTopParent = nil) then exit;
case Msg.message of
WM_ERASEBKGND:
begin
if (Self_.fCannotDoubleBuf) or not ((Self_.DblBufTopParent <> nil) and
Self_.fTransparent and (Self_.fParent <> nil)) or (Self_.DblBufTopParent.fDblBufPainting) then exit;
Rslt := 1;
Result := TRUE;
end;
WM_PAINT:
begin
if (Self_.fCannotDoubleBuf) or not ((Self_.fDoubleBuffered or Self_.DoubleBuffered)) or
Self_.CannotDoubleBuf or (Msg.wParam <> 0) then exit;
if not (Self_.DblBufTopParent.fDblBufPainting) then DoDrawDblBuffered( Self_ );
if (not Self_.DblBufTopParent.fDblBufPainting) or (Self_.DblBufTopParent.fPaintDC = 0) then
Self_.DblBufTopParent.Invalidate; // вот тут происходит сильная загрузка прцессора
Rslt := 0;
Result := True;
end;
WM_NCPAINT:
begin
if (Self_.fCannotDoubleBuf) or not Self_.fDoubleBuffered or Self_.CannotDoubleBuf or
Self_.fIsForm then exit;
Rslt := 0;
Result := True;
end;
WM_SETTEXT:
begin
if not Self_.fIsStaticControl then exit;
ShowWindow( Self_.fHandle, SW_HIDE );
Rslt := DefWindowProc( Self_.fHandle, WM_SETTEXT, Msg.wParam, Msg.lParam );
ShowWindow( Self_.fHandle, SW_SHOWNA );
UpdateWindow( Self_.fHandle ); // necessary!!!
Result := True;
end;
WM_COMMAND:
case HiWord( Msg.wParam ) of
LBN_SELCHANGE: Self_.Invalidate;
end;
WM_HSCROLL, WM_VSCROLL, WM_WINDOWPOSCHANGED: Self_.Invalidate;
end;
end;



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


Galkov писал(а):
Ну и в очередной раз продемонстрировал, что простые пути - не для тебя

Ну... все гениальное -- просто (с)
карма: 22

0
Ответов: 9906
Рейтинг: 351
#36: 2008-04-07 13:06:34 ЛС | профиль | цитата
nesco писал(а):
Вот посмотри, что получается

Получается что грузит даже без таймера - рисует всю сознательную жизнь
Эта техника и называется "метод тыка", между прочим

Вообще-то, я не сторонник таких "технологий".
Предпочитаю сначала понять почему идет флик, и уже потом "питулять детальку"
А не наоборот.

Например, вставить отладочные логи, которые расскажут в какой последовательности чего вызывается из KOL-а, начиная с момента Control.Invalidate...

Меня, к примеру, сразу смущает техника, когда "поход наверх" в DblBufTopParent осуществляется абсолютно без учета форма ли это, а "поход вниз" - исключительно через GW_CHILD


Это мысли вслух были, конечно.
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#37: 2008-04-07 13:28:10 ЛС | профиль | цитата
Galkov писал(а):
Эта техника и называется "метод тыка", между прочим

Ну, между прочим, это не совсем метод тыка -- идея-то взята у Кладова.
Galkov писал(а):
Предпочитаю сначала понять почему идет флик

Да вот и мне интересно, почему ?
Galkov писал(а):
Меня, к примеру, сразу смущает техника, когда "поход наверх" в DblBufTopParent осуществляется абсолютно без учета форма ли это, в "поход вниз" - исключительно через GW_CHILD

Насчет формы, я тоже заметил, что не отслеживается, а вот про поход вниз, весьма интересное замечание. Надо бы глянуть в новой реализации KOL'a
карма: 22

0
Ответов: 9906
Рейтинг: 351
#38: 2008-04-07 14:52:28 ЛС | профиль | цитата
Между прочим, истинно KOL-овский вариант WndProcBufferedDraw в моем "примерчике" правильно работает - без фликов, и без загрузки таймера.
Отсюда вопрос: чего же ты чинил, когда ломал правильную работу
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#39: 2008-04-07 15:23:09 ЛС | профиль | цитата
Galkov, и вот это ты называешь правильной работой


Add(MainForm,3363257,329,252)
{
Left=20
Top=105
Color=32768
AlphaBlendValue=100
}
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
AlphaBlendValue=200
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(ListBox,9680544,252,98)
{
Left=185
Top=20
Width=185
Height=115
DoubleBuffered=0
Strings=#7:dfsdfsd|7:sdfsdsf|8:sdsdffsd|12:cxbhxcgfbhxc|11:xfgxfgxfgxf|11:xfgxfgxfgfx|12:xfgxfgxcfgxf|11:xfgxfgxfgxf|13:xfgxfgxfgxfxf|11:xfgxfgxfgxf|
Point(onMouseDown)
Point(Handle)
Point(doSendToBack)
Point(onMouseUp)
link(onMouseDown,14737298:doMove,[(296,118)(296,146)(261,146)(261,174)])
link(onMouseUp,9680544:doSendToBack,[(296,125)(296,135)(240,135)(240,146)])
}
Add(Label,12473907,189,112)
{
Left=255
Top=50
Width=87
Height=41
Font=[MS Sans Serif,24,1,255,1]
Transparent=0
Alignment=2
}
Add(MoveWindow,14737298,273,168)
{
link(Handle,9680544:Handle,[])
}
END_SDK
Add(RichEdit,14296980,385,252)
{
Left=195
Top=20
Width=185
Height=235
Point(Handle)
Point(onMouseDown)
link(onMouseDown,14737298:doMove,[(429,265)(429,289)(394,289)(394,314)])
}
Add(MoveWindow,14737298,406,308)
{
link(Handle,14296980:Handle,[])
}


На что, скажи мне, похожи дочерние формы

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


Или товой пример с дочерними формами


Add(ChildForm,629062,378,168)
{
}
BEGIN_SDK
Add(EditMulti,12832418,21,21)
{
Width=419
Height=228
}
Add(MainForm,11895567,147,126)
{
Left=35
Top=105
link(onCreate,4904784:doDraw,[])
}
Add(Timer,13184380,210,35)
{
Interval=10
link(onTimer,3890076:doRefresh,[(254,41)(254,83)])
}
Add(VisualShape,6919706,336,77)
{
Left=80
Top=40
Height=125
PColor=8388736
PWidth=3
Color2=65535
ShapeType=9
Transparent=0
Point(onMouseDown)
Point(Handle)
link(onMouseDown,14737298:doMove,[(380,83)(380,126)(324,126)(324,146)])
}
Add(MoveWindow,14737298,336,140)
{
link(Handle,6919706:Handle,[])
}
Add(PaintBox,3890076,266,77)
{
Left=155
Top=60
Width=109
Height=76
Point(onMouseDown)
Point(Handle)
link(onMouseDown,8170460:doMove,[(307,90)(307,126)(261,126)(261,146)])
}
Add(Img_Bmp,4904784,203,140)
{
link(Bitmap,3890076:Bitmap,[(209,118)(272,118)])
link(SourceBitmap,3121004:Bitmap,[])
}
Add(Bitmap,3121004,210,77)
{
Picture=[ZIP46A4000078DAED9CAF721B4B1AC56703030C02525B010101A9AD0B0C2E300808103048ED0A081804A4762F0870D51AA86A030C165C7041608081E102837D00833C401EC1601FC10F21EDD11CCDD1D1D733633B919C69A9BB3ACA48964633BF39DF9FFEBA47A3BF5DFCA3AADB11FEFD05FFFE897F7FC5BF3F557FAE5FFF3BFEFEAFA7FCD7B4F980DBF3D72FE799B441737C71F8EADD1F1F5FBF3B2A1C37D03EFEF78FD1F987C39351E1F83D0DEC20C6C3C9DBA7CF0E66B3D9E4723A646D0E5D8F60073D8EBF9C610364CFBE7E995C7E7A3B3D199A3C87CB1141861D7A3C78F10C4A044A40045388F4E8E3B870BC6F7B79F4CB9BB309C0111FF4F8EB876300C5EB4059386E802FF488689E314798184E03BA8052F0085D4020ECAFDE1EC206B77AB8D83FBE141D1C071573AA074900EC184627B5AD2D3A36EA20C04ED3C39BB771ACB84ED839820CBE058F99E911870BD1ADF019383D5D02BD9C62433437A89785433C19E142F230D0714573F28F604109E0D08FFFFD1B858073C0297DFEFCF9EAEA4A02596105CD264DF9416DC28A11AF710C3405747C17FBD012C93B38BA1DA19F9E9E02DFB76FDF2E2E2E00118FA3D1D955DDB00DD98275A0C9737EE84899B90E3A3E0883E0232E891C716679384D091D0481EFFCFC1CC88E8EDE83DACDCD0D20A25F5F5FE34FD8F8E5F01DB6F106B0963C891288EFE9CE48108FDC600A4988043ACCE245D5EFD7C191860C82E3F1EF20487CC7C7C778C4533CE24F20C86D6A134FF129B09681A36327FDC64876C22788D420AE84720302FDB9E078A8F7E248C70425020A8446F5A51DD4BC83E3CB5747E8E008C4F40972AC5DEE520429460D6698727B579AF53828E94CC00182182F63E9229CD623D4299316BCDEC7F1CD9B37F08F18DE622F941B3BB6890C1B4496F68383E7000A8E3808C6074627F41425C03D79F2441CA544E9910341F44073E3A98F221BD3030658BA7B70E0E8BEEE53E21B37A9CB1D768DDDC1904193F8481304BBF07987975C007DF10C8AC6993379664FCFDFF5E81CE9197956DA839BF98FA0E4C5C31E70A6815DA3BE85EE4C7A53C54F4F99EFB06B9C860E57667B1F824198502550CA1E79C4C12A5D8FEE1C99BD4ACBA2C9A3E2E1DD899217895FA16BB3F41835BB88AF11A0A4477C2E4026302A97DC11AF114FE820DC03C2573A50C6686787F0ED1CDFBF7F0F2E7854E2923A3871748BA67F640ECBFC5134E9B34001DD33A110AC488D8AA3E8489F17830E47B9FD58630A57DFE554EC94FFF1181E90F7C03621259C8C2002072C1DAE53A46EEAE61C6F6F6F1164146D16FAAA69A2E1949403CA513EA95B2A46F9477958EF2E4FEED0E93B35757E44F9BC6C531A6C757FCC3788AFABCED4C21166A86D26D8340485E3EBBAF129FE04F5E1A9C0617B369BE111DB382526EDE4B8906D6D50841844948A517AC499CB940454DBA42917B47476F553B9547D84BB123E121CAB5CD0D8AF04C851D99D65BAAA5583DAE6B885E74370A08C375041EE7742F71769F5F8E08275CD114C5D927AA7136492482FE62342EF38C9305AA56454130AA34999700AD17D1F09B2A0F5E03C1C27293D6A1B469D924A55431F9476FE7561B007CF354A011A5C0949D2F7DFCA51037C9E9EC74A76A0440F862FFB9590C3A7E8F8260D4D9215C187D689AB548660E7E082AB0ADD133A0AC1236978B3C8921DC882635784915D3307761CE3E6B4C7490A12949B4274197A97A8BFAFD25E79680EECA81739EC259D3A44863186A374A74EAC725E7C0F6294E235F518384ACE748EED6A4A70B83615587501FCB3E123D8F8118291A3E3533468955EA04667C42E82FEBAEBD48BE7FC161ABEBE5DD51D39C74061B2165BA7010A51BA12C9347074096F64F6B1F27AADF0B5127459F9E0444EDD1FFD4F8ED877CBAF734F1A24A981ED2A3589638C981E538FF2A46EDD41D10A4D1B195C561ABA38414F1DDC48D95377EEB9057B20BB44993804AAD239CAA87930C0E10401AE81D8224642A45DCBBA99BBF029E1CA156EB08E593944FA235A539A820582F7E984EB7B9030B521494A98328BC5B8FEFC4380E8838D94A390D1BABD08AD8D6D94D32BB7E8AE0180130CBA0B29B1725D3DD5FB533397D3E4250C7AA451BB2B6C52E576B718F428D185EC7D4B13DF95AE7FEA0DDDD98503D22B9C416C4D929DA6E7C95D1530C53715111662BC4B8301A21F8C2E1E87745B9DD2A934F60A6274634CA9918E0ADDAD1C1D251EA5C455CDA671971A1DD3C669D4CBB933AB1A8C932CA755867E842A0E6D7D5E21D4609821FAD9BAF1929A0E573E5BAFE8345291EAC468CE6BF1A746E929175EE4904323B6B10D395A39EAABF95D22F838D3DC55F48C35C430BC779ACE4B2379C7D7EAD753BF997A4985170EA859C46F05E7D95F20E801ED31A715AB385C490274D09A1742D4A908197880CBD30B10F515BC78346D1E0C272953134E4781EE137DB78F3FBB5D852C4716E7813818AFB2DC946C8A589F4D5322999E660878182C6D85715BA853F8C65AB1E764F453D6AB54A15AA73A7B2837053DFAC9A48FAD341591BC0AEB513B88317C4B2B3EDF1B77F2D3E6AF5BC37428DB05E9DDD95B852955861C280CBD71215D7DFAD230B0F3CC8686FC7367B4AB56CFE8167D4F7629CA2E330F5302CC7E827F5482A561B2D7C33DA4E0B3435861510531D233BA397791EA8AA1AD40431A949AB652718EACA9CA10F765257285C3592D55A562745B4ED985EEB52C6EF4DBB813F1A9151F176A09435AFB70431ED6FA9E5575B68ED4C12DA61027D6D72B318B25901CC3B58EDBD2E0B01CF0D6B2EA59B213AAEB5B5AA4BA318E4A77FA66859A05B82DDD8B5ADD1C431AC42F55123ECFB6ADEC5A7694BA45E98E98486A8D69535B6565B075142C5F91FA47AFE966CED19667048E2B255E4E2FFE778DBEC651ABC49BA256573D26C45F9526E91C778563ADC7D630DD705CD6AFC071BD20B85E1C6C8B4269DEE70361E798AF6957AC0B78B04E8D9A76BD201897BF248FBD10430224A356F298314705C42EFF283D6A09658F1EC7DD7A4C2B1761F26B2738DAB0BA558FB602A64F8993A456D895F7F88A815D8833FC8FB3FBE952B696CCB1C73972A54777E95F7A0C33B103CF0D1FC2D1423667E93A2439BDA71EFBC548CF48D7CC3C9C10B3D7A38F0EB5BCA86B5038E978EC8FD4BE867529439BCECEDA39AEADA7589E52B77587E16017C4740593AFB351ED56150A39CA7CC5B8C631ACF9ED1F65F7F42E2586323899FA94E18EE87165DDF55497CF112A3EB496CE7A0A68E99421D5A76833FC02C4F7707447E935349FA2B97F29372DBB6A8250ABBC1CE54E7174030FB30B5A47DCCF2E84662F5C73B77AA7BFB8831C57C234036F9D536D9D92F5C913AF8CE92E74FE820CED9ACB9CB9B8748077B16E80A3D3F4C9F554A15E0AA307740DCAFDF1E3F8D3D9D72FE0C81D9E9E9E5ED4EDC3AF07D8DE598E4A897C75A897FBE943755B6C980554B2ADFB8F3503816DC0E53DC7BF8F96ABF047AF9EEE32478D1D7DE15DEB4AD1B06447E538193E8B6FE4C89BB867B3D97F4E968BEFA1CADDE7E8F24C6F5C5074F2882FA7B9FA498B7A1049AC575757B7B7B7E038BBB98051C34542987BC4D11B448493A7AC96F7FC351A0C73121A114186FCA10EA09C35EDEB6FAFA14A98F99E72845F0347E1587AC69351FCE58FB5B987A91604340AFDC41F5AC9E2270AB7A84710840C21BD50318A25A266464CF1DAB3A5A1FDD4D6A372646EA4D121C77CAA188D3B5677EB57693C319AE7DC36F3FB66BACB85B75F293AFB5CA39B36FDA3124C2EEB291C570D44C28C63DBCDE19F349E911EE799B7CDFFDE1EB5B9A647BFBBB9B1EBF0337385636C1E3DEC3EFB69E0E8758A79FE6DF31CF5A372718E6CDDAEE51FE73BD1B6F23B9A0A3B5D28C57137C4B82D8EA01324B9CA819AB907FEE8D97C57DAB67ED7B5E79E1116DCE6BBD5B6F8FBB85A53EBF768CF77B455FBB1CC73ABAD2C21CDE61A95E5A999D85159FA3ACC5696D566644A65C9EED0AF51590E3CF856961A67708DCA32E67CB2BBB2447AE8A654965F0FDE94CAD2EE8C6A0E65D97846E5BBB2247DE04EAF2C77CF62605B96D2E7558228CBF4079E96975B0072A91795DB0B3232AB72EB4246ADDC1631FC566EB9C8C58ECAED1CC3CFCFCBAD22C36FE536948CDADEDEE292A34DEDDBED3379B5FDBC3527BB11EE1EDEF6936F0AB13FB714E5988DEFDBED4A9946A5BDBA152A5F6BDA9FDBAC4A2BADB4D24A2BADB4D24A2BADB4D24A7B68FB3F23257950]
}
Add(MoveWindow,8170460,273,140)
{
link(Handle,3890076:Handle,[])
}
END_SDK
Add(MainForm,4442582,336,217)
{
Left=10
Top=10
Width=302
Height=244
DoubleBuffered=0
Position=1
link(onCreate,4904784:doDraw,[])
}
Add(Timer,13184380,427,126)
{
Interval=10
link(onTimer,3890076:doRefresh,[(471,132)(471,174)])
}
Add(MoveWindow,8170460,490,231)
{
link(Handle,3890076:Handle,[])
}
Add(VisualShape,6919706,553,168)
{
Left=80
Top=40
Height=125
PColor=8388736
PWidth=3
Color2=65535
ShapeType=9
Transparent=0
Point(onMouseDown)
Point(Handle)
link(onMouseDown,14737298:doMove,[(597,174)(597,217)(541,217)(541,237)])
}
Add(MoveWindow,14737298,553,231)
{
link(Handle,6919706:Handle,[])
}
Add(PaintBox,3890076,483,168)
{
Left=115
Top=60
Width=109
Height=76
Point(onMouseDown)
Point(Handle)
link(onMouseDown,8170460:doMove,[(524,181)(524,217)(478,217)(478,237)])
}
Add(Img_Bmp,4904784,420,231)
{
link(Bitmap,3890076:Bitmap,[(426,209)(489,209)])
link(SourceBitmap,3121004:Bitmap,[])
}
Add(Bitmap,3121004,427,168)
{
Picture=[ZIP46A4000078DAED9CAF721B4B1AC56703030C02525B010101A9AD0B0C2E300808103048ED0A081804A4762F0870D51AA86A030C165C7041608081E102837D00833C401EC1601FC10F21EDD11CCDD1D1D733633B919C69A9BB3ACA48964633BF39DF9FFEBA47A3BF5DFCA3AADB11FEFD05FFFE897F7FC5BF3F557FAE5FFF3BFEFEAFA7FCD7B4F980DBF3D72FE799B441737C71F8EADD1F1F5FBF3B2A1C37D03EFEF78FD1F987C39351E1F83D0DEC20C6C3C9DBA7CF0E66B3D9E4723A646D0E5D8F60073D8EBF9C610364CFBE7E995C7E7A3B3D199A3C87CB1141861D7A3C78F10C4A044A40045388F4E8E3B870BC6F7B79F4CB9BB309C0111FF4F8EB876300C5EB4059386E802FF488689E314798184E03BA8052F0085D4020ECAFDE1EC206B77AB8D83FBE141D1C071573AA074900EC184627B5AD2D3A36EA20C04ED3C39BB771ACB84ED839820CBE058F99E911870BD1ADF019383D5D02BD9C62433437A89785433C19E142F230D0714573F28F604109E0D08FFFFD1B858073C0297DFEFCF9EAEA4A02596105CD264DF9416DC28A11AF710C3405747C17FBD012C93B38BA1DA19F9E9E02DFB76FDF2E2E2E00118FA3D1D955DDB00DD98275A0C9737EE84899B90E3A3E0883E0232E891C716679384D091D0481EFFCFC1CC88E8EDE83DACDCD0D20A25F5F5FE34FD8F8E5F01DB6F106B0963C891288EFE9CE48108FDC600A4988043ACCE245D5EFD7C191860C82E3F1EF20487CC7C7C778C4533CE24F20C86D6A134FF129B09681A36327FDC64876C22788D420AE84720302FDB9E078A8F7E248C70425020A8446F5A51DD4BC83E3CB5747E8E008C4F40972AC5DEE520429460D6698727B579AF53828E94CC00182182F63E9229CD623D4299316BCDEC7F1CD9B37F08F18DE622F941B3BB6890C1B4496F68383E7000A8E3808C6074627F41425C03D79F2441CA544E9910341F44073E3A98F221BD3030658BA7B70E0E8BEEE53E21B37A9CB1D768DDDC1904193F8481304BBF07987975C007DF10C8AC6993379664FCFDFF5E81CE9197956DA839BF98FA0E4C5C31E70A6815DA3BE85EE4C7A53C54F4F99EFB06B9C860E57667B1F824198502550CA1E79C4C12A5D8FEE1C99BD4ACBA2C9A3E2E1DD899217895FA16BB3F41835BB88AF11A0A4477C2E4026302A97DC11AF114FE820DC03C2573A50C6686787F0ED1CDFBF7F0F2E7854E2923A3871748BA67F640ECBFC5134E9B34001DD33A110AC488D8AA3E8489F17830E47B9FD58630A57DFE554EC94FFF1181E90F7C03621259C8C2002072C1DAE53A46EEAE61C6F6F6F1164146D16FAAA69A2E1949403CA513EA95B2A46F9477958EF2E4FEED0E93B35757E44F9BC6C531A6C757FCC3788AFABCED4C21166A86D26D8340485E3EBBAF129FE04F5E1A9C0617B369BE111DB382526EDE4B8906D6D50841844948A517AC499CB940454DBA42917B47476F553B9547D84BB123E121CAB5CD0D8AF04C851D99D65BAAA5583DAE6B885E74370A08C375041EE7742F71769F5F8E08275CD114C5D927AA7136492482FE62342EF38C9305AA56454130AA34999700AD17D1F09B2A0F5E03C1C27293D6A1B469D924A55431F9476FE7561B007CF354A011A5C0949D2F7DFCA51037C9E9EC74A76A0440F862FFB9590C3A7E8F8260D4D9215C187D689AB548660E7E082AB0ADD133A0AC1236978B3C8921DC882635784915D3307761CE3E6B4C7490A12949B4274197A97A8BFAFD25E79680EECA81739EC259D3A44863186A374A74EAC725E7C0F6294E235F518384ACE748EED6A4A70B83615587501FCB3E123D8F8118291A3E3533468955EA04667C42E82FEBAEBD48BE7FC161ABEBE5DD51D39C74061B2165BA7010A51BA12C9347074096F64F6B1F27AADF0B5127459F9E0444EDD1FFD4F8ED877CBAF734F1A24A981ED2A3589638C981E538FF2A46EDD41D10A4D1B195C561ABA38414F1DDC48D95377EEB9057B20BB44993804AAD239CAA87930C0E10401AE81D8224642A45DCBBA99BBF029E1CA156EB08E593944FA235A539A820582F7E984EB7B9030B521494A98328BC5B8FEFC4380E8838D94A390D1BABD08AD8D6D94D32BB7E8AE0180130CBA0B29B1725D3DD5FB533397D3E4250C7AA451BB2B6C52E576B718F428D185EC7D4B13DF95AE7FEA0DDDD98503D22B9C416C4D929DA6E7C95D1530C53715111662BC4B8301A21F8C2E1E87745B9DD2A934F60A6274634CA9918E0ADDAD1C1D251EA5C455CDA671971A1DD3C669D4CBB933AB1A8C932CA755867E842A0E6D7D5E21D4609821FAD9BAF1929A0E573E5BAFE8345291EAC468CE6BF1A746E929175EE4904323B6B10D395A39EAABF95D22F838D3DC55F48C35C430BC779ACE4B2379C7D7EAD753BF997A4985170EA859C46F05E7D95F20E801ED31A715AB385C490274D09A1742D4A908197880CBD30B10F515BC78346D1E0C272953134E4781EE137DB78F3FBB5D852C4716E7813818AFB2DC946C8A589F4D5322999E660878182C6D85715BA853F8C65AB1E764F453D6AB54A15AA73A7B2837053DFAC9A48FAD341591BC0AEB513B88317C4B2B3EDF1B77F2D3E6AF5BC37428DB05E9DDD95B852955861C280CBD71215D7DFAD230B0F3CC8686FC7367B4AB56CFE8167D4F7629CA2E330F5302CC7E827F5482A561B2D7C33DA4E0B3435861510531D233BA397791EA8AA1AD40431A949AB652718EACA9CA10F765257285C3592D55A562745B4ED985EEB52C6EF4DBB813F1A9151F176A09435AFB70431ED6FA9E5575B68ED4C12DA61027D6D72B318B25901CC3B58EDBD2E0B01CF0D6B2EA59B213AAEB5B5AA4BA318E4A77FA66859A05B82DDD8B5ADD1C431AC42F55123ECFB6ADEC5A7694BA45E98E98486A8D69535B6565B075142C5F91FA47AFE966CED19667048E2B255E4E2FFE778DBEC651ABC49BA256573D26C45F9526E91C778563ADC7D630DD705CD6AFC071BD20B85E1C6C8B4269DEE70361E798AF6957AC0B78B04E8D9A76BD201897BF248FBD10430224A356F298314705C42EFF283D6A09658F1EC7DD7A4C2B1761F26B2738DAB0BA558FB602A64F8993A456D895F7F88A815D8833FC8FB3FBE952B696CCB1C73972A54777E95F7A0C33B103CF0D1FC2D1423667E93A2439BDA71EFBC548CF48D7CC3C9C10B3D7A38F0EB5BCA86B5038E978EC8FD4BE867529439BCECEDA39AEADA7589E52B77587E16017C4740593AFB351ED56150A39CA7CC5B8C631ACF9ED1F65F7F42E2586323899FA94E18EE87165DDF55497CF112A3EB496CE7A0A68E99421D5A76833FC02C4F7707447E935349FA2B97F29372DBB6A8250ABBC1CE54E7174030FB30B5A47DCCF2E84662F5C73B77AA7BFB8831C57C234036F9D536D9D92F5C913AF8CE92E74FE820CED9ACB9CB9B8748077B16E80A3D3F4C9F554A15E0AA307740DCAFDF1E3F8D3D9D72FE0C81D9E9E9E5ED4EDC3AF07D8DE598E4A897C75A897FBE943755B6C980554B2ADFB8F3503816DC0E53DC7BF8F96ABF047AF9EEE32478D1D7DE15DEB4AD1B06447E538193E8B6FE4C89BB867B3D97F4E968BEFA1CADDE7E8F24C6F5C5074F2882FA7B9FA498B7A1049AC575757B7B7B7E038BBB98051C34542987BC4D11B448493A7AC96F7FC351A0C73121A114186FCA10EA09C35EDEB6FAFA14A98F99E72845F0347E1587AC69351FCE58FB5B987A91604340AFDC41F5AC9E2270AB7A84710840C21BD50318A25A266464CF1DAB3A5A1FDD4D6A372646EA4D121C77CAA188D3B5677EB57693C319AE7DC36F3FB66BACB85B75F293AFB5CA39B36FDA3124C2EEB291C570D44C28C63DBCDE19F349E911EE799B7CDFFDE1EB5B9A647BFBBB9B1EBF0337385636C1E3DEC3EFB69E0E8758A79FE6DF31CF5A372718E6CDDAEE51FE73BD1B6F23B9A0A3B5D28C57137C4B82D8EA01324B9CA819AB907FEE8D97C57DAB67ED7B5E79E1116DCE6BBD5B6F8FBB85A53EBF768CF77B455FBB1CC73ABAD2C21CDE61A95E5A999D85159FA3ACC5696D566644A65C9EED0AF51590E3CF856961A67708DCA32E67CB2BBB2447AE8A654965F0FDE94CAD2EE8C6A0E65D97846E5BBB2247DE04EAF2C77CF62605B96D2E7558228CBF4079E96975B0072A91795DB0B3232AB72EB4246ADDC1631FC566EB9C8C58ECAED1CC3CFCFCBAD22C36FE536948CDADEDEE292A34DEDDBED3379B5FDBC3527BB11EE1EDEF6936F0AB13FB714E5988DEFDBED4A9946A5BDBA152A5F6BDA9FDBAC4A2BADB4D24A2BADB4D24A2BADB4D24A7B68FB3F23257950]
}


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


Ну а начать, все же, стоило. В конце концов, удалось разобраться с инверсией координаты Z
карма: 22

0
Ответов: 9906
Рейтинг: 351
#40: 2008-04-07 16:13:40 ЛС | профиль | цитата
nesco, попробуй прогнать все свои тесты в варианте

  • истинно KOL-овский вариант WndProcBufferedDraw (причесать успеется еще)
  • твой вариант DoDrawChildrenDblBuffered
  • такой вариант DblBufTopParent
    
    #pas
    function TControl.DblBufTopParent: PControl;
    var Ctl: PControl;
    begin
    Result := nil;
    Ctl := @ Self;
    while Ctl <> nil do
    begin
    if Ctl.fDoubleBuffered then
    Result := Ctl;
    if Ctl.isForm then exit;
    Ctl := Ctl.fParent;
    end;
    end;
  • карма: 9

    0
    Разработчик
    Ответов: 26163
    Рейтинг: 2127
    #41: 2008-04-07 16:45:56 ЛС | профиль | цитата
    Galkov, все четко, только под FPC надо вот так

    
    function TControl.DblBufTopParent: PControl;
    var Ctl: PControl;
    begin
    Result := nil;
    // Ctl := @ Self;
    Ctl := Self;
    while Ctl <> nil do
    begin
    if Ctl.fDoubleBuffered then
    Result := Ctl;
    if Ctl.isForm then exit;
    Ctl := Ctl.fParent;
    end;
    end;

    карма: 22

    0
    Ответов: 9906
    Рейтинг: 351
    #42: 2008-04-07 17:25:46 ЛС | профиль | цитата
    Блин, если говорить об FPC, то надо в ДЕСЯТКИ раз больше "по другому"

    Покажи, к примеру, свой TObj.DoDestroy из FPC
    ------------ Дoбавленo:

    А проблемы есть какие-то при полупрозрачной дочерней форме...
    карма: 9

    0
    Разработчик
    Ответов: 26163
    Рейтинг: 2127
    #43: 2008-04-07 17:33:42 ЛС | профиль | цитата
    Galkov писал(а):
    проблемы есть какие-то при полупрозрачной дочерней форме...

    Во всех примерах и Z, и полупрзрачность отрабатываются нормально, и нет черных дыр.
    карма: 22

    0
    Ответов: 9906
    Рейтинг: 351
    #44: 2008-04-07 17:36:17 ЛС | профиль | цитата
    code_8772.txt
    карма: 9

    0
    файлы: 1code_8772.txt [14.9KB] [374]
    Разработчик
    Ответов: 26163
    Рейтинг: 2127
    #45: 2008-04-07 17:43:12 ЛС | профиль | цитата
    Galkov, работает, но при запуске, пока не сдвинешь форму, не отрисовывает подложку, а так все работает и запускает полупрозрачную форму нормально
    карма: 22

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