Foro | | | | - Página 1 - |
| Andreas Koch | ¡Hola zusammen,
Yo stehe ya otra vez una vez antes una Problema. Lo va por lo tanto, adecuado a bekommen, encima welchem Listviewitem (Spalte, Línea) se el Mauszeiger gerade befindet. Mein Gedanke es, en el Anschluss a una simulierten Mausklick Getcontrolparas abzufragen y el Ganze en un Bucle einzubauen. Sombrero alguien una Concepto, cómo hacerlo hacer podría oder ha lo incluso gemacht? Yo habe intenta con mouse_event a trabajo, aber el funktioniert no.
Schönen Saludo
Andreas Koch |
| | | | |
| | « Dieser Contribución wurde como Solución gekennzeichnet. » | | Thomas Freier | Das hatten wir doch, Yo glaube beim Stundenplan. Hier una min. Ejemplo para Tooltip:
$H Windows.ph
$H commctrl.ph
Struct LVHitTestInfo = X&,Y&,flags&,Item&,SubItem&
Declarar LVHTI#,LView&,l%
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
Cls
LView& = Crear("GridBox",%hwnd,"Test 0;0;100;Test 1;0;100;Test 2;0;100;Bemerkung;0;100",0,20,10,410,200)
WhileLoop 0,4
AddStrings(LView&,"0 Test " + Str$(&Loop) + "|1 Test " + Str$(&Loop) + "|2 Test " + Str$(&Loop) + "|")
Wend
var texto$="Was es porque überhaupt una Listview? \nOb ellos's glauben oder no. "+ \
"Sobald ellos ihren Windows-PC anschalten, erscheint ya el erste Listview."+ \
"Wo, fragen ellos? Auf ihrem Bildschirm.\nDer Windows Bildschirm es nämlich nichts más como una Listview.\n"+ \
"(FRABBING)"
SetText LView&, 1, 3, texto$
sendmessage(Lview&,~LVM_SETEXTENDEDLISTVIEWSTYLE,0,~LVM_SUBITEMHITTEST)'markiert el Línea bajo ratón
'sendmessage(LView&,0,~LVM_SETHOVERTIME,10) 'löst praktisch una Mausklick de ????
var ToolTip&=create("Tooltip",%hwnd,LView&,"")
var medit%=Crear("MultiEdit",%hwnd,"",0,0,300,-400)
ShowWindow(medit%,0)
Mientras que 1
WaitInput 100
l% = LV_HitTest(LView&,%mousex,%mousey)
'
SELECT LVHTI#.Item&
CASEOF 1'ZEILE
If LVHTI#.SubItem&=3'ITEM
SetText medit%,GetText $(LView&,LVHTI#.Item&,LVHTI#.SubItem&)
texto$=""
Whileloop GetLineCount(medit%)'Anzahl Zeilen
texto$=texto$+GetLine$(medit%,&bucle-1)+"\n"'einzelne Zeilen auslesen y Zeilenumbruch
Wend
settext ToolTip&,%hwnd,LView&,texto$
EndIf
CASEOF 3'ZEILE
settext ToolTip&,%hwnd,LView&,"erste Wahl"
OTHERWISE
settext ToolTip&,%hwnd,LView&,""
ENDSELECT
Wend
end
Müßte sicher en SubClassProc umgestellt voluntad. |
| | | | | |
| | | Wissen tue Yo no, aber el Breiten el Spalten puede ser imho con LVM_GETCOLUMNWIDTH ermitteln, por minus Mausposition-X dürfte uno así el Spalte herausbekommen.
Lo son aber auch LVM_GETITEMINDEXRECT ( [...] ) qué tal vez todavía hilfreicher es.
Mausklick vlt. simplemente así:
|
| | | | |
| | Thomas Freier | Das hatten wir doch, Yo glaube beim Stundenplan. Hier una min. Ejemplo para Tooltip:
$H Windows.ph
$H commctrl.ph
Struct LVHitTestInfo = X&,Y&,flags&,Item&,SubItem&
Declarar LVHTI#,LView&,l%
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
Cls
LView& = Crear("GridBox",%hwnd,"Test 0;0;100;Test 1;0;100;Test 2;0;100;Bemerkung;0;100",0,20,10,410,200)
WhileLoop 0,4
AddStrings(LView&,"0 Test " + Str$(&Loop) + "|1 Test " + Str$(&Loop) + "|2 Test " + Str$(&Loop) + "|")
Wend
var texto$="Was es porque überhaupt una Listview? \nOb ellos's glauben oder no. "+ \
"Sobald ellos ihren Windows-PC anschalten, erscheint ya el erste Listview."+ \
"Wo, fragen ellos? Auf ihrem Bildschirm.\nDer Windows Bildschirm es nämlich nichts más como una Listview.\n"+ \
"(FRABBING)"
SetText LView&, 1, 3, texto$
sendmessage(Lview&,~LVM_SETEXTENDEDLISTVIEWSTYLE,0,~LVM_SUBITEMHITTEST)'markiert el Línea bajo ratón
'sendmessage(LView&,0,~LVM_SETHOVERTIME,10) 'löst praktisch una Mausklick de ????
var ToolTip&=create("Tooltip",%hwnd,LView&,"")
var medit%=Crear("MultiEdit",%hwnd,"",0,0,300,-400)
ShowWindow(medit%,0)
Mientras que 1
WaitInput 100
l% = LV_HitTest(LView&,%mousex,%mousey)
'
SELECT LVHTI#.Item&
CASEOF 1'ZEILE
If LVHTI#.SubItem&=3'ITEM
SetText medit%,GetText $(LView&,LVHTI#.Item&,LVHTI#.SubItem&)
texto$=""
Whileloop GetLineCount(medit%)'Anzahl Zeilen
texto$=texto$+GetLine$(medit%,&bucle-1)+"\n"'einzelne Zeilen auslesen y Zeilenumbruch
Wend
settext ToolTip&,%hwnd,LView&,texto$
EndIf
CASEOF 3'ZEILE
settext ToolTip&,%hwnd,LView&,"erste Wahl"
OTHERWISE
settext ToolTip&,%hwnd,LView&,""
ENDSELECT
Wend
end
Müßte sicher en SubClassProc umgestellt voluntad. |
| | | | |
| | Andreas Koch | ¡Hola ihr beiden,
bastante herzlichen Dank para eure Respuesta. Yo wurschtel ya el ganzen Tag rum, aber ahora klappts. Kurzes Feedback: Um Getcontrolparas nutzen a puede, muss al Drücken y el Liberación simulieren , war desafortunadamente para media ursprünglichen Zweck no bastante geeignet, funktioniert aber doch con mouse_event. Dieser Tooltip fürs Listview war schlicht genial, genau el Yo gesucht habe. Gracias.
PS: Tuve hier veces gefragt, si uno el Listviewposition (Spalte, Línea) des Editcontrols con el Handle Getvar(0) ermitteln kann. Das funktioniert auch con el Método: uno determinado con Getwindowrect Position y Abmessung des Edits y verwendet anschließend el Hittest con el Mittelwerten de getwindowrect. Si el Ganze en uno Bucle con el Abbruchbedingung Mientras que Getvar(0) gemacht se, bekommt uno ständig el aktuelle Position. |
| | | | |
| | | | | | | |
|
RespuestaThemeninformationenDieses Thema ha 3 subscriber: |