Implementación al hacer clic en el elemento / doble clic para TListView

click fraud protection

Delphi El control TListView muestra una lista de elementos en columnas con encabezados y subelementos de columna, o vertical u horizontalmente, con iconos pequeños o grandes.

Como la mayoría de los controles de Delphi, TListView expone el Al hacer clic y OnDblClick (OnDoubleClick) eventos.

Desafortunadamente, si necesita saber en qué elemento se hizo clic o doble clic, no puede simplemente manejar los eventos OnClick / OnDblClick para obtener el elemento seleccionado.

El evento OnClick (OnDblClick) para TListView se activa cada vez que el usuario hace clic en el control, es decir, cuando se produce el "clic" en algún lugar dentro del área del cliente del control.

El usuario puede hacer clic dentro de la vista de lista, PERO "omitir" cualquiera de los elementos. Además, dado que la vista de lista puede cambiar su visualización dependiendo de la propiedad ViewStyle, el usuario podría haber hecho clic en un elemento, en un título de elemento, en un icono de elemento, "en ninguna parte", en un icono de estado de elemento, etc.

instagram viewer

Nota: la propiedad ViewStyle determina cómo se muestran los elementos en la vista de lista: los elementos se pueden mostrar como un conjunto de iconos móviles o como columnas de texto.

Vista de la lista. En Item Click & ListView. En el artículo, haga doble clic

Para poder ubicar el elemento seleccionado (si hay uno) cuando se activa el evento OnClick para la vista de lista, debe determinar qué los elementos de la vista de lista se encuentran debajo del punto especificado por los parámetros X e Y, es decir, la ubicación del mouse en el momento de "hacer clic".

El TListiew's GetHitTestInfoAt La función devuelve información sobre el punto especificado en el área de cliente de la vista de lista.

Para asegurarse de que se hizo clic en el elemento (o doble clic), debe llamar a GetHitTestInfoAt y reaccionar solo si el evento de clic se produjo en un elemento real.

Aquí hay un ejemplo de implementación del evento OnDblClick de ListView1:

// maneja ListView1's con doble clicprocedimiento TForm.ListView1DblClick(Remitente: TObject);
var
hts: THitTests;
ht: THitTest;
sht: cuerda;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
empezar
// posición del cursor del mouse relacionada con ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mouse. CursorPos);
// doble clic donde?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// prueba de éxito de "depuración"
Título: = '';
para ht en hts hacer
empezar
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Título: = Formato ('% s% s |', [Título, sht]);
final;
// localiza el elemento con doble clic
Si hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] luego
empezar
selectedItem: = ListView1.Selected;
// ¡haz algo con el elemento de doble clic!
Título: = Formato ('DblClcked:% s', [selectedItem. Subtítulo]);
final;
final;

En el controlador de eventos OnDblClick (o OnClick), lea la función GetHitTestInfoAt proporcionándole la ubicación del mouse "dentro" del control. Para obtener la ubicación del mouse relacionada con la vista de lista, la función ScreenToClient se usa para convertir un punto (mouse X e Y) en las coordenadas de la pantalla a coordenadas locales o del área del cliente.

GetHitTestInfoAt devuelve un valor de PRUEBAS tipo. The THitTests es un conjunto de PRUEBA valores enumerados

La prueba enumeración Los valores, con su descripción, son:

  • htAbove - por encima del área del cliente.
  • htBajo - debajo del área del cliente.
  • htNada - dentro del control, pero no en un artículo.
  • htOnItem - en un elemento, su texto o su mapa de bits.
  • htOnButton - en un botón
  • htOnIcon - en un icono
  • htOnIndent - en el área sangrada de un artículo.
  • htOnLabel - En una etiqueta.
  • htOnRight - en el lado derecho de un artículo.
  • htOnStateIcon - en un icono de estado o mapa de bits asociado con un elemento.
  • htToLeft - a la izquierda del área del cliente.
  • htToRight - a la derecha del área del cliente.

Si el resultado de la llamada a GetHitTestInfoAt es un subconjunto (¡conjuntos de Delphi!) de [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] puede estar seguro de que el usuario hizo clic en el elemento (o en su icono / icono de estado).

Finalmente, si lo anterior es cierto, lea el Seleccionado propiedad de la vista de lista, devuelve el primer elemento seleccionado (si se pueden seleccionar múltiples) en la vista de lista. Haga algo con el elemento seleccionado / doble clic / seleccionado ...

Asegúrese de descargar el código fuente completo para explorar el código y aprender al adoptarlo.

instagram story viewer