delphi - Selección incorrecta de elementos en un FMX TListbox(Grid Metropolis UI)
microsoft-metro firemonkey (1)
Encontré una respuesta estableciendo ListBox1.CanFocus := false;
. En ciertos casos (atrás) el error vuelve a ocurrir.
He encontrado un problema de selección no adecuada de elementos en TListBox
en mi aplicación con un HorzScrollBox
en el formulario. El formulario tiene dos (o más) TListBox
en él. Se ubican separados unos de otros, de modo que su diferencia absoluta de coordenadas izquierda es mayor que el ancho del ancho actual de la pantalla del dispositivo. El error aparece en la siguiente secuencia de acciones del usuario.
- Se selecciona un artículo del
TListBox
izquierdo - HorzScrollBox se desplaza hacia la derecha y el segundo
TListBox
vuelve visible para el usuario y el izquierdo, invisible. - HorzScrollBox se desplaza hacia atrás a la izquierda.
- Se selecciona un nuevo elemento del
TListBox
izquierdo.
Obtenemos la siguiente imagen: el nuevo elemento está seleccionado pero la selección permanece pintada sobre la posición del elemento seleccionado previamente incluso si desplazamos el cuadro hacia arriba y hacia abajo.
Es posible reproducir el error de una manera muy simple.
- Crea una nueva aplicación Grid MetropolisUI.
- Reemplace el
TListBox
estándarTListBox
con uno nuevo (será más rápido). - Establezca el ancho del formulario más grande que el ancho de su pantalla
- Coloque la segunda nueva
TListBox
dentro deHorzScrollBox
de modo que lasTListboxes
izquierda y derecha no se vean simultáneamente y la selección de elementos solo sea posible después de desplazarse porHorzScrollBox
. - Llénelos de cualquier origen (por ejemplo, dos
TPrototypeBindSource
) y establezca las propiedadesListItemStyle
delLinkFieldControlToField
creado enMetropolisUI
.
Hecho. Cuando ejecuta la aplicación, obtiene el problema. El error aparece solo cuando desplaza el HorzScrollBox
para que no vea el segundo ListBox
cuando selecciona un elemento en el primero. De lo contrario, los elementos se seleccionan correctamente (incluso si se desplaza por HorzScrollBox
). Aquí está el recurso del formulario (excepto el binario del estilo, debe estar presente para reproducir el error).
object GridViewForm: TGridViewForm
Left = 0
Top = 0
Caption = ''Grid Form''
ClientHeight = 946
ClientWidth = 2600
StyleBook = StyleBook2
FormFactor.Width = 1280
FormFactor.Height = 1024
FormFactor.Devices = [dkDesktop]
FormFamily = ''Main''
FullScreen = True
OnMouseUp = FormMouseUp
Touch.InteractiveGestures = [igPan]
OnGesture = FormGesture
DesignerMobile = False
DesignerWidth = 0
DesignerHeight = 0
DesignerDeviceName = ''''
DesignerOrientation = 0
DesignerOSVersion = ''''
object MainLayout: TLayout
Align = alContents
Height = 921.000000000000000000
Margins.Top = 25.000000000000000000
Width = 2600.000000000000000000
object HorzScrollBox1: THorzScrollBox
Align = alClient
Height = 921.000000000000000000
TabOrder = 0
Width = 2600.000000000000000000
object GroupLayout1: TLayout
Align = alLeft
Anchors = [akLeft, akTop]
Height = 905.000000000000000000
Margins.Left = 110.000000000000000000
Position.X = 110.000000000000000000
Width = 540.000000000000000000
object ListBox4: TListBox
Align = alClient
Height = 905.000000000000000000
StyleLookup = ''collectionlistbox''
TabOrder = 0
Width = 540.000000000000000000
DefaultItemStyles.ItemStyle = ''''
DefaultItemStyles.GroupHeaderStyle = ''''
DefaultItemStyles.GroupFooterStyle = ''''
end
end
object GroupLayout2: TLayout
Align = alLeft
Anchors = [akLeft, akTop]
Height = 905.000000000000000000
Margins.Left = 40.000000000000000000
Position.X = 690.000000000000000000
Width = 1225.000000000000000000
end
object Layout1: TLayout
Align = alLeft
Anchors = [akLeft, akTop]
Height = 905.000000000000000000
Margins.Left = 40.000000000000000000
Margins.Right = 100.000000000000000000
Position.X = 1955.000000000000000000
Width = 660.000000000000000000
object Label1: TLabel
Align = alTop
AutoSize = True
Height = 40.000000000000000000
Margins.Left = 10.000000000000000000
Margins.Bottom = 5.000000000000000000
Position.X = 10.000000000000000000
StyleLookup = ''pagesubheaderlabel''
Text = ''Group Title: 4''
Width = 165.000000000000000000
WordWrap = False
end
object ListBox1: TListBox
Align = alClient
Height = 855.000000000000000000
StyleLookup = ''collectionlistbox''
TabOrder = 1
Width = 660.000000000000000000
DefaultItemStyles.ItemStyle = ''''
DefaultItemStyles.GroupHeaderStyle = ''''
DefaultItemStyles.GroupFooterStyle = ''''
end
end
end
end
object StyleBook2: TStyleBook
Left = 632
Top = 544
ResourcesBin = {...}
end
object PrototypeBindSource1: TPrototypeBindSource
AutoActivate = True
AutoPost = False
FieldDefs = <
item
Name = ''ContactBitmapL1''
FieldType = ftBitmap
Generator = ''ContactBitmapsL''
ReadOnly = False
end
item
Name = ''ContactName1''
Generator = ''ContactNames''
ReadOnly = False
end
item
Name = ''IntField1''
FieldType = ftInteger
Generator = ''Integers''
ReadOnly = False
end>
ScopeMappings = <>
Left = 1288
Top = 456
end
object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkFillControlToField1: TLinkFillControlToField
Category = ''Quick Bindings''
Control = ListBox4
Track = True
FillDataSource = PrototypeBindSource1
FillDisplayFieldName = ''ContactName1''
AutoFill = True
BufferCount = -1
AutoBufferCount = False
ListItemStyle = ''MetropolisUI''
FillExpressions = <
item
SourceMemberName = ''ContactBitmapL1''
ControlMemberName = ''Icon''
end
item
SourceMemberName = ''IntField1''
ControlMemberName = ''SubTitle''
end>
FillHeaderExpressions = <>
FillBreakGroups = <>
end
object LinkFillControlToField2: TLinkFillControlToField
Category = ''Quick Bindings''
Control = ListBox1
Track = True
FillDataSource = PrototypeBindSource2
FillDisplayFieldName = ''ContactName1''
AutoFill = True
BufferCount = -1
AutoBufferCount = False
ListItemStyle = ''MetropolisUI''
FillExpressions = <
item
SourceMemberName = ''FloatField1''
ControlMemberName = ''SubTitle''
end
item
SourceMemberName = ''ContactBitmap1''
ControlMemberName = ''Icon''
end>
FillHeaderExpressions = <>
FillBreakGroups = <>
end
end
object PrototypeBindSource2: TPrototypeBindSource
AutoActivate = True
AutoPost = False
FieldDefs = <
item
Name = ''ContactBitmap1''
FieldType = ftBitmap
Generator = ''ContactBitmaps''
ReadOnly = False
end
item
Name = ''ContactName1''
Generator = ''ContactNames''
ReadOnly = False
end
item
Name = ''FloatField1''
FieldType = ftSingle
Generator = ''Floats''
ReadOnly = False
end>
ScopeMappings = <>
Left = 1232
Top = 448
end
end
¿Alguien tiene alguna sugerencia de cómo sobrellevarlo?