J'ai rencontré un problème de sélection impropre d'éléments dans TListBox
dans mon application avec un HorzScrollBox
dans le formulaire. Le formulaire a deux (ou plus) TListBox
dessus. Ils sont placés à l'écart l'un de l'autre de sorte que leur différence de coordonnées absolues à gauche soit supérieure à la largeur de la largeur d'écran actuelle du dispositif. L'erreur apparaît dans la séquence suivante d'actions de l'utilisateur.Sélection incorrecte d'éléments dans une FMistbox FMX (Grid Metropolis UI)
- Un élément est choisi dans le
TListBox
- gauche Le HorzScrollBox défile vers la droite et la deuxième
TListBox
devient visible à l'utilisateur et celui à gauche - invisible. - La HorzScrollBox défile vers la gauche.
- Un nouvel élément est sélectionné à partir de la gauche
TListBox
.
Nous obtenons l'image suivante: Le nouvel élément est sélectionné, mais la sélection des séjours repeintes la position de l'élément sélectionné précédemment, même si nous faisons défiler la boîte de haut en bas.
Il est possible de reproduire le bug de manière très simple.
- Créer une nouvelle application Grid MetropolisUI.
- Remplacez le
TListBox
standard par un nouveau (il sera plus rapide). - Définissez la largeur de la forme plus grande que la largeur de votre écran
- Placez le deuxième nouveau
TListBox
à l'intérieur duHorzScrollBox
de telle façon à ce que gauche et à droiteTListboxes
ne seront pas vus en même temps et la sélection des articles est possible seulement après le défilement de leHorzScrollBox
. - Remplissez-les à partir de n'importe quelle source (par exemple deux
TPrototypeBindSource
) et définissez les propriétésListItemStyle
deLinkFieldControlToField
surMetropolisUI
.
Terminé. Lorsque vous exécutez l'application, vous obtenez le problème. Le bogue n'apparaît que lorsque vous faites défiler le HorzScrollBox
de sorte que vous ne voyez pas le second ListBox
lorsque vous sélectionnez un élément dans le premier. Sinon, les éléments sont sélectionnés correctement (même si vous faites défiler le HorzScrollBox
). Voici la ressource du formulaire (sauf le binaire du style, il doit être présent pour reproduire le bogue).
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
Est-ce que quelqu'un a des suggestions comment faire face?