|
Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
Тема
|
flicker при наследниците на TGraphicControl
|
|
Автор | Ц++ (Нерегистриран) |
Публикувано | 05.10.06 13:01 |
|
наследниците на TGraphicControl нямат Handle, и VCL предоставя някакъв вътрешен механизъм за комуникация и препращане на конкретни съобщения. така те получават и WM_PAINT съобщението, но тъй като е генерирано от родителския контрол се стига до един кофти момент - не можеш да прихванеш и спреш премигването (изтриването на фона преди изрисуването, което явно става някъде из кода на този визмислен и вграден механизъм).
т.напр. TPaintBox задължително премигва и няма начин как да се избегне според мен (освен да ползвате или си направите друг контрол).
някой да се е борил с нещо подобно и да има някакви по-добри идеи по въпроса ?
| |
Тема
|
Re: flicker при наследниците на TGraphicControl
[re: Ц++]
|
|
Автор | ToTo (Нерегистриран) |
Публикувано | 19.10.06 01:22 |
|
Решението е елементарно, при създаване на битмапа примерно пишеш следното:
DoubleBuffered := True;
Надявам се това да помогне
| |
Тема
|
Re: flicker при наследниците на TGraphicControl
[re: ToTo]
|
|
Автор | Ц++ (Нерегистриран) |
Публикувано | 30.10.06 22:00 |
|
DoubleBuffered е при наследниците на TWinControl. TPaintBox няма такава опция.
намерих обаче заобиколен вариант - слагам същата тази опция за формата, която съдържа TPaintBox DoubleBuffered := True; защото формата е наследник на TWinControl (т.е. има си собствен handle както споменах по-горе, че TPaintBox и наследниците на TGraphicControl нямат собствен Handle).
поредната недомислица на Borland и недоглеждане. такива тъпи грешки и пропуски сериозно ме отвращават понякога от Delphi :(
лошото е, че ме отблъскват и от любимия ми C++Builder :(
| |
Тема
|
:) като си такъв отворко
[re: Ц++]
|
|
Автор |
NikB (любопитен) |
Публикувано | 31.10.06 09:30 |
|
:) като си такъв отворко, що не полсваш панел или друг наследник на tWinControl за контейнер на tPaintBox-а си, ами буферираш цялата форма?
Освен това PaintBox-а, както и много други неща в Делфи, са направени да улесняват масовите задачи (да спестяват 90% от работата за 90% от задачите) - не можеш да очакваш универсално решение за всеки частен случей.
Като искаш ефективност - рисувай си на някоя Canvas, сам си буферирай когато ти е кеф и всичко е ОК.
| |
Тема
|
Re: flicker при наследниците на TGraphicControl
[re: Ц++]
|
|
Автор |
Mixy (@#$%^) |
Публикувано | 31.10.06 10:27 |
|
Това не е недомислица на Borland - тъкмо обратното
Mixy
| |
Тема
|
Re: :) като си такъв отворко
[re: NikB]
|
|
Автор | Ц++ (Нерегистриран) |
Публикувано | 31.10.06 16:48 |
|
много прибързан отговор. сега поред:
що не ползвам друг наследник на TWinControl - ами щото ме мързи. на Delphi се занимавам само за хоби и забавление (сериозните неща ги правя на Ц++).
другото - не съм казвал никъде че буферирам цялата форма.
точно ефективност очаквам - рисувам си в OFF-SCREEN битмап, където е буфериран image-а, след което го пльосвам при OnPaint в конкретния PaintBox. проблема е че родителският прозорец получава съобщението за изчистване на background-а и се изчиства, при което изчиства и фона на пейнтбокса. след което при WM_PAINT освен че изрисува родителския контрол, препраща и към клиентските контроли това съобщение (тъй като те няма по никакъв начин как да го получат от уиндоус).
за отбелязване е, че в сорса като че ли съгледах че прави комплексен DC в който да рисува като премахва размерите на клиентските контроли от TGraphicControl наследниците, но въпреки това се сбозва нещо.
| |
Тема
|
Re: flicker при наследниците на TGraphicControl
[re: Mixy]
|
|
Автор | Ц++ (Нерегистриран) |
Публикувано | 31.10.06 16:57 |
|
ами преди да кажа толкова сериозно обвинение срещу някого (като че е недомислица - в случая срещу борланд) сериозно порових из сорса на TWinControl, TControl, TGraphicControl.
с много идея е правено и проектирано, но явно някой си е оставил ръцете (и не за първи път).
идеята на TGraphicControl-ите е според мен все пак да не товари системата със допълнително заделяне на Handle за всеки контрол (което е ресурсоемко) ами да се емулира прозрачно абсолютно същото поведение на контрола като му се препредават вътрешно през борландските обекти съответните събития.
и това става ... почти. освен ако не бяха тук таме някои понакуцващи моменти, които винаги ще цъфнат баш когато не ги очакваш.
| |
Тема
|
TGraphicControl vs TCustomControl
[re: Ц++]
|
|
Автор | Йopдaн (Нерегистриран) |
Публикувано | 31.10.06 18:56 |
|
TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects (“windows”).
Every TWinControl object has a Handle property which provides the window handle for the underlying Microsoft Windows screen object.
Handle на какво се очаква да има TGraphicControl ? ? ?
Съвсем друга е работата с TCustomControl.
| |
Тема
|
Re: :) като си такъв отворко
[re: Ц++]
|
|
Автор |
Mixy (@#$%^) |
Публикувано | 31.10.06 20:41 |
|
> що не ползвам друг наследник на TWinControl - ами щото ме мързи.
Е, не обвинявай хората от Борланд за това, че теб те мързи .
Има начин PaintBox-a да не се изчиства преди всяко пречертаване - задай прозрачен стил на четката и си готов.
Mixy
| |
Тема
|
Re: flicker при наследниците на TGraphicControl
[re: Ц++]
|
|
Автор |
Mixy (@#$%^) |
Публикувано | 31.10.06 20:45 |
|
Местата с недомислици и бъгове в сорса на VCL се броят на пръсти - това е една от най-стабилните и ефективни библиотеки. Замисли се, какво копират от M$ с простотията, наречена NET
Mixy
| |
|
Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
|
|
|