Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Scroll dvoch gridov

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Scroll dvoch gridov

Autor: Gábina

19:47:15 28.09.2011

Nemám možnost to zkusit, ale vypadá to moc nadějně...
Nejsou zde uvedeny konstanty GWL_WNDPROC,SIF_ALL,SBS_HORZ...
ale asi je tam někde taky budou.
Proč se WM_HSCROLL= &H114(276) nevyvolá nevím, s TDBGrid
nemám vlastní zkušenost s něčím podobným.
Snad někdo ještě zkoukne a najde chybu, já žádnou nevidím. ;)
K vzteku, že to nejde...

Citovat příspěvek

 

Re: Scroll dvoch gridov

Autor: hybr1D

9:25:24 28.09.2011

Ďakujem. Tak som to skúsil ale akosi to stále nefičí. Tu je trocha kódu:

V inicializacii User Controlsu mám takéto niečo:

saveHWnd = myGrid.hWnd
FhWnd = Filtre.hWnd
OldWindowProc = SetWindowLong(myGrid.hWnd, GWL_WNDPROC, AddressOf NewWindowProc)

myGrid je deklarovany ako Private premenna typu TDBGrid v User Controlse a je napojená na Table1 vo forulari.
Filtre je komponenta na User Controlse typu TDBGrid

Public Type SCROLLINFO
cbSize As Integer
fMask As Integer
nMin As Integer
nMax As Integer
nPage As Integer
nPos As Integer
nTrackPos As Integer
End Type

NewWindowProc mám definovanú v module takto nejako:

Public Function NewWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim i As SCROLLINFO

If msg = 276 Then
i.cbSize = Len(i)
i.fMask = SIF_ALL
GetScrollInfo hWnd, SBS_HORZ, i
SetScrollInfo FhWnd, SBS_HORZ, i, True

End If

NewWindowProc = CallWindowProc(OldWindowProc, hWnd, msg, wParam, lParam)
End Function

Všetko ide fajn až na to, že funkcia GetScrollInfo vracia False a do i vyplni same 0 a funkcia SetScrollInfo tiež nenastavuje ten scrollbar aj keď dám tu pozíciu natvrdo.
Handlere som kontroloval a mali by byť správne. Taktiež sa vôbec pri horizontálnom scrollovani nevyvolá windows message 276, takže ak je to takto, tak sa k funkciam GetScroll a SetScroll vôbec ani nedostanem.

Citovat příspěvek

 

Re: Scroll dvoch gridov

Autor: Gábina

9:14:14 27.09.2011

Nemá-li DBGrid scroll event, pak nezbyde asi skrze
subclassing a WM_HSCROLL zachytávat ve WindowProc,
tam využiješ zmíněné GetScrollInfo a SetScrollInfo
pro synchronizaci scrollbarů, nastavíš tak posuvníky
na stejné hodnoty. Přeji mnoho zdaru a zábavy.

...
Příklad kódu zřejmě jen posune horizontální posuvník
nějakého prvku Filtre (žádné Table?) o kus vpravo,že ? ;)

Citovat příspěvek

 

Re: Scroll dvoch gridov

Autor: hybr1D

15:27:00 26.09.2011

:) na to som zabudol

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal winHandle As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const SB_LINELEFT = 0
Public Const SB_LINERIGHT = 1
Public Const WM_HSCROLL As Long = &H114

SendMessage Filtre.hWnd, WM_HSCROLL, SB_LINERIGHT, 0

Ďakujem za radu, idem skúsiť pohľadať čosi o tom SetScrollInfo.

Citovat příspěvek

 

Re: Scroll dvoch gridov

Autor: Gábina

14:44:26 26.09.2011

Pak budeš muset zachytávat WM_HSCROLL message, kde
pomocí GetScrollInfo získat hodnoty posuvníku první
table a pomocí SetScrollInfo poslat hodnoty do table
druhého. Něco podobného někde bylo pro listboxy nebo
listview, ale příklad bohužel nemám, zkus pohledat.

...
Myslím, že bez řádky kódu těžko bude někdo vědět,jak
posíláš zprávu, natož je-li handler správný. ;)
Leda senzibil či telepat... :)

Citovat příspěvek

 

Scroll dvoch gridov

Autor: hybr1D

13:18:41 26.09.2011

Dobrý deň.
Mám na formulári dva True DBGridy (Table1 a Table2). Ak scrollujem horizontálne na Table1 tak by sa mi mal rovnako scrollovať aj Table2. Doteraz som som to robil cez Table2.LeftColumn = Table1.LeftColumn a šlo to super. Teraz som však uzamkol prvé ľavé stĺpce, takže sa to nedá použiť. Skúšal som poslať WM_HScroll windows správu do Table2 ale neviem, či som zadal správny Handler (Table2.hWnd).
Prosím vedel by niekto poradiť?

Ďakujem a prajem príjemný deň.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: