| |
|
|
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
|
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
| Wenn Yo escribir funktionierts y yo kann en Interpreter y Kompilat con Ratón y Tastatur wählen - sólo simplemente el Adresse uno Cuerdas transferencia |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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 | | Ladeanzahl: | | | | Descargar |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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 ▲ |
|
|
|