Español
Foro

Gridbox - Ratón- y Tastenwahl

 

Thomas
Freier
Im Moment seh Yo, el Wald antes lauter Bäumen no y una solución, si con ratón una Item para Mostrar gewählt wurde, anschließend de dieser Pos. con el Pfeiltaste más a ir. Lieg's al Subproc?
Mini-Ejemplo:
' {$ Cleq}
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
Declarar texto$,Font&,Navi&
Declarar hGrid&
Declarar x&,x%
DEF $DRAGLISTMSGSTRING "commctrl_DragListMsg"
DEF &DL_BEGINDRAG 1157
DEF &DL_DRAGGING 1158
DEF &DL_DROPPED 1159
DEF &DL_MOVECURSOR 3
DEF &DL_COPYCURSOR 2
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Struct LVHitTestInfo = X&,Y&,flags&,Item&,SubItem&
Declarar LVHTI#,l%,L.SubItem$,T_Tip&
Dim LVHTI#,LVHitTestInfo

Proc LV_HitTest

    Parámetros  LV&,X%,Y%
    ~GetCursorPos(LVHTI#)
    ~ScreenToClient(LV&,LVHTI#)
    SendMessage(LV&,~LVM_SUBITEMHITTEST,0,LVHTI#)
    Volver LVHTI#.SubItem&

ENDPROC

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

proc LvDeSelect'deselectieren

    parámetros Lv&,Item&
    Declarar s#
    dim s#,1024
    long s#,12=0
    long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
    sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
    disponer s#

ENDPROC

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

proc LvSelect'selectieren

    parámetros Lv&,Item&
    Declarar s#
    dim s#,1024
    long s#,12=$2
    long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
    sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
    sendmessage(lv&,~LVM_SETHOTITEM ,item&,0)
    sendmessage(lv&,~LVM_ENSUREVISIBLE ,Item&,0)
    disponer s#

ENDPROC

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Struct POINT = X&,Y&
Struct DRAGLISTINFO = uNotification&,hWnd&,ptCursor!POINT
Var FirstItem& = 0
Var LastItem& = 0
Var MoveString$ = ""
Var MoveCursor& = ~LoadCursor(~GetModuleHandle("shell32.dll"),1003)
'Exactamente esta spezielle Meldung muss registiert voluntad
'así el Ventana el Drag&Drop Operationen verarbeiten kann.
Var DragMSG& = ~RegisterWindowMessage("commctrl_DragListMsg")
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET("TRUECOLOR",1)
CLS RGB(255,255,255)
Font&=Crear("Font","MS Sans Serif",16,0,0,0,0)
SETDIALOGFONT Font&
Windowstyle 538
Navi&=Crear("Window",%hwnd,"",(%maxx-160),2,154,670)
Text$ = "Blätter;0;140"
hGrid&   = Crear("GridBox", Navi&, texto$, 0, 8, 8, 130, 356)
'El Listbox para Drag&Drop vobereiten
Externo("comctl32.dll","MakeDragList",hGrid&)
clearlist
AddStrings "Item 1"
AddStrings "Item 2"
AddStrings "Item 3"
AddStrings "Item 4"
AddStrings "Item 5"
AddStrings "Item 6"
AddStrings "Item 7"
AddStrings "Item 8"
MoveListToHandle(hGrid&)
Seleccione String(hGrid&,-1,GetString$(hGrid&,0))
LVSelect hGrid&,0
SEITE_ZEIGEN 0
@Conjunto("FastMode", 1)
setfocus(Navi&)
SubClass navi&,1
AddHotKey 2020, 37, 0
AddHotKey 2022, 39, 0
AddHotKey 2021, 38, 0
AddHotKey 2023, 40, 0

mientras que 1

    WaitInput 1
    Case %key=2:BREAK

    If (%menuitem=2020) O (%menuitem=2021)'linke Pfeiltaste

        If GetCount(hGrid&)>0

            x%=GetCurSel(hGrid&)
            dec x%
            caso x%<0: x%=(GetCount(hGrid&)-1)
            Seleccione String(hGrid&,-1,GetString$(hGrid&,x%))
            x%=GetCurSel(hGrid&)
            SEITE_ZEIGEN x%

        endIf'

        setfocus(navi&)

    ElseIf (%menuitem=2022) O (%menuitem=2023)'rechte Pfeiltaste

        If GetCount(hGrid&)>0

            x%=GetCurSel(hGrid&)
            inc x%
            Seleccione String(hGrid&,-1,GetString$(hGrid&,x%))
            x%=GetCurSel(hGrid&)
            SEITE_ZEIGEN x%

        Endif

        setfocus(navi&)

    EndIf

EndWhile

SubClass navi&,0
@Conjunto("FastMode", 0)
destroywindow(navi&)
DeleteObject Font&
destroywindow(%hwnd)
End

Proc SEITE_ZEIGEN

    Parámetros x%
    var x1%= val(right$(GetString$(hGrid&,x%),1))
    caso x1%=1: MCLS 600, 800 ,RGB(255,255,100)
    caso x1%=2: MCLS 600, 800 ,RGB(255,255,0)
    caso x1%=3: MCLS 600, 800 ,RGB(255,0,100)
    caso x1%=4: MCLS 600, 800 ,RGB(255,0,255)
    caso x1%=5: MCLS 600, 800 ,RGB(255,100,100)
    caso x1%=6: MCLS 600, 800 ,RGB(100,255,0)
    caso x1%=7: MCLS 600, 800 ,RGB(0,255,100)
    caso x1%=8: MCLS 600, 800 ,RGB(255,0,0)
    MCopyBmp 0,0 - 800,600 > 0,0;0

ENDPROC

SubClassProc

    If SubClassMessage(navi&,DragMSG&)

        var Info# = New(DRAGLISTINFO)
        l% =  LV_HitTest(hgrid&,%mousex,%mousey)
        L.SubItem$=GetText $(hGrid&,LVHTI#.Item&,LVHTI#.SubItem&)
        Info# = &slParam

        If Info#.uNotification& = &DL_BEGINDRAG'Drag&Drop beginnt y Item merken

            FirstItem& = LVHTI#.Item&
            MoveString$ = GetText $(hGrid&,LVHTI#.Item&,LVHTI#.SubItem&)'Item-Texto merken
            T_Tip&=Crear("Tooltip",%hwnd,hGrid&,MoveString$)
            Conjunto("WinProc", 0)
            ~SetCursor(MoveCursor&)
            Volver &DL_COPYCURSOR

        ElseIf Info#.uNotification& = &DL_DRAGGING'Drag&Drop es en el Gange

            LastItem& = LVHTI#.Item&
            LvSelect  hGrid&,LastItem&
            Conjunto("WinProc", 0)
            'Item marca
            SendMessage(hGrid&,~Lb_SETCURSEL,LastItem&,0)
            ~SetCursor(MoveCursor&)

        ElseIf Info#.uNotification& = &DL_DROPPED'Drag&Drop es final

            LastItem& = LVHTI#.Item&

            If Lastitem& <> -1

                IF Lastitem& <> Firstitem&

                    'el erste gemerkte Item löschen
                    DeleteString(hGrid&,FirstItem&)
                    'y a el Position des letzten gemerkten Items einfügen
                    InsertString(hGrid&,LastItem&,MoveString$)
                    Conjunto("WinProc", 0)
                    LvSelect  hGrid&,LastItem&

                EndIf

                DestroyWindow(T_Tip&)
                SEITE_ZEIGEN LastItem&

            EndIf

        EndIf

    EndIf

ENDPROC

 
Gruß Thomas
Windows XP SP2, XProfan X2
07.12.2010  
 



En me funktioniert el Programa "überhauptnicht" (XProfan11 32Bit XP SP2) -

Yo bekomme auch en el Kompilat garkeine GridBox a Anzeige pero sólo una gelbes hWnd y por Interpreter erhalte Yo inmediatamente choque.

Choque en el Interpreter en

Übergibst a el API una Def-Konstante - es mi humilde opinión no necesariamente en el Sinne des Erfinders - esperado se una Speicheradresse y ne DEF-Konstante podría como doch a komplex ser - mejor el Adresse uno einfachen Cuerdas o. Speichers transferencia.
 
07.12.2010  
 



Wenn Yo
Var DragMSG& = ~RegisterWindowMessage("commctrl_DragListMsg")
escribir funktionierts y yo kann en Interpreter y Kompilat con Ratón y Tastatur wählen - sólo simplemente el Adresse uno Cuerdas transferencia
 
07.12.2010  
 




Thomas
Freier
OK. War Andreas Code, el con XP12 kein Problema bereitete.
Aber Yo búsqueda todavía, si con ratón z.B.: Item5 markiert wurde y yo anschließend el Pfeil-Taste runter benutze auch Item6 markiert y adecuado se. Meist es el Sprung a el Anfang. Ist me auch ya en otro Software aufgefallen, dass si algo con ratón en el Tabla gewählt se beim Drücken el Taste Bild runter, una Sprung a Línea 1 es.
 
Gruß Thomas
Windows XP SP2, XProfan X2
07.12.2010  
 



Habs no getestet aber teste doch veces obs hilft si después de el D&D z.B. con Seleccione String entsprechende Línea markierst oder gar veces una otro y otra vez zurück.
 
07.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

Tiempo 'ne bastante dumme Cuestión: Lassen el DragListBox-Messages überhaupt en ListViews (GridBoxen) anwenden? Laut MSDN son el doch para normale Listboxen vorgesehen?
Eigendlich debería uno doch por SubClassing el LVN_BEGINDRAG-Message des ListViews auswerten?

SeeYou
Pascal
 
08.12.2010  
 




Thomas
Freier
He Pascal,
el Antwort muß Yo dir schuldig bleiben, como Yo bisher sólo Franks ListView.dll gearbeitet habe y diesem Fall lo sin hacer quería. Ein Ejemplo de Andreas führte para deseado Ergebnis. Nur bekomme Yo ahora Problemas en "Tastensteuerung".
Aber du bist sí LV Spezi y siehst tal vez una solución.
 
Gruß Thomas
Windows XP SP2, XProfan X2
08.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

Standartmäßig puede ser sí en cada Art de Liste con el Tastatur navigieren, si el betreffende Control el enfoque ha.
Darum wäre el einfachste Solución, relevante Tastendrücke en el Ventana principal  per SetFocus(Liste&) & SendKey(Liste&,Key%) a el Liste weiterzuleiten.
Aunque erkennt XProfan esta möglicherweise no, el el Auswahl geändert wurde, si la Liste primero el enfoque ha y behält (WaitInput no es durchbrochen).
Also entweder después de SendKey el Focus otra vez auf's Ventana principal legen oder algo como versuchen (hab's con deinem Code todavía no getestet):
settimer 100

mientras que 1'--------------Beginn Eingabeschleife

    waitinput
    Neu%=getcursel(Liste&)

    if Neu%<>Alt%

        Alt%=Neu%
        '---Irgendeine Reacción en geänderte Auswahl

    endif

    '---Weitere Abfragen para Bedienungselemente usw.

endif'----------------Ende Eingabeschleife


Eleganter wäre allerdings una entsprechende Ereignis-Auswertung por SubClassing.
Yo werd' como algo preparar

HTH
Pascal
 
09.12.2010  
 




Thomas
Freier
Bin ya gespannt.
Einiges Tuve natürlich ya intenta, esta "Schönheitsfehler" a beheben. Möglich auch, que un vorhandenes EDIT en media Lösungen ausbremsend war. Tuve lo en el Ejemplo weg gelassen, y kann lo a Not en una eigenen Diálogo packen.
 
Gruß Thomas
Windows XP SP2, XProfan X2
09.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

Posesiones veces unos pocos Beispiele para Drag&Drop ( aktuelles XProfan 12 ) zusammengestellt.

Descargar
externer Descargar


El Umleitung el Tasten de Hwnd en el jeweilige Liste es esta siempre después de el gleichen oben erwähnten Principio por SubClassing, ebenso el Auswertung el neuen Auswahl. Unterschiedlich son eigendlich sólo el optischen Effekte. Tal vez hilft lo dir más.
PS: Posesiones me erlaubt, el Trick con el ToolTip a klauen

SeeYou
Pascal

8 kB
Versión:1
Kurzbeschreibung: Drag&Drop-Demos XProfan 12
Hochgeladen:14.12.2010
Ladeanzahl218
Descargar
 
14.12.2010  
 




Thomas
Freier
He Pascal,
feine Sache, el du zusammengestellt hast.
Aufgefallen me está, dass en Anwahl kleine Reaktionspausen entstehen.
Nun bin Yo todavía unsicher, Yo más verfahre.

Ein kleines Ejemplo beigepackt. Nur, si auch todavía con un pequeño Fehler, el Ansicht-Zeitung-1m.exe ha Endstand. Nach el Start Por favor, sólo una vez el Pfade a PNG- y ODT-Archivos invertir. Wer ha, kann entonces para Testen/Editar, una OpenOffice.exe verknüpfen y el Expediente entonces auch como PDF speichern (Pfad entonces einrichten). El a Anzeige benötigten PNG-Archivos puede encima IrfanView, si él PDFs abierto kann, oder una PDF-Reader (z.B.: Portable PDFXCview.exe) erstellt voluntad. Das Ganze mag umständlich klingen, aber desafortunadamente gelang lo me todavía no una beliebige halbe PDF-Página anzuzeigen.

3.838 kB
Hochgeladen:15.12.2010
Ladeanzahl323
Descargar
 
Gruß Thomas
Windows XP SP2, XProfan X2
15.12.2010  
 




Dieter
Zornow
Also con el Setcurselversion Yo bajo Win7 siempre choque. Der Drop-Cursor erscheint entonces kann Yo clic oder qué De todos modos, lo passiert nichts mehr. Kann entonces sólo todavía con el Taskmanager final. Pero ya así con el Originalcode de Pascal.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
15.12.2010  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

17.792 Views

Untitledvor 0 min.
H.Brill26.01.2022
Sven Bader11.07.2021
Ralf Netz22.05.2021
ByteAttack02.12.2018
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie