| |
|
|
Thomas Freier | Ich wollte gerne eine zweite Gridbox mit der Ersten scrollen. Horizontal ist OK. Vertikal bekomme ich einfach nicht hin und habe hier auch keine Hinweise (außer MultiEdit usw.) gefunden. Kennt einer eine Lösung? KompilierenMarkierenSeparieren $H WINDOWS.PH
$H MESSAGES.PH
$H COMMCTRL.PH
Declare Titel$,hGrid&,hGrid1&
Proc GridBox1
Titel$ = "Links;0;180;Mitte;0;100;Rechts;0;80"
hGrid& = Create("GridBox", %hWnd, Titel$, 1, 30, 30, 200, 190)
AddString(hGrid&, "AB|DEF|0123")
AddString(hGrid&, "GHI|J23KL|012345")
AddString(hGrid&, "FGRT|MNOP|PQR|")
AddString(hGrid&, "STU||V")
AddString(hGrid&, "ABCD12|STUVW|XYZ0")
AddString(hGrid&, "ABCD34|stuvw|999,00")
AddString(hGrid&, "Abcd45|STUVW|-111,11")
AddString(hGrid&, "Abcd56|StUVW|2.111,11")
AddString(hGrid&, "Abcd56|AbxVW|-15.234,56")
AddString(hGrid&, "Abcd67|STUVW|0,00")
EndProc
Proc GridBox2
Titel$ = "Links;0;180;Mitte;0;100;Rechts;0;80"
hGrid1& = Create("GridBox", %hWnd, Titel$, 1, 330, 30, 200, 190)
AddString(hGrid1&, "AB|DEF|0123")
AddString(hGrid1&, "GHI|J23KL|012345")
AddString(hGrid1&, "FGRT|MNOP|PQR|")
AddString(hGrid1&, "STU||V")
AddString(hGrid1&, "ABCD12|STUVW|XYZ0")
AddString(hGrid1&, "ABCD34|stuvw|999,00")
AddString(hGrid1&, "Abcd45|STUVW|-111,11")
AddString(hGrid1&, "Abcd56|StUVW|2.111,11")
AddString(hGrid1&, "Abcd56|AbxVW|-15.234,56")
AddString(hGrid1&, "Abcd67|STUVW|0,00")
EndProc
~SetScrollRange(hGrid&,0,0,1000,1)
~SetScrollRange(hGrid&,0,0,1000,0)
declare scroll&,ascroll&
declare scroll1&,ascroll1&
SubClassProc
If SubClassMessage(hGrid&, ~WM_HSCROLL)
locate 0,0
print str$(~GetScrollPos(hGrid&,0))+" "
ascroll& = scroll&
scroll& = ~GetScrollPos(hGrid&,0)
~SetScrollPos(hGrid1&,0,scroll&,1)
sendmessage(hGrid1&,~LVM_SCROLL,scroll&-ascroll&,0)
~UpdateWindow(hGrid1&)
Set("WinProc",1)
ElseIf SubClassMessage(hGrid&, ~WM_VSCROLL)
locate 0,30
print str$(~GetScrollPos(hGrid&,1))+" "
ascroll1& = scroll1&
scroll1& = ~GetScrollPos(hGrid&,1)
~SetScrollPos(hGrid1&,1,scroll1&,1)
sendmessage(hGrid1&,~LVM_SCROLL,(scroll1&-ascroll1&),0)
~UpdateWindow(hGrid1&)
Set("WinProc",1)
EndIf
endproc
SetTrueColor 1
WindowStyle 538
WindowTitle "Scroll nur linke Gridbox"
Window 100,100-600,400
Cls ~GetSysColor(15)
UseFont "MS Sans Serif",13,0,0,0,0
SetDialogFont 1
GridBox1
GridBox2
Set("SubClassMode",1)
SubClass hGrid&,1
While 1
WaitInput
case %key=2: Break
Wend
SubClass hGrid&,0
|
|
|
| |
|
|
|
| Wenn ich Deinen Code starte, dann scrollt die rechte GridBox mit der Linken mit.
Was genau soll denn passieren? |
|
|
| |
|
|
|
Thomas Freier | Ja, so war das gedacht, dass der sichtbare Inhalt der rechten Box dem der Linken gleicht, wenn die Linke gescrollt wird. Z.Z. geht es aber nur horizontal. Habe mir auch nochmal Franks Listview vorgenommen, in der jetzt eine Funktion enthalten ist, die die erste angezeige Zeilen-Nr ermittelt. Werde es parallel darüber versuchen. |
|
|
| |
|
|
|
| Funktioniert bei Dir diese sehr analoge Lösung? KompilierenMarkierenSeparieren {$i}
$H WINDOWS.PH
$H MESSAGES.PH
$H COMMCTRL.PH
Declare Titel$,hGrid&,hGrid1&
Proc GridBox1
Titel$ = "Links;0;180;Mitte;0;100;Rechts;0;80"
hGrid& = Create("GridBox", %hWnd, Titel$, 1, 30, 30, 200, 190)
AddString(hGrid&, "AB|DEF|0123")
AddString(hGrid&, "GHI|J23KL|012345")
AddString(hGrid&, "FGRT|MNOP|PQR|")
AddString(hGrid&, "STU||V")
AddString(hGrid&, "ABCD12|STUVW|XYZ0")
AddString(hGrid&, "ABCD34|stuvw|999,00")
AddString(hGrid&, "Abcd45|STUVW|-111,11")
AddString(hGrid&, "Abcd56|StUVW|2.111,11")
EndProc
Proc GridBox2
Titel$ = "Links;0;180;Mitte;0;100;Rechts;0;80"
hGrid1& = Create("GridBox", %hWnd, Titel$, 1, 240, 30, 200, 190)
AddString(hgrid1&, "AB|DEF|0123")
AddString(hgrid1&, "GHI|J23KL|012345")
AddString(hgrid1&, "FGRT|MNOP|PQR|")
AddString(hgrid1&, "STU||V")
AddString(hgrid1&, "ABCD12|STUVW|XYZ0")
AddString(hgrid1&, "ABCD34|stuvw|999,00")
AddString(hgrid1&, "Abcd45|STUVW|-111,11")
AddString(hgrid1&, "Abcd56|StUVW|2.111,11")
EndProc
SubClassProc
if subClassMessage(hGrid&,~wm_paint)
sendMessage(hGrid1&,~lvm_scroll,~getScrollPos(hGrid&,0)-~getScrollPos(hGrid1&,0),(~getScrollPos(hGrid&,1)-~getScrollPos(hGrid1&,1))*hiword(sendMessage(hGrid1&,~lvm_getItemSpacing,1,0)))
endif
endproc
SetTrueColor 1
WindowStyle 538
WindowTitle "Scroll nur linke Gridbox"
Window 100,100-600,400
Cls ~GetSysColor(15)
UseFont "MS Sans Serif",13,0,0,0,0
SetDialogFont 1
GridBox1
GridBox2
SubClass hGrid&,1
While 1
WaitInput
case %key=2: Break
Wend
SubClass hGrid&,0
|
|
|
| |
|
|
|
Thomas Freier | JA!! Danke für die elegante Lösung, da allgemein gültig. Uff! Für mich muß ich nun versuchen aus dem Einzeiler für H&V den H- und V-Teil zu separieren, da die beiden Listen horizontal jede für sich und nur vertikal gemeinsam gescrollt werden sollen. |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Thomas Freier | Ein kleines Beispiel für XProfan 11.2 mit den "Scrollaktionen". Mit dem Scrollen des Bildes (Monate) überm Listview bin ich noch nicht zufrieden. Der Druck ist z.Z. nicht optimiert. Wie immer : Nutzung auf eigenes Risiko. |
|
|
| |
|
|
|
| In der SubClassProc hast "mein" wm_paint ausgetauscht, deshalb aber reagiert das Aktualisieren immer erst (1 Frame/Message) zu spät. (es bleibt nur wm_paint) |
|
|
| |
|
|
|
Thomas Freier | Hab ja beides als Beispiel im Code gelassen. Jeder Klick in einem der beiden Listviews löst ein wm_paint aus. Das ist beim Editieren nervig. Leider scrollen beide Listen mit dem Mausrad jetzt nur, wenn keine Liste den Focus hat. |
|
|
| |
|
|