Deutsch
Forum

Erledigt: Zweite Gridbox scrollen

 

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
 
Gruß Thomas
Windows XP SP2, XProfan X2
16.08.2009  
 



Wenn ich Deinen Code starte, dann scrollt die rechte GridBox mit der Linken mit.

Was genau soll denn passieren?
 
16.08.2009  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
16.08.2009  
 



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
 
16.08.2009  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
17.08.2009  
 



Einfach den 3. Param von SendMessage auf 0 setzen, wParam bei lvm_scroll ist für die X-Achse da:
KompilierenMarkierenSeparieren
sendMessage(hGrid1&,~lvm_scroll,0,(~getScrollPos(hGrid&,1)-~getScrollPos(hGrid1&,1))*hiword(sendMessage(hGrid1&,~lvm_getItemSpacing,1,0)))
 
17.08.2009  
 




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.

543 kB
Hochgeladen:29.08.2009
Ladeanzahl34
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
29.08.2009  
 



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)
 
29.08.2009  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
30.08.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.824 Betrachtungen

Unbenanntvor 0 min.
RudiB.11.04.2022
Langer11.01.2021
rquindt06.06.2016
Ernst21.05.2016
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Thomas Freier (5x)
iF (4x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie