Foro | | | | - 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
|
| | | | |
| | | | | - 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. |
| | | | |
| | 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:
Ähnlich verhält lo con el DragListBox-Versión. Como muß lo al Ende el SubClassProc heißen:
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:
@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 |
| | | | |
| | 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. |
| | | | |
| | 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
ersetzt por
y luego en el Bucle
|
| | | | |
| | | Statt getAsyncKeyState dürfte auch iskey(1) trabajo. |
| | | | |
| | 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 |
| | | | |
| | 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. |
| | | | |
|
RespuestaTema opciones | 17.807 Views |
ThemeninformationenDieses Thema ha 4 subscriber: |