Français
Forum

Gridbox - souris- et Tastenwahl

 

Thomas
Freier
Im Moment seh Je l' forêt avant lauter Bäumen pas et une Solution, si avec qui souris un Item zum Montrer gewählt wurde, anschließend de cette Pos. avec qui Pfeiltaste plus pour aller. Lieg's am Subproc?
Mini-Beispiel:
' {$ Cleq}
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
Déclarer text$,Font&,Navi&
Déclarer hGrid&
Déclarer 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&
Déclarer LVHTI#,l%,L.SubItem$,T_Tip&
Faible LVHTI#,LVHitTestInfo

Proc LV_HitTest

    Paramètres  LV&,X%,Y%
    ~GetCursorPos(LVHTI#)
    ~ScreenToClient(LV&,LVHTI#)
    SendMessage(LV&,~LVM_SUBITEMHITTEST,0,LVHTI#)
    Retour LVHTI#.SubItem&

ENDPROC

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

proc LvDeSelect'deselectieren

    parameters Lv&,Item&
    Déclarer s#
    dim s#,1024
    long s#,12=0
    long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
    sendmessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
    dispose s#

endproc

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

proc LvSelect'selectieren

    parameters Lv&,Item&
    Déclarer 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)
    dispose 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)
'oui c'est ca cet spezielle annonce muss registiert volonté
'avec cela cela la fenêtre qui Drag&Drop Operationen verarbeiten peux.
Var DragMSG& = ~RegisterWindowMessage("commctrl_DragListMsg")
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET("TRUECOLOR",1)
CLS RGB(255,255,255)
Font&=Créer("Font","MS Sans Serif",16,0,0,0,0)
SETDIALOGFONT Font&
Windowstyle 538
Navi&=Créer("Window",%hwnd,»,(%maxx-160),2,154,670)
Text$ = "Blätter;0;140"
hGrid&   = Créer("GridBox", Navi&, text$, 0, 8, 8, 130, 356)
'qui Listbox pour Drag&Drop vobereiten
Externe("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&)
Sélectionnez String(hGrid&,-1,GetString$(hGrid&,0))
LVSelect hGrid&,0
SEITE_ZEIGEN 0
@Set("Fastmode", 1)
setfocus(Navi&)
SubClass navi&,1
AddHotKey 2020, 37, 0
AddHotKey 2022, 39, 0
AddHotKey 2021, 38, 0
AddHotKey 2023, 40, 0

tandis que 1

    WaitInput 1
    Cas %clé=2:BREAK

    Si (%menuitem=2020) OU (%menuitem=2021)'linke Pfeiltaste

        Si GetCount(hGrid&)>0

            x%=GetCurSel(hGrid&)
            dec x%
            cas x%<0: x%=(GetCount(hGrid&)-1)
            Sélectionnez String(hGrid&,-1,GetString$(hGrid&,x%))
            x%=GetCurSel(hGrid&)
            SEITE_ZEIGEN x%

        endIf'

        setfocus(navi&)

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

        Si GetCount(hGrid&)>0

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

        Endif

        setfocus(navi&)

    EndIf

Endwhile

SubClass navi&,0
@Set("Fastmode", 0)
destroywindow(navi&)
DeleteObject Font&
destroywindow(%hwnd)
Fin

Proc SEITE_ZEIGEN

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

ENDPROC

SubClassProc

    Si SubClassMessage(navi&,DragMSG&)

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

        Si Info#.uNotification& = &DL_BEGINDRAG'Drag&Drop beginnt et Item merken

            FirstItem& = LVHTI#.Item&
            MoveString$ = GetText $(hGrid&,LVHTI#.Item&,LVHTI#.SubItem&)'Item-Text merken
            T_Tip&=Créer("Tooltip",%hwnd,hGrid&,MoveString$)
            Set("WinProc", 0)
            ~SetCursor(MoveCursor&)
            Retour &DL_COPYCURSOR

        ElseIf Info#.uNotification& = &DL_DRAGGING'Drag&Drop ist im Gange

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

        ElseIf Info#.uNotification& = &DL_DROPPED'Drag&Drop ist finissez

            LastItem& = LVHTI#.Item&

            Si Lastitem& <> -1

                IF Lastitem& <> Firstitem&

                    'cela erste gemerkte Item effacer
                    DeleteString(hGrid&,FirstItem&)
                    'et à qui Position des letzten gemerkten Items insérer
                    InsertString(hGrid&,LastItem&,MoveString$)
                    Set("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  
 



chez mir funktioniert cela Programme "überhauptnicht" (XProfan11 32Bit XP SP2) -

je bekomme aussi im Kompilat garkeine GridBox zur Anzeige mais seulement un gelbes hWnd et per Interpreter erhalte je tout de suite une Absturz.

Absturz im Interpreter chez

Übergibst à qui API une Def-Konstante - ist imho pas absolument im Sinne des Erfinders - erwartet wird une Speicheradresse et ne DEF-Konstante pourrait là doch trop komplex son - besser qui Adresse eines einfachen Cordes bzw. Mémoire transfert.
 
07.12.2010  
 



si je
Var DragMSG& = ~RegisterWindowMessage("commctrl_DragListMsg")
schreibe funktionierts et je peux dans Interpreter et Kompilat avec souris et clavier choisir - arrêt simple qui Adresse eines Cordes transfert
 
07.12.2010  
 




Thomas
Freier
OK. était Andreas Code, qui avec XP12 ne...aucune Problem bereitete.
mais je cherche encore, si avec qui souris z.B.: Item5 markiert wurde et je anschließend qui flèche-bouton runter benutze aussi Item6 markiert et angezeigt wird. Meist erfolgt qui Sprung à den Anfang. Ist mir aussi déjà chez anderer Software aufgefallen, dass si quelque chose avec qui souris dans qui Tabelle gewählt wird beim Drücken qui bouton Bild runter, un Sprung trop la ligne 1 erfolgt.
 
Gruß Thomas
Windows XP SP2, XProfan X2
07.12.2010  
 



Tricolore pas getestet mais teste doch la fois obs hilft si Du pour dem D&D z.B. avec Sélectionnez String entsprechende la ligne markierst ou bien gar la fois une autre et wieder zurück.
 
07.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

la fois 'ne entier dumme Frage: laisser sich qui DragListBox-Messages überhaupt sur ListViews (GridBoxen) anwenden? le son MSDN sommes qui doch pour normale Listboxen vorgesehen?
Eigendlich sollte on doch per SubClassing qui LVN_BEGINDRAG-Message des ListViews auswerten?

SeeYou
Pascal
 
08.12.2010  
 




Thomas
Freier
hé Pascal,
qui Antwort doit je dir schuldig rester, là je bisher seulement avec Franks ListView.dll gearbeitet habe et dans diesem le cas es sans faire voulais. un Beispiel de Andreas führte zum gewünschten Ergebnis. seulement bekomme je maintenant Probleme chez qui "Tastensteuerung".
mais tu es oui LV Spezi et vois peut-être une Solution.
 
Gruß Thomas
Windows XP SP2, XProfan X2
08.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

Standartmäßig peux on oui dans chacun Art de liste avec qui clavier navigieren, si cela betreffende Contrôle den Concentrer hat.
tout autor wäre qui einfachste Solution, relevante Tastendrücke im Hauptfenster  per SetFocus(Liste&) & SendKey(Liste&,Key%) à qui liste weiterzuleiten.
Allerdings erkennt XProfan dabei möglicherweise pas, cela qui sélection geändert wurde, si le liste erstmal den Concentrer hat et behält (WaitInput wird pas durchbrochen).
alors entweder pour SendKey den Concentrer wieder auf's Hauptfenster poser ou bien quelque chose comme versuchen (hab's avec deinem Code encore pas getestet):
settimer 100

tandis que 1'--------------Beginn Eingabeschleife

    waitinput
    récente%=getcursel(Liste&)

    si récente%<>Alt%

        vieux%=récente%
        '---Irgendeine réaction sur geänderte sélection

    endif

    '---Weitere Abfragen pour Bedienungselemente usw.

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


Eleganter wäre allerdings une entsprechende Ereignis-Auswertung per SubClassing.
je werd' là la fois quoi vorbereiten

HTH
Pascal
 
09.12.2010  
 




Thomas
Freier
suis déjà gespannt.
Einiges J'ai eu naturellement déjà versucht, cette "Schönheitsfehler" trop beheben. Möglich aussi, dass un vorhandenes EDIT chez meinen Lösungen ausbremsend était. je hatte es im Beispiel weg gelassen, et peux es zur Not dans une eigenen Dialog saisir.
 
Gruß Thomas
Windows XP SP2, XProfan X2
09.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Thomas!

Habe la fois un paire Beispiele pour Drag&Drop ( aktuelles XProfan 12 ) zusammengestellt.

Herunterladen
externer Télécharger


qui la déviation qui Tasten de Hwnd sur qui jeweilige liste erfolgt dabei toujours pour dem gleichen dessus erwähnten Prinzip per SubClassing, ebenso qui Auswertung qui neuen sélection. Unterschiedlich sommes eigendlich seulement qui optischen Effekte. peut-être hilft es dir plus.
PS: Habe mir erlaubt, den Trick avec dem ToolTip trop klauen

SeeYou
Pascal

8 kB
Version:1
Kurzbeschreibung: Drag&Drop-Demos XProfan 12
Hochgeladen:14.12.2010
Downloadcounter225
Herunterladen
 
14.12.2010  
 




Thomas
Freier
hé Pascal,
feine l'affaire, qui du zusammengestellt la hâte.
Aufgefallen c'est moi, dass chez Anwahl kleine Reaktionspausen entstehen.
eh bien suis je mir encore unsicher, comment je plus verfahre.

un kleines Beispiel beigepackt. seulement, si aussi encore avec einem kleinen faute, qui Ansicht-gazette-1m.exe hat Endstand. Pour dem Start s'il te plaît seulement einmal qui Pfade le PNG- et ODT-Fichiers anlegen. qui hat, peux ensuite zum Testen/Travailler, une OpenOffice.exe verknüpfen et qui Dossier ensuite aussi comme PDF Sauver (Pfad ensuite einrichten). qui zur Anzeige nécessaire PNG-Fichiers peut sur IrfanView, si il PDFs ouvrir peux, ou bien une PDF-Reader (z.B.: Portable PDFXCview.exe) erstellt volonté. cela Ganze mag compliqué klingen, mais malheureusement gelang es mir encore pas une beliebige halbe PDF-page anzuzeigen.

3.838 kB
Hochgeladen:15.12.2010
Downloadcounter331
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
15.12.2010  
 




Dieter
Zornow
alors avec qui Setcurselversion habe je sous Win7 toujours une Absturz. qui Drop-Cursor erscheint ensuite peux je klicken ou bien quoi que + subj., es passiert rien plus. peux ensuite seulement encore avec dem Taskmanager finissons. Ist mais déjà so avec dem 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  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

18.443 Views

Untitledvor 0 min.
H.Brill26.01.2022
Sven Bader11.07.2021
Ralf Netz22.05.2021
ByteAttack02.12.2018
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie