[ toxi_programer @ 21.04.2009. 23:32 ] @
Pozdrav gospodo,


Videli ste svi na TV stanicama dok je neka emisija u toku a ispod, na dnu ekrana, prikazuju se vesti tako što se iste skroluju sa desna na levo.
Imam formu širine na primer 800px. Imam string od 1500 znakova, lupam. Želim da se taj tekst skroluje po širini forme, poput gornjeg primera. Najlakše bi bilo staviti tekst u label i label pomerati na levo pa ga, kad dođe do kraja, vratiti na desnu stranu. Međutim, želeo bih da kada zadnja vest prolazi po ekranu, prva kreće odmah za njom.

Da li imate neki predlog kako ovo na lep način rešiti?

Zahvaljujem na pažnjici
[ Igor Gajic @ 21.04.2009. 23:37 ] @
Pogledaj ovo:

http://www.java2s.com/Code/CSh...dows-Form/MarqueeLabelHost.htm
[ deerbeer @ 22.04.2009. 08:48 ] @
@toxi_programer
Sve zavisi od kvaliteta skrolujuceg texta koji zahtevas.
Ako ces glatko skrolovanje texta bez treperenja i skakutanja slova onda bolje koristi managed DirectX.
[ X Files @ 22.04.2009. 09:06 ] @
Eh davno to bese, na Amiga racunarima, kada sam se zanimao za skrolove. Uvek je za glatak i brz skrol bilo potrebno koristiti posebne tehnike i biblioteke.

Od standardnih Windows nacina, najbolje sto sam uspeo da pronadjem je kada se neki Windows objekat (slika, tekst, ...) smesti unutar ScrollBox-a i ne skroluje sadrzaj nego taj scroll box (horizontalni/vertikalni bar) i to sa ScrollBox::ScrollBy() pozivom.

Sto se tice vezivanja pocetka s krajem, to mozes ostvariti trikom, posto ti je poznata sirina prozora.

Dakle:
1. dodas odredjeni deo pocetka na kraj teksta
2. cekas odredjeni polozaj skrola kada naglo inkrementiras x poziciju.





[ deerbeer @ 22.04.2009. 09:17 ] @
Citat:
X Files: Eh davno to bese, na Amiga racunarima, kada sam se zanimao za skrolove. Uvek je za glatak i brz skrol bilo potrebno koristiti posebne tehnike i biblioteke.

U pravu si 100% . Amiga rulezzz!!! Secam se toga , pa se danas jos vise nerviram da posle svih napucanih CPU-a i GPU-a
nisu u stanju da naprave to da radi bez problema a tolike silne 3D igre sa efektima texturama itd ...
Ovo sa DirectX-om sam ja probao (doduse u c++) http://www.elitesecurity.org/t...-IDDXFont-DrawText-memory-leak
i to na kraju i dalje ne radi bas najbolje zbog curenja memorije.
Probao sam i open-source FTGL bibliotekui sa openGL-om ali su performanse
skrolujuceg texta dosta losije od directx-a.


[ X Files @ 22.04.2009. 10:18 ] @
Da slazem se :) Neobicno je da je pomeranje teksta za jedno mesto (ili piksel, ako je to moglo) ulevo standardnim nacinima u nekoj petlji, podjednako brzo radilo i na masini sa 1MHz (ORAO 102), i na masini sa nesto vise od 7MHz (Amiga), i sada sa masinama koje frekvenziju procesora mere u GHz.

Prosto, OS-ovi su postali isuvise slozeni i zahtevni, pa je parce vremena koje se dodeljuje za neki pojedinacni posao (npr, repozicioniranje objekta) isuvise kratko. Zato ce se za efikasno manipulisanje grafikom jos dugo koristiti posebne biblioteke i tehnike.

Amiga je doduse imala poseban cip za grafiku koji je omogucavao autonomiju po tom pitanju.

[ toxi_programer @ 22.04.2009. 10:36 ] @
Prvo da se zahvalim svima na odgovorima.

Mene je najviše zainteresovalo gotovo rešenje koje je linkovao @deerbeer. To je link ka primeru kako koristiti izvesnu MarqueeLabel kontrolu, međutim nema ponuđeno preuzimanje te kontrole.
Tražio sam na internetu ali na svakom download sajtu javlja da nema ispravnog linka za download. Ni na sajtu autora nisam mogao da nađem.

Da li neko može pomoći u nalaženju te "MarqueeLabel" kontrole?
[ deerbeer @ 22.04.2009. 11:19 ] @
@toxi_programer
Pa imas gotov kod sa ovog linka sto je okacio @Igor Gajic.
Samo kreiraj jednu User Controlu u vs-u i copy/paste koda
U principu nemas tu neke velike muke od programiranja .
Sve sto ti treba je jedan Timer i funkcije DrawString i MeasureString ...
inkrementujes poziciju za recimo 1 px u jednom timer intervalu.
Tada ces imati glatko kretanje skrol texta, a timer interval ti sluzi za njegovu brzinu ...
Na kraju ispitujes poziciju texta sa njegovom duzinom da bi vracao text na pocetak
...ako je manja od Form.Left pozicioniras text na Form.Right.
Eventualno ti za ovo treba jedan odvojeni background thread da ne bi blokirao glavni ...


Ovde imas dosta linkova na tu temu :
http://www.dottostring.com/tag...-ticker-message-labels-smooth/
http://www.codeproject.com/KB/edit/dougscrollingtextctrl.aspx
http://www.codeproject.com/KB/miscctrl/csmarquee.aspx