delphi listbox microsoft-metro firemonkey selecteditem

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.

  1. Se selecciona un artículo del TListBox izquierdo
  2. HorzScrollBox se desplaza hacia la derecha y el segundo TListBox vuelve visible para el usuario y el izquierdo, invisible.
  3. HorzScrollBox se desplaza hacia atrás a la izquierda.
  4. 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.

  1. Crea una nueva aplicación Grid MetropolisUI.
  2. Reemplace el TListBox estándar TListBox con uno nuevo (será más rápido).
  3. Establezca el ancho del formulario más grande que el ancho de su pantalla
  4. Coloque la segunda nueva TListBox dentro de HorzScrollBox de modo que las TListboxes izquierda y derecha no se vean simultáneamente y la selección de elementos solo sea posible después de desplazarse por HorzScrollBox .
  5. Llénelos de cualquier origen (por ejemplo, dos TPrototypeBindSource ) y establezca las propiedades ListItemStyle del LinkFieldControlToField creado en MetropolisUI .

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?