[ connundrum @ 04.06.2008. 05:57 ] @
Dobro jutro
Poceo sam pisati program tacnije test... koji se sadrzi od pitanja koji je napisan u label-u i option buttona koji daju tacan / netacan odgovor za "zaorkuziti"

eh posto ja imam vise pitanja a treba sve stati na jednu formu pokusao sam koristiti VScrool bar posto je on i namjenjen za to, mislim nisam siguran...

Eh kak' cu napraviti da on stvarno scrool-a .. negdje bi se sadrzaj trebao unjeti ja mislim pa da on moze scroolat
Pregledao sam par skripti nisam nista nasaoo

Tako molim vas za malo pomoci
[ Aleksandar Ružičić @ 04.06.2008. 07:41 ] @
evo kako sam to ja radio:

1. stavis na formu jedan PictureBox (nazoves ga picContainer recimo) koji ce da ti zauzima celu povrsinu forme (iskljucis mu bordere)
2. u picContainer dodas jedan PictureBox (i nazoves ga recimo picHolder) koji ce da zauzima sirinu picContainer.ScaleWidth - vsScroll.Width
3. u picContainer dodas jedan VScrollBar (i nazoves ga recimo vsScroll)
4. u picHolder ubacis sve kontrole koje ti trebaju (visina picHoldera moze da bude veca od visine picContainer - u tom slucaju se onaj deo koji je veci od picContainer-a ne vidi
5. podesis vsScroll.Min = 0 i vsScroll.Max = picContainer.ScaleHeight - picHolder.Height
6. u vsScroll_onScroll i u vsScroll_onChange event handlerima pomeras picHolder u zavisnosti od vrednosti scroll bara: picHolder.Top = -vsScroll.Value
[ dava @ 04.06.2008. 08:04 ] @
Evo i moja ideja:

Koristio sam dva frame-a (jedan u drugom). Pored njih VScroll bar i u zavisnosti od njegove vrijednosti odnosno polozaja klizaca pomjera frame2 gore - dole u frame1.

Primjer je u prilogu.
[ Eurora3D Team @ 04.06.2008. 09:08 ] @
Ovo je ova Aleksandrova varijanta samo sa jednim PictueBox-om ... inace i ja tako radim...
PictureBox-ovi su dobri za ove graficke stvari zato sto mogu da drze druge kontrole na sebi ...
[ Aleksandar Ružičić @ 04.06.2008. 09:13 ] @
@dava: izbegavaj da koristis Frame kontrole jer ukoliko ubacis xp style manifest u tvoj exe (tj podrska za xp stilove) onda ce ti option buttoni i checkboxovi biti zacrnjeni (dobices po jedan crni pravougaonik za svaki checkbox/optionbutton), a ako ti bas trebaju frejmovi onda na svaki frejm stavis picturebox kome iskljucis bordere (tako da se ne vidi da je tu) i na picturebox slazes kontrole...
[ dava @ 04.06.2008. 09:47 ] @
Je li to neki bug ili oni promjene property back color. Ako je ovo drugo onda bi se moglo izkontrolisati da ne mijenjaju.

U svom primjeru sam predvidio da se Frame2 moze povecati koliko god treba, bez izmjene koda, tako da taj Frame2 se pomjera do donje ivice forme, a ne da ide do neba.

@Eurora3D Team probaj p1 podesiti da je 2x veci od forme i na nevidljivi dio staviti neku kontrolu. Zatim skrolovati, kod mene se ta kontrola ne vidi?
[ Eurora3D Team @ 04.06.2008. 10:12 ] @
Jeste ... napisao sam ga bukvalno za minut.
Nadji liniju i promenu sa
Code:

p1.Move 0, p1.Top, Me.Width - s1.Width - 100, p1.Height

Posto sam greskom ukucao Me.Height pa je PictureBox uvek bilo visine forme i donji deo se nije video
promenio sam zakaceni fajl

[Ovu poruku je menjao Eurora3D Team dana 04.06.2008. u 11:22 GMT+1]
[ Shadowed @ 04.06.2008. 10:22 ] @
Krcko, rekao bih da ovaj spoljni Picture box nije neophodan, osim ako hoce da locira skrolujuci sadrzaj u jedan deo forme (pretpostavljam da je to ovo sto je Eurora 3D uradio, nisam gledao).

Inace, bila vec tema o ovome :)
[ Eurora3D Team @ 04.06.2008. 10:30 ] @
Pa ovako kako sam ja napravio skrolovanje (sa jednim PictureBox-om) i ScrollBar-om je jednostavije al da smo stavili dva , jedan glavni i u njemu drugi (koji pretstavlja ovaj kod mene) i ScrollBar bilo bi nekako kompaktnije i manje bi imalo veze sa ostalom grafikom (npr scale units) al bi bilo i komplikovanije ...
[ dava @ 04.06.2008. 13:10 ] @
Citat:
Shadowed: Krcko, rekao bih da ovaj spoljni Picture box nije neophodan, osim ako hoce da locira skrolujuci sadrzaj u jedan deo forme (pretpostavljam da je to ovo sto je Eurora 3D uradio, nisam gledao).


