Español
Foro

Gridbox - Ratón- y Tastenwahl

 
- Página 1 -



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  
 



 
- Página 1 -



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  
 



 
- Página 2 -



Uwe
''Pascal''
Niemeier
Hi Personas!

@Thomas:


Aufgefallen me está, dass en Anwahl kleine Reaktionspausen entstehen.


Asche en mein Haupt!
En Änderung el Auswahl se LVN_ITEMCHANGED drei (!) Tiempo empfangen y genauso oft el Auswertung aufgerufen.
Hier el korrigierte Versión el SubClassProc para el Lv-Demos:
subclassproc'--------------------------------------------subclassproc

    if subclassmessage(%hwnd,~WM_KEYDOWN)'-----Taste en Hwnd

        if (&swparam>32)*((&swparam<41))'-------Navi-relevante Tasten

            setfocus(Lv&)
            sendkey(Lv&,&swparam)'---------------weiterleiten a ListView

        endif

    elseif subclassmessage(Dlg&,~WM_NOTIFY)'---Ereignis en Diálogo   (&slparam => NMHDR-Struktur)

        if long(&slparam,0)=Lv&'----------------Ereignis en ListView (&slparam => NMLISTVIEW-Struktur)

            if long(&slparam,8)=~LVN_BEGINDRAG'--Drag & Drop con linker Botón del ratón erkannt

                LvDragDrop(long(&slparam,12))'---Drag & Drop einleiten

            elseif long(&slparam,8)=~LVN_ITEMCHANGED'--Wechsel el Markierung erkannt

                caso long(&slparam,20)=~LVIS_FOCUSED | ~LVIS_SELECTED:Auswertung(long(&slparam,12))'--Neue Auswahl

            endif

        endif

    endif

ENDPROC'-------------------------------------------------------------


Ähnlich verhält lo con el DragListBox-Versión. Como muß lo al Ende el SubClassProc heißen:
...

elseif subclassmessage(Dlg&,~WM_COMMAND)'----Auswahl geändert

caso hiword(&swparam)=~LBN_SELCHANGE:Auswertung

endif

ENDPROC'-------------------------------------------------------------


El TreeView-Demos son allerdings no betroffen.

BTW: Was me en deinem Programa aufgefallen es: Wenn I, con ratón en PicButtons gehe, verschwinden el Icons.
Der Grund dürfte ser, daß du el IconHandles inmediatamente después de Anlegen el Buttons freigibst. El debería aber obtener bleiben a para Schluß.
Tipp: Wenn du el IconHandles no como Variables a para Programmende mitschleppen willst, kannst du ellos en cualquier momento encima el ButtonHandle ermitteln:
Icon&=sendmessage(Button&,~BM_GETIMAGE,~IMAGE_ICON,0)

@Dieter:


Also con el Setcurselversion Yo bajo Win7 siempre choque.


Kann sí sólo en el Bucle mentira, en el en Suelte el botón del ratón gewartet se.
Tal vez kannst du el Fehler eingrenzen?
Das Grundgerüst es sí bastante simplemente:

Alles otro kannst du sí Stück para Stück auskommentieren
(Wird doch probablemente no SetCurSel incluso ser??)
BTW: Lo es se sí (veces otra vez) en Minimaldemos. Lo sería durchaus Sinn hacer, en dieser Bucle todavía otro Abbruchbedingungen einzubauen ( Rechte Botón del ratón runter, ESC gedrückt usw.)

@ All: Sobald el de Dieter beschriebene Fehler erkannt es, voluntad Yo el ZIP aktualisieren.

SeeYou
Pascal
 
15.12.2010  
 




Dieter
Zornow
Yo denke veces, dass el Message WM_LBUTTONUP nie ankommt. Yo habe me de tiempo el Messages Mostrar dejar 514 war nie esta.

Yo teste de paso con el Beta XProfan X2
 
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  
 




Thomas
Freier
@Dieter, kannst du el AZ-LvDragDrop SetCurSel.exe una vez bajo W7 testen si el Fehler así Fijo es.

PS.: EXE gelöscht, como geklärt.
 
Gruß Thomas
Windows XP SP2, XProfan X2
15.12.2010  
 




Dieter
Zornow
@Thomas: Mit el Exe gehts
 
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  
 




Thomas
Freier
In el Yo
caso %mensaje=~WM_LBUTTONUP:romper'--Botón del ratón wurde losgelassen

ersetzt por
Def Getasynckeystate(1) !"USER32","GetAsyncKeyState"'Botón del ratón gedrückt ?

y luego en el Bucle
Mientras que Getasynckeystate(1)'1

    ~SetCursor(Cursor&)
    getmessage
    '   caso %message=~WM_LBUTTONUP:romper'--Botón del ratón wurde losgelassen
    ~GetCursorPos(HIT#)
 
Gruß Thomas
Windows XP SP2, XProfan X2
15.12.2010  
 



Statt getAsyncKeyState dürfte auch iskey(1) trabajo.
 
15.12.2010  
 




Dieter
Zornow
@Thomas

es dir eigentlich ya aufgefallen, dass uno nie en el ersten Platz droppen kann ?
Muss wohl todavía algo geändert voluntad.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
16.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Personas!


Yo denke veces, dass el Message WM_LBUTTONUP nie ankommt. Yo habe me de tiempo el Messages Mostrar dejar 514 war nie esta.


Und el betrifft sólo el SetCurSel-Versión? Das se doch en allen List-y TreeView-Demos así gehandhabt
Aber el IsKey()-Concepto scheint me generell mejor geeignet


es dir eigentlich ya aufgefallen, dass uno nie en el ersten Platz droppen kann ?


Der bewegte Eintrag se sí siempre bajo el Ziel eingefügt. Wenn du el 1. Eintrag anpeilst, se eben a Position 2 eingefügt. Danach obersten Eintrag una Línea tiefer ziehen; entonces tauschen beide el Plätze - Fertig. Erschien me eigendlich auch logisch así. En TreeView-Versión con el Einfügemarke podría al tal vez verbessern.

SeeYou
Pascal
 
16.12.2010  
 




Dieter
Zornow
Yo habe gerade veces el LvDragDrop DragImage.prf ausprobiert, como kommt el Message por, no sé por qué. Das Problema con el Message scheint aber generell a bestehen. Yo habe encima Problemas auch en Foren otro Programmiersprachen gelesen, auch hay wurde entonces como Alternative Getasynckeystate genommen.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
16.12.2010  
 




Thomas
Freier

es dir eigentlich ya aufgefallen, dass uno nie en el ersten Platz droppen kann ?


Sí, deshalb Tuve el Línea:
'   caso Quelle&>Ziel&:Ziel&=Ziel&+1'---Quelle oberhalb de Ziel: Ziel verschiebt se por Löschen de Quelle
deaktiviert y luego es. Fehler Tuve bisher todavía no.
Pascal fand el Einfügen bajo el gewählten Línea logischer. Pero Ansichtssache.
 
Gruß Thomas
Windows XP SP2, XProfan X2
16.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.789 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