Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izbegavanje blinkanja kontrola na refresh

[es] :: .NET :: Izbegavanje blinkanja kontrola na refresh

[ Pregleda: 2493 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dejan Stojanovic
Pozarevac

Član broj: 162780
Poruke: 18
212.200.27.*



Profil

icon Izbegavanje blinkanja kontrola na refresh31.03.2009. u 07:56 - pre 183 meseci
Kada dodajem kontrole na formu ili radim refresh, sadrzaj forme blinkne (misim da svi znaju na sta mislim).
Da li postoji nacin da se to izbegne ?

Koristio sam pre LockWindowUpdate api poziv i to je super radilo na framework-u 1.1, ali sad sa 3.0 ne dobijam nista (kad uradim LockWindowUpdate(0) da otkljucam update prozora, ceo prozor zajedno sa kontrolama blinkne).
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 08:58 - pre 183 meseci
Nema tu mnogo mudrosti, ako form repaint proces traje duze od jednog screen refresh ciklusa, imaces "blink" ;) i resenje univerzalno za to nemas jer to zavisi od mnogo faktora (OS, CPU, memorija, itd) Sa lockWindowsUpdate si ti samo suspendovao WM_PAINT da dodavanje novih kontrola ne bi izazivalo repaint, ali nisi niti mozes da ubrzas sam repaint cele forme koji ce se na kraju desiti.
Eventualno predji na Vistu, njen GDI renderuje u memory DC i koristi double-buffering sto bi u teoriji trebalo da resi tvoj problem.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 09:22 - pre 183 meseci
Ima jos jedna caka koju moze da proba :
Da u WndProc svoje forme prvo uradi capture WM_ERASEBKGND poruke i da joj prosledi null u msg parametru strukture MSG
sto ce spreciti prvo brisanje cele forme pa zatim u sledecem prolazu WM_PAINT poruke
da upotrebi win32 Api f-ju ValidateRect kojom ce osveziti samo deo forme koje ga interesuje
tj . na onaj deo na koji se dodaju nove kontrole.


Viva lollapalooza
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 09:38 - pre 183 meseci
^
Zabranjeno je koristiti C/C++ fazone ;) Salim se...


Miljane, (ovo pitam cisto informativno, jer ne znam kako je reseno u C#) zar ne postoji neki vec ugradjeni genericki mehanizam za Double Buffering u C#/.NET ?

Kod VCL-a postoji DoubleBuffered za sve TWinControl, sto uglavnom resava problem jer u pozadini dolazi do kreiranja "in memory" bitmape. Za ozbiljnije stvari, treba ipak rucno implementirati Double Buffer mehanizam.


Na brzinu sam pogledao na netu:
http://stackoverflow.com/quest...-buffer-net-controls-on-a-form
http://www.bobpowell.net/doublebuffer.htm

Interesuje me ovaj deo koda:
ControlStyles.AllPaintingInWmPaint
ControlStyles.UserPaint
ControlStyles.DoubleBuffer

Da libi to resilo problem... ili mozda da Dejan pokusa tih nekoliko ponudjenih varijanti pa da javi kakvi su rezultati.
 
Odgovor na temu

Dejan Stojanovic
Pozarevac

Član broj: 162780
Poruke: 18
212.200.27.*



Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 09:45 - pre 183 meseci
hm, mislim da onaj deo sa windows message pozivom nece da prodje, ali da ne pricam napamet, probacu pa cu javiti da li nesto resava ovaj problem
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 09:55 - pre 183 meseci
Odlican find, iskreno nisam ni znao da ovo moze.

Mada bi ja i dalje batalio manuelni double buffering za forme i ostavio posao GDI-u (tj presao na vistu ako bas ne podnosi taj treptaj). Bas o tome pisu na drugom linku koji si poslao a tice se terminal services. GDI instrukcije se salju TS-om onako kako se renderuju, sto ce reci ako koristis double-buffer onda svaki paint salje formu kao screenDC bitmapu (bitblt over tcp/ip) sto je uvek vece nego skup GDI instrukcija i cini aplikaciju neupotrebljivom na TS-u. Al opet, to je moje licno vidjenje stvari, nikad nisam dozivljavao winforms kao canvas za animacije niti mu brojao FPS.



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 10:01 - pre 183 meseci
http://msdn.microsoft.com/en-u...ms.control.doublebuffered.aspx
Ovo nisam primetio dosad
Izgleda da je dovoljno samo da se setuje DoubleBuffered property u inherited formi.
Kad budem imao vremena probacu da li stvarno radi posao.

Citat:
X Files: ^
Zabranjeno je koristiti C/C++ fazone Salim se...

Obecavam da se nece ponoviti na .NET forumu

Evo nadjoh link na codeproject-u koji radi ovo sto sam opisao (doduse sa ListView kontrolom),
pa pogledajte u komentarima dole jedan se javio i rekao je da mu radi sa DoubleBuffer propertyijem.
http://www.codeproject.com/KB/...;view=Quick&select=1502455

Viva lollapalooza
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
93.87.4.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 10:17 - pre 183 meseci
^
Slažem se sa oba prethodna posta.

U par navrata u prošlosti sam morao da se pozabavim DoubleBuffering-om, jer je interfejs izgledao nepodnošljivo očajno (radilo se o nekakvom crtanju preko bitmape u pozadini + štošta još). Jednom mi je već ugrađeni mehanizam pomogao, a jednom nije.

Verovatno su ugradjeni DoubleBuffering mehanizmi tu tek da završe posao za opšte slučajeve, a za ozbilnije stvari treba implementirati konkretnu logiku ili koristiti propisnu GDI tehnologiju.
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 11:32 - pre 183 meseci
Pre osvežavanja forme lepo je zaključaš,odradiš šta treba i otključaš formu. Nema neprijatnog treptanja i ostalih neprijatnih vizuelnih efekata.



[Ovu poruku je menjao mkaras dana 01.04.2009. u 02:33 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 11:46 - pre 183 meseci
To je vec uradio (LockWindowUpdate). Problem je sto njegov ceo form redraw ciklus traje duze od refresh rate-a.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 12:09 - pre 183 meseci
Treba koristiti ono što je već ugrađeno u samu formu a to je form.locked svojstvo. Ništa više i sve lepo radi.

[Ovu poruku je menjao mkaras dana 01.04.2009. u 02:32 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 12:26 - pre 183 meseci
Mislim da si promasio forum i temu, .NET forms nemaju locked property, to je Office (Access/Excel/Word) property.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Izbegavanje blinkanja kontrola na refresh31.03.2009. u 13:26 - pre 183 meseci
a) Locked nije Form property, iako ti lici da jeste, to je property koji je extendovan u form-u od strane VS dizajnera i ne postoji van VS-a u runtime-u i forma ga uopste ne koristi ni za sta (vidi b). Metadata info za Forms klasu imas ovde gde mozes i videti da nema locked property-a.

b) Taj property uopste nema veze sa suspendovanjem redraw-a niti sa bilo kojim internim procesima u formi. Taj property jednostavno kazuje VS dizajneru da su pozicije i velicine forme i kontrola "fiksirane" dok je property true. Prebaci na true pa probaj da resizujes formu pa ces videti o cemu se radi.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dejan Stojanovic
Pozarevac

Član broj: 162780
Poruke: 18
212.200.27.*



Profil

icon Re: Izbegavanje blinkanja kontrola na refresh01.04.2009. u 08:00 - pre 183 meseci
Probao sam native dubble buffering i za pojedine stvari radi kako treba ali za neke i dalje svicka.

Recimo kontrole koje sam napomenuo koje imaju gradient na sebi, kada menjam background, border i uradim refresh, ne javlja se svickanje, ali dodavanje samih kontrola i dalje ne izgleda mnogo dugacije.

Nisam imao mnogo vremena da ispitam sve primere koji su ovde postovani, neke koje sam isprobao nisu mi zavrsavali posao.

Isprobacu jos pa cu dati konacan odgovor kako ovaj problem za koji mislim da mnoge muci koji rade na interfejsu windows aplikacija.

U svakom slucaju hvala na upucivanju sta treba da trazim za resenje ;)
 
Odgovor na temu

[es] :: .NET :: Izbegavanje blinkanja kontrola na refresh

[ Pregleda: 2493 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.