Nije neophodan ali ljepse je kad se skroluje jedan dio forme. Recimo neko zaglavlje, naslov ili tako nesto da ostane uvijek na vrhu forme, a da se donji sadrzaj skroluje.

Upravu ste za Frame, evo stavio sam picture.

Nego @connundrum jesi li nasao rijesenje?
[ rgdrajko @ 04.06.2008. 13:42 ] @
Ne razumem zasto se mucite. Pa svi veoma dobro znate da se to veoma lako i elegantno moze resiti preko MDI Forme. Klizaci se sami automatski pojavljuju. Zar ne?
[ Aleksandar Ružičić @ 04.06.2008. 14:47 ] @
@rajko: MDI forma ima svojih nedostataka i ne treba je koristiti ako ti samo treba scrollbar na formi (MDI forma je za druge stvari...)

@shadowed: drugi picturebox (picContainer) je tu samo da bi kasnije bilo lakse "ograditi" taj deo koji se skroluje, jer iz licnog iskustva znam da se izgled forme tj raspored kontrola na njoj uvek menja :) (pa postoji mogucnost da se recimo iznad tog dela koji se skroluje - a koji je u ovom primeru cela forma - doda neki "header" picturebox koji ce da ima logo aplikacije i podatke o verziji i sl u sebi...)

@dava: to je bug sa frame kontrolama...
[ Shadowed @ 04.06.2008. 15:03 ] @
Dava, Krcko, upravo to i rekoh pod "osim ako..." :)
Rajko, verovatno zato sto ne bi dobio to sto mu treba :)
Naravno, postoji i ono resenje koje ne smem da pominjem, gde je ovo (za sucaj cele forme) podrzano po default-u :P
[ Aleksandar Ružičić @ 04.06.2008. 16:01 ] @
mislis na Delphi? :p
[ Eurora3D Team @ 04.06.2008. 20:30 ] @
Mozda je mislio na onaj jezik koji sve moze samo ne moze da radi bez nekog frameworka :)
[ Aleksandar Ružičić @ 04.06.2008. 21:37 ] @
kako li sam mogao na taj jezik da zaboravim? :)
[ fLuXx @ 05.06.2008. 02:39 ] @
Ljudi, a sta kazete na ovo? Moze li se ovo iskoristiti bez da se koristi "jezik kojim se ne govori"? Mozda malo subclassinga i znoja i da radi k'o delphi

Code:

Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Private Const SB_HORZ = 0
Private Const SB_VERT = 1
Private Const SB_BOTH = 3
Private Sub Form_Load()
    ShowScrollBar Me.hwnd, SB_BOTH, True
End Sub


Naravno, umesto me.hwnd, moze da se koristi hwnd bilo koje komponente koja ga ima. Samo jos nedostaje kod za kontrolisanje scroll barova, ali sigurno da nije preterano tesko.
[ dava @ 05.06.2008. 07:31 ] @
Ili ovako, ali to je opet skrolovanje citave forme.

Code:

Private Declare Function HideCaret Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowCaret Lib "user32" (ByVal hwnd As Long) As Long
'The HideCaret function hides the ugly blinking caret on the scroll bar
Private Sub Form_Load()
    VScroll1.Max = Picture1.Height - Form1.Height + 1000
    VScroll1.Min = 0
    VScroll1.SmallChange = 100
    VScroll1.LargeChange = 1000
End Sub
Private Sub Form_Unload(Cancel As Integer)
    ShowCaret VScroll1.hwnd
End Sub
Private Sub VScroll1_Change()
    Picture1.Top = -VScroll1.Value ' Change the frame's top
    HideCaret VScroll1.hwnd
End Sub
Private Sub VScroll1_GotFocus()
    HideCaret VScroll1.hwnd
End Sub
Private Sub VScroll1_LostFocus()
    HideCaret VScroll1.hwnd
End Sub
Private Sub VScroll1_Scroll()
    Picture1.Top = -VScroll1.Value ' Change the frame's top
    HideCaret VScroll1.hwnd
