Forum | | | | - page 1 - |
| Thomas Freier | Angelehnt à Andreas Beispiel pour une Listbox voulais je aus optischen Trouvé aussi une Merker avons. malheureusement peux je ihn pas en supplément bewegen, dass il sich bewegt. comment gehts ?
$H Windows.ph
$H Messages.ph
$H ListView.ph
$H commctrl.ph
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$
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($DRAGLISTMSGSTRING)
CLS
SetDialogFont ~GetStockObject(~ANSI_VAR_FONT)
Var Ende& = 0
Var dlg& = @Créer("ChildWindow", %hwnd, "Liste", 80, 60,300,300)
var Text$ = "Name;0;140"
var draglist& = Créer("GridBox", dlg&, text$, 0, 80, 14, 100, 220)
'qui Listbox pour Drag&Drop vobereiten
Externe("comctl32.dll","MakeDragList",Draglist&)
Addstring(Draglist&,"Eintrag")
Addstring(Draglist&,"Auftrag")
Addstring(Draglist&,"Anton")
Addstring(Draglist&,"Otto")
Addstring(Draglist&,"Werner")
Addstring(Draglist&,"Karl")
SubClass dlg&,1
WhileNot Ende&
Waitinput
Endwhile
SubClass dlg&,0
end
SubClassProc
Si SubClassMessage(dlg&,DragMSG&)
Var Info# = New(DRAGLISTINFO)
locate 0,0
l% = LV_HitTest(Draglist&,%mousex,%mousey)
L.SubItem$=GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)
Info# = &slParam
Si Info#.uNotification& = &DL_BEGINDRAG'Drag&Drop beginnt et Item merken
FirstItem& = LVHTI#.Item&
imprimer FirstItem&, " pour "
'Marker zeichnen, muss pas son, augmenté mais qui Sichtbarkeit
Externe("comctl32.dll","DrawInsert",dlg&,Draglist&,Firstitem&)
MoveString$ = GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)'Item-Text merken
Set("WinProc", 0)
~SetCursor(MoveCursor&)
Retour &DL_COPYCURSOR
ElseIf Info#.uNotification& = &DL_DRAGGING'Drag&Drop ist im Gange
LastItem& = LVHTI#.Item&
locate 0,10
Imprimer LastItem&
LvSelect Draglist&,LastItem&
'Marker neuzeichnen
Externe("comctl32.dll","DrawInsert",dlg&,Draglist&,LastItem&)
Set("WinProc", 0)
'Item markieren
SendMessage(DragList&,~Lb_SETCURSEL,LastItem&,0)
~SetCursor(MoveCursor&)
ElseIf Info#.uNotification& = &DL_DROPPED'Drag&Drop ist finissez
LastItem& = LVHTI#.Item&
Si Lastitem& <> -1
'Marker entfernen
Externe("comctl32.dll","DrawInsert",dlg&,Draglist&,-1)
'cela erste gemerkte Item effacer
DeleteString(DragList&,FirstItem&)
'et à qui Position des letzten gemerkten Items insérer
InsertString(DragList&,LastItem&,MoveString$)
Set("WinProc", 0)
LvSelect Draglist&,LastItem&
EndIf
EndIf
EndIf
ENDPROC
|
| | | | |
| | « cette Beitrag wurde comme Solution gekennzeichnet. » | | Andreas Miethe
| Thomas Freier (11/21/10)
Angelehnt à Andreas Beispiel pour une Listbox voulais je aus optischen Trouvé aussi une Merker avons. malheureusement peux je ihn pas en supplément bewegen, dass il sich bewegt. comment gehts ?
allô Thomas,
pour Listviews ist cela aussi pas gedacht. Pour cette nimmt on Insert-Marks
$H Windows.ph
$H Messages.ph
'$H ListView.ph
$H commctrl.ph
DEF &LVM_SETINSERTMARK 4262
Struct LVINSERTMARK = cbSize&,dwFlags&,iItem&,dwReserved&
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$
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
Paramètres Lv&,Item&
Déclarer s#
Faible 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
Paramètres Lv&,Item&
Déclarer s#
Faible 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($DRAGLISTMSGSTRING)
CLS
SetDialogFont ~GetStockObject(~ANSI_VAR_FONT)
Var Ende& = 0
Var dlg& = @Créer("ChildWindow", %hwnd, "Liste", 80, 60,300,300)
Var Text$ = "Name;0;140"
Var draglist& = Créer("GridBox", dlg&, text$, 0, 80, 14, 100, 220)
'qui Listbox pour Drag&Drop vobereiten
Externe("comctl32.dll","MakeDragList",Draglist&)
Addstring(Draglist&,"Eintrag")
Addstring(Draglist&,"Auftrag")
Addstring(Draglist&,"Anton")
Addstring(Draglist&,"Otto")
Addstring(Draglist&,"Werner")
Addstring(Draglist&,"Karl")
SubClass dlg&,1
WhileNot Ende&
Waitinput
Endwhile
SubClass dlg&,0
Fin
SubClassProc
Si SubClassMessage(dlg&,DragMSG&)
Var structInsertMark# = New(LVINSERTMARK)
structInsertMark#.cbSize& = 16
structInsertMark#.dwFlags& = 1'LVIM_AFTER
structInsertMark#.dwReserved& = 0
Var Info# = New(DRAGLISTINFO)
locate 0,0
l% = LV_HitTest(Draglist&,%mousex,%mousey)
L.SubItem$=GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)
Info# = &slParam
Si Info#.uNotification& = &DL_BEGINDRAG'Drag&Drop beginnt et Item merken
FirstItem& = LVHTI#.Item&
imprimer FirstItem&, " pour "
'Marker zeichnen, muss pas son, augmenté mais qui Sichtbarkeit
structInsertMark#.iItem& = -1
SendMessage(Draglist&, &LVM_SETINSERTMARK, 0,structInsertMark#)
MoveString$ = GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)'Item-Text merken
Set("WinProc", 0)
~SetCursor(MoveCursor&)
Retour &DL_COPYCURSOR
ElseIf Info#.uNotification& = &DL_DRAGGING'Drag&Drop ist im Gange
LastItem& = LVHTI#.Item&
locate 0,10
Imprimer LastItem&
LvSelect Draglist&,LastItem&
'Marker neuzeichnen
structInsertMark#.iItem& = LastItem&
SendMessage(Draglist&, &LVM_SETINSERTMARK, 0,structInsertMark#)
Set("WinProc", 0)
'Item markieren
SendMessage(DragList&,~Lb_SETCURSEL,LastItem&,0)
~SetCursor(MoveCursor&)
ElseIf Info#.uNotification& = &DL_DROPPED'Drag&Drop ist finissez
LastItem& = LVHTI#.Item&
Si Lastitem& <> -1
'cela erste gemerkte Item effacer
DeleteString(DragList&,FirstItem&)
'et à qui Position des letzten gemerkten Items insérer
InsertString(DragList&,LastItem&,MoveString$)
Set("WinProc", 0)
LvSelect Draglist&,LastItem&
EndIf
EndIf
EndIf
ENDPROC
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.11.2010 ▲ |
| | |
| | Thomas Freier | allô Andreas. merci pour qui schnelle réaction. malheureusement bekomme je keinen Merker trop voyons ??? |
| | | | |
| | Andreas Miethe
| allô Thomas,
le son MS funktioniert cela seulement im Iconview,SmallIconview et Tileview, alors pas comme liste. cela gilt scheinbar pas plus ab Vue, là funktioniert es aussi avec liste, daher habe je pas plus probiert. avec XP funktioniert es wohl pas
j'ai ici Vue sur dem Laptop et und dir bestens, il peut sogar qui la couleur qui Insertmark festlegen. |
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.11.2010 ▲ |
| |
| | | chez mir sous XP vois je beim Code de Thomas (mais aussi seulement si je per Interpreter ablaufen lasse) immerhin solch flèche au cours de je dragge:
qui mais à cette Position klebt bzw. sich pas bewegt. |
| | | | |
| | Dieter Zornow | avec Win 7 vois je aussi keinen flèche |
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 21.11.2010 ▲ |
| |
| | Thomas Freier | je werde sur den Merker verzichten et la fois pour einer Possibilité chercher, dass si D&D eingeleitet wird qui trop verschiebende la ligne andersfarbig darzustellen et pour Ende de D&D wieder aufheben. Ist chez mir comment stochern im le brouillard, là bisher seulement avec qui Listview.dll gearbeitet. |
| | | | |
| | | exposition la fois: [...] |
| | | | |
| | Thomas Freier | Hatte je mir aussi déjà angesehen, si aussi encore pas abgearbeitet. Werde, pourquoi pas juste, ToolTip einsetzen, hilft oui aussi, si oublier qc, quel Text déménagé volonté sollte.
$H Windows.ph
$H Messages.ph
$H ListView.ph
$H commctrl.ph
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($DRAGLISTMSGSTRING)
CLS
SetDialogFont ~GetStockObject(~ANSI_VAR_FONT)
Var Ende& = 0
Var dlg& = @Créer("ChildWindow", %hwnd, "Liste", 80, 60,300,300)
var Text$ = "Name;0;140"
var draglist& = Créer("GridBox", dlg&, text$, 0, 80, 14, 100, 220)
'qui Listbox pour Drag&Drop vobereiten
Externe("comctl32.dll","MakeDragList",Draglist&)
Addstring(Draglist&,"Eintrag")
Addstring(Draglist&,"Auftrag")
Addstring(Draglist&,"Anton")
Addstring(Draglist&,"Otto")
Addstring(Draglist&,"Werner")
Addstring(Draglist&,"Karl")
SubClass dlg&,1
WhileNot Ende&
Waitinput
Endwhile
SubClass dlg&,0
end
SubClassProc
Si SubClassMessage(dlg&,DragMSG&)
Var Info# = New(DRAGLISTINFO)
locate 0,0
l% = LV_HitTest(Draglist&,%mousex,%mousey)
L.SubItem$=GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)
Info# = &slParam
Si Info#.uNotification& = &DL_BEGINDRAG'Drag&Drop beginnt et Item merken
FirstItem& = LVHTI#.Item&
imprimer FirstItem&, " pour "
MoveString$ = GetText $(Draglist&,LVHTI#.Item&,LVHTI#.SubItem&)'Item-Text merken
T_Tip&=Créer("Tooltip",%hwnd,Draglist&,MoveString$)
Set("WinProc", 0)
~SetCursor(MoveCursor&)
Retour &DL_COPYCURSOR
ElseIf Info#.uNotification& = &DL_DRAGGING'Drag&Drop ist im Gange
LastItem& = LVHTI#.Item&
locate 0,10
Imprimer LastItem&
LvSelect Draglist&,LastItem&
Set("WinProc", 0)
'Item markieren
SendMessage(DragList&,~Lb_SETCURSEL,LastItem&,0)
~SetCursor(MoveCursor&)
ElseIf Info#.uNotification& = &DL_DROPPED'Drag&Drop ist finissez
LastItem& = LVHTI#.Item&
Si Lastitem& <> -1
'cela erste gemerkte Item effacer
DeleteString(DragList&,FirstItem&)
'et à qui Position des letzten gemerkten Items insérer
InsertString(DragList&,LastItem&,MoveString$)
Set("WinProc", 0)
LvSelect Draglist&,LastItem&
DestroyWindow(T_Tip&)
EndIf
EndIf
EndIf
ENDPROC
|
| | | | |
| | | je ne sais pas plus dans welchem Programme je la fois ListBox-Einträge mausverschiebbar gemacht habe mais dadurch le moi den Eintrag tout de suite pour Erreichen qui neuen la ligne déménagé habe était un weitere Kennzeichnung irgendwie garnicht notwendig.
Könnte on zusätzlich oui aussi encore un > à den Zeilenanfang qui trop verschiebenden la ligne mettons. |
| | | | |
|
répondreOptions du sujet | 14.348 Views |
Themeninformationencet Thema hat 4 participant: |