Italia
Foro

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

../function-references/xprofan/subclass/'>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 per die elegante Lösung, da allgemein gültig.
Uff! Für mich muß ich nun versuchen aus dem Einzeiler per H&V den H- und V-Teil zu separieren, da die beiden Listen horizontal jede per 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 per 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 per 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
Downloadcounter34
Download
 
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  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.779 Views

Untitledvor 0 min.
RudiB.11.04.2022
Langer11.01.2021
rquindt06.06.2016
Ernst21.05.2016
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Thomas Freier (5x)
iF (4x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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