End Sub


Slicno kao kod jezika cije se ime ne spominje
[ Aleksandar Ružičić @ 05.06.2008. 08:20 ] @
nije mnogo komplikovano, ali ja nisam hteo da navedem tu alternativu (subclassiranje) jer relativno jednostavno moze da se uradi i pomocu vb-ovih kotrnola (mada je resenje sa subclassingom mnogo flexibilnije, tj mogu da se ubace i flat scrollbarovi, i da se hvata WM_MOUSEWHEEL poruka tj da scrollbar reaguje na tockic misa...)
[ dava @ 05.06.2008. 10:03 ] @
Htio sam to napraviti jos na pocetku ali me mrzilo, pa kad si vec spomenuo evo mozda nekom posluzi.

[ Eurora3D Team @ 05.06.2008. 14:12 ] @
Citat:
fLuXx: "jezik kojim se ne govori"

:) Dobra ti je kovanica ... kao ono "put kojim se redje ide"
A dobra je i ideja ... probao sam nesto da sastavim sa ShowScrollBar() & ScrollWindowEx() al nisam zavrsio.
Ovo sto je dava sastavio je najkompletnije resenje do sad za ovo pitanje ... iako vidim da je subklasiranje izvedeno samo da bi se dobile WM_MOUSEWHEEL messages a ovo ostalo ide regularno.
@dava opet Frame :) ...
[ dava @ 05.06.2008. 14:32 ] @
Ne, na picture box-u su kontrole, a taj picture box je na frame-u. Je li se i tada javlja onaj bug?

Nego, otjerasmo covjeka.
[ Eurora3D Team @ 05.06.2008. 15:13 ] @
Zezam se za Frame ... znam kako su postavljene. Koliko sam shvatio Aleksandar je napisao da je bug na Fremu javlja kad hoces da napravis program sa XP stilom, inace je ok ...
Kog coveka :)
Mislis na ovog sto je postavio temu ? Nismo ga oterali ... on je postavio pitanje a mi dajemo odgovore ... nisu svi 24/7 na netu kao mi :)
[ Aleksandar Ružičić @ 05.06.2008. 16:29 ] @
ako hoces da testiras kako tvoj program izgleda sa XP stilovima (a da iste ne ubacujes) i da ti VB IDE koristi XP stilove onda prekopiraj ovaj fajl sto sam okacio uz poruku u C:\Program Files\Microsoft Visual Studio\VB98 (tj u isti folder gde ti se nalazi VB6.EXE)...
[ Eurora3D Team @ 05.06.2008. 21:54 ] @
@Aleksandar Ružičić
A kako se ovi manifest fajlovi dodaju u VB-u da se napravi aplikacija sa XP stilom ? U VC++ se doda resurs tipa 24 sa ID-om 1 i treba da se pozove InitCommonControls()
[ goranvuc @ 05.06.2008. 22:05 ] @
Doda se u resurs fajl (tako kako si naveo) i ne treba vise nista (koliko ja znam).

Ispravka: Ako se na formu stavi CommonDialog kontrola nije potreban poziv InitCommonControls(), u suprotnom treba.
[ Aleksandar Ružičić @ 05.06.2008. 22:13 ] @
da, dodaje se resurs i mora da se pozove InitCommonControls ukoliko se ne koristi jedna od kontrola iz COMCTL32.DLL, mada mozes i da dodas IMEFAJLA.EXE.MANIFEST fajl u isti folder sa IMEFAJLA.EXE i dobices xp stilove (tu "foru" koristi ovaj manifest fajl da vb6 ide dobije xp stil)

a sto se tice resursa i vb6 - ima jedna caka :) elem, manifest fajl koji ce biti ubacen u resource (dakle ne resource nego rc) mora biti duzine (u karakterima/bajtovima) koja je deljiva sa 4 inace nista od xp stilova, weird zar ne? :)

edit:
@goran pretece me :)
[ Eurora3D Team @ 05.06.2008. 22:36 ] @
Uspeo sam sa ovim kad je manifest fajl u folderu.
Neda je weird nego su genijalci ovi iz MS-a ... da je deljiv sa 4 . Nisu valjda napravili da cita 4 po 4 bajta pa ako se ne uklapa nista :)
[ dava @ 06.06.2008. 08:36 ] @
Pa ovo nisam znao... kako dobra fora :)
[ dava @ 09.06.2008. 14:57 ] @
Informacije radi: probao sam na Visti ovo i radi. Cak se ne javlja onaj bug sa frame kontrolom.