Проблем с компонентите
11 отговора
294 прегледа
Проблем с компонентите
Значи целта е да се получи компонент със следните възможности:
- прозрачен
- Align: alLeft, alRight, ...
- OnMouseLeave, OnMouseEnter, OnMouseDown, ...
- да приема други компоненти
Това е нещо между TImage(прозрачен като няма BMP) и TPanel(контейнер) с добавени събития OnMouseLeave и OnMouseEnter
Проблема ми е, че:
- ако тръгна от TGraphicControl не мога да го направя контейнер
- ако тръгна от някой TWinControl не мога да го направя прозрачен
При тези обстоятелства се налага бая писане, а на мен ми е малко трудно да направя нещата бързо и без бъгове.
Под прозрачен разбирам да се вижда какво съм рисувал по Canvas-а на Form-ата.
Нямам много опит в правенето на компоненти и исках да разбера какво според вас е най-доброто решение...
Благодаря предварително
by Waz Gaa
[email protected]
- прозрачен
- Align: alLeft, alRight, ...
- OnMouseLeave, OnMouseEnter, OnMouseDown, ...
- да приема други компоненти
Това е нещо между TImage(прозрачен като няма BMP) и TPanel(контейнер) с добавени събития OnMouseLeave и OnMouseEnter
Проблема ми е, че:
- ако тръгна от TGraphicControl не мога да го направя контейнер
- ако тръгна от някой TWinControl не мога да го направя прозрачен
При тези обстоятелства се налага бая писане, а на мен ми е малко трудно да направя нещата бързо и без бъгове.
Под прозрачен разбирам да се вижда какво съм рисувал по Canvas-а на Form-ата.
Нямам много опит в правенето на компоненти и исках да разбера какво според вас е най-доброто решение...
Благодаря предварително
by Waz Gaa
[email protected]
Re: Проблем с компонентите
(Без да се опитвам да разбера каква е крайната цел на упражнението)
Що не тръгнеш направо от
TControl? За да е контейнер, указваш му в ControlStyle "csAcceptsControls".
BTW напоследък установих, че Borland не са предвидили интерфейс към маса от параметрите на WinSDK-контролите, които лежат под VCL. Не е изключено да може през WinAPI да дадеш TPanel да е прозрачен (но не съм сигурен на кой точно базов контрол стъпва)...
Животът е гаден и после човек умира...
Що не тръгнеш направо от
TControl? За да е контейнер, указваш му в ControlStyle "csAcceptsControls".
BTW напоследък установих, че Borland не са предвидили интерфейс към маса от параметрите на WinSDK-контролите, които лежат под VCL. Не е изключено да може през WinAPI да дадеш TPanel да е прозрачен (но не съм сигурен на кой точно базов контрол стъпва)...
Животът е гаден и после човек умира...
Редактирано от bass на
Re: Проблем с компонентите
Moje bi imash predvid:
Params.ExStyle := Params.ExStyle + WS_EX_Transparent;
ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls]
:-) da taka stana.
"(Без да се опитвам да разбера каква е крайната цел на упражнението) "
ОК. Значи да обясня. В момента си правя skinable прозорец. Преди просто слагах TImage там където исках картинка. Имаше малко премитване при промяна на размера на прозореца, но скина не беше на целия прозорец и не беше толкова страшно. Обаче, видях едно съобщение WM_ERASEBKGND и реших, че мога да си рисувам картинките направи по прозореца и да използвам прозрачни панели, за да не ходят другите компоненти по нарисуваното.
Идеята ми е да намаля колкото е възможно премигването. Сега чета насам натам и търся как да оптимизирам рисуването и прерисуването. Ако някой от вас се е занимавал и може да ми помогне ще ме зарадва Много.
В момента на WM_ERASEBKGND си рисувам скина, но явно някой преди това (WM_PAINT ?) ми изчиства фона (с MainForm.Color) и когато се променя размира на прозореца пак си ми премигва...
by Waz Gaa
[email protected]
Params.ExStyle := Params.ExStyle + WS_EX_Transparent;
ControlStyle := ControlStyle - [csOpaque] + [csAcceptsControls]
:-) da taka stana.
"(Без да се опитвам да разбера каква е крайната цел на упражнението) "
ОК. Значи да обясня. В момента си правя skinable прозорец. Преди просто слагах TImage там където исках картинка. Имаше малко премитване при промяна на размера на прозореца, но скина не беше на целия прозорец и не беше толкова страшно. Обаче, видях едно съобщение WM_ERASEBKGND и реших, че мога да си рисувам картинките направи по прозореца и да използвам прозрачни панели, за да не ходят другите компоненти по нарисуваното.
Идеята ми е да намаля колкото е възможно премигването. Сега чета насам натам и търся как да оптимизирам рисуването и прерисуването. Ако някой от вас се е занимавал и може да ми помогне ще ме зарадва Много.
В момента на WM_ERASEBKGND си рисувам скина, но явно някой преди това (WM_PAINT ?) ми изчиства фона (с MainForm.Color) и когато се променя размира на прозореца пак си ми премигва...
by Waz Gaa
[email protected]
Re: Проблем с компонентите
Е, ти щом чак до оптимизацията си стигнал :-))
Това дали си го мяркал? Не е много актуално, но пък е по темата :-\\
[линк]
Животът е гаден и после човек умира...
Това дали си го мяркал? Не е много актуално, но пък е по темата :-\\
[линк]
Животът е гаден и после човек умира...
Re: Проблем с компонентите
10x
Но тук пише, че WM_Erasebkgnd е най-първо. Това не значи ли, че като рисувам там това ще е най-отдолу. Защо като ресайзвам прозореца и виждам, че ми се изрисува MainForm.Color и след това каквото съм задал за WM_Erasebkgnd !?
by Waz Gaa
[email protected]
Но тук пише, че WM_Erasebkgnd е най-първо. Това не значи ли, че като рисувам там това ще е най-отдолу. Защо като ресайзвам прозореца и виждам, че ми се изрисува MainForm.Color и след това каквото съм задал за WM_Erasebkgnd !?
by Waz Gaa
[email protected]
Re: Проблем с компонентите
Па знам ли? BTW, защо не ползваш OnPaint? Тва се вика точно преди да се изрисуват контролите (т.е., след всички системни мазаници по BKGND)?
Това предложение за жалост не се базира на скорошен опит, просто идея :-\
Предполагам, че вече си опитал кво ли не...
Животът е гаден и после човек умира...
Това предложение за жалост не се базира на скорошен опит, просто идея :-\
Предполагам, че вече си опитал кво ли не...
Животът е гаден и после човек умира...
Re: Проблем с компонентите
Resultata e oshte po-zle. Az se chudq zashto kato obrabotvam W_ERASEBKGND, koeto uj trqbva da e purvo, moqt prozorec predvaritelno si erase-va (slaga si MainForm.Color) i moite risunchici premigvat. Spored men, ako go nqma iztrivane i posle pak risuvane na bitmap-ite shte vurvi po-mazno. No kude e skrito tova iztrivane neznam.
Rabotata e v tova, che si puskam WinAmp i gledam kak svi4ko tam si vurvi idealno, puk kolkoto i da cheta MSDN, ne namiram nishto za tova kak se pravi hubavo draskane po prozorcite.
by Waz Gaa
[email protected]
Rabotata e v tova, che si puskam WinAmp i gledam kak svi4ko tam si vurvi idealno, puk kolkoto i da cheta MSDN, ne namiram nishto za tova kak se pravi hubavo draskane po prozorcite.
by Waz Gaa
[email protected]
Re: Проблем с компонентите
Namerih dosta info v codeproject. Prochetoh dosta stranici, no qvno ima i nqkuv problm s Delphi. Nqkude mi chisti background-a ta se poluchava premigvaneto... Mai shte pisha v newsgroup
by Waz Gaa
[email protected]
by Waz Gaa
[email protected]
Re: Проблем с компонентите
VCL+GDIAPI=FAILURE ot mene da si go znaesh :))
Az se se nadqwam nekoj da fane da prenapishe toq VCL ot nulata ma nema da stane. Za prosti zadachi se krepi ma kato mu opresh apito w cheloto i zapochwa da se darji stranno :( Za twa sam se otkazal ot izgazici na tema wizualizaciq
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Az se se nadqwam nekoj da fane da prenapishe toq VCL ot nulata ma nema da stane. Za prosti zadachi se krepi ma kato mu opresh apito w cheloto i zapochwa da se darji stranno :( Za twa sam se otkazal ot izgazici na tema wizualizaciq
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Re: Проблем с компонентите
Shto we. Az si go nastroih gore dolu. Sega imam samo edin problem. V lqvo i dolu nali sq imam prozrachen panel (vijda se Form.Canvas). E kato se resizeva burzo prozoreca i dvata panela izostavat. Kato spresh te si nastigat i pak si ostava kartinkata za border. Problema e samo pri resize, malko izchezva border-a, no ne e strashno, az skoro kato poglednah kak miga Notepad (na XP-to) pri resize ta se uspokoih :-)
by Waz Gaa
[email protected]
by Waz Gaa
[email protected]
Re: Проблем с компонентите
Пробвай с тази функция. Може и да не ти помогне много, но експеримента няма да ти отнеме много време:
В началото на рисуването:
LockWindowUpdate(Canvas.Handle);
...и не забравяй накрая
LockWindowUpdate(0);
Успех!
В началото на рисуването:
LockWindowUpdate(Canvas.Handle);
...и не забравяй накрая
LockWindowUpdate(0);
Успех!
Re: Проблем с компонентите
10x za tova. Shte go razgledam...
BTW Az po prinicp si risuvam v MemoryBitmap i sled tova izkarvam zatova nqma osobeni problemi s blink
by Waz Gaa
[email protected]
BTW Az po prinicp si risuvam v MemoryBitmap i sled tova izkarvam zatova nqma osobeni problemi s blink
by Waz Gaa
[email protected]