Results 1 to 6 of 6

Thread: grid scroll vreemd verschijnsel (bug)

  1. #1
    Senior Member EricLang's Avatar
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,376

    grid scroll vreemd verschijnsel (bug)

    Ik heb een vreemde situatie waar (draw)grid niet tegenkan.
    2 grids op een scrollbox, deze passen niet geheel op het scherm. Met range-select aan. Dan is de bug goed zichtbaar.
    Wanneer ik in een grid, dat niet geheel zichtbaar is, een cell aanklik zorgt de scrollbox ervoor dat het grid vanaf zijn bovenkant zichtbaar wordt.
    Daardoor raakt het grid in de war: er vindt een mousemove event plaats (waarom dat heb ik nog niet achterhaald).
    En daardoor wordt er een aantal cellen geselecteerd.
    Nogal ingewikkeld en je moet het zien om te snappen.
    Als iemand weet hoe dit op te lossen is hoor ik het graag (desnoods met een patchkopie van Vcl.Grids)

  2. #2
    Welke Delphi versie gebruik je?

  3. #3
    I7 7700K 32Gb Win10 Pro Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    1,988
    en een screendump maakt het wat makkelijker te begrijpen.
    Ik snap niet goed wat je bedoeld
    10.3.3, Delphi2010, of Lazarus 2.0.10

  4. #4
    Senior Member EricLang's Avatar
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,376
    ik zal in het weekend een image maken. en vermoed dat het voor alle delphi versies zo werkt (werk nu met 10.4)

  5. #5
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,104
    Hallo Eric,

    Dit is niet een probleem van het Grid, maar van de ScrollBox. Een Memo vertoont identiek gedrag wanneer deze op een ScrollBox (of op een Form met scroll bars) staat. Het is maar de vraag of dit eigenlijk wel een probleem is.

    De oorzaak van deze "eigenaardigheid" zit hem in de automatische ScrollInView-functionaliteit van de ScrollBox: zodra een control in de ScrollBox de focus krijgt scrollt de ScrollBox dat control in beeld wanneer deze gedeeltelijk onzichtbaar is. Dat is prettige feedback voor de gebruiker en bovendien een noodzakelijke feature wanneer die focus wordt verkregen met de Tab-toets.

    Wanneer het control de focus verkrijgt met een muisklik, zoals in jouw voorbeeld, dan gebeurt het volgende:
    - een MouseDown en de muispositie op het Grid worden geregistreerd,
    - de ScrollBox verschuift het gehele Grid in beeld,
    - een MouseUp en de nieuwe muispositie op het Grid worden geregistreerd,
    - de selectie van het Grid wordt gelijkgesteld aan het verschil tussen de verschillende muisposities, hoewel de muis fysiek op het screen niet is verplaatst.

    Je kunt dit onmogelijk naar tevredenheid in het Grid oplossen. Stel dat je één van beide muisposities moedwillig overschrijft, want dat zou dan nodig zijn; nooit zal de fysieke muis boven de geklikte Cell eindigen. Bovendien strand de gebruikerservaring in één van volgende ongewenste toestanden:
    - de selectie/cursor staat niet op de aangeklikte Cell (maar onder de muispointer),
    - de selectie/cursor staat niet onder muispointer (maar op de aangeklikte Cell).

    Het enige wat je zou kunnen doen, wat zelfs nog redelijk intuitief is ook, is het automatisch ScrollInView-gedrag uitschakelen, maar dan alleen wanneer de focus met de muis wordt verkregen. Immers, het control was minstens gedeeltelijk zichtbaar toen er op geklikt werd.
    Delphi Code:
    1. type
    2.   TScrollBox = class(Vcl.Forms.TScrollBox)
    3.     procedure AutoScrollInView(AControl: TControl); override;
    4.   end;
    5.  
    6. ...
    7.  
    8. { TScrollBox }
    9.  
    10. procedure TScrollBox.AutoScrollInView(AControl: TControl);
    11. begin
    12.   if not ((AControl is TCustomDrawGrid) and
    13.       (csLButtonDown in AControl.ControlState)) then
    14.     inherited AutoScrollInView(AControl);
    15. end;
    Echter, een dergelijke inconsistentie zou waarschijnlijk een onrustige gebruikerservaring geven of zelfs verwarring oproepen. Mocht je hiervoor willen kiezen dan verplicht je jezelf deze code aan te vullen voor álle controls die vergelijkbaar gedrag vertonen, waaronder TMemo.

    Kortom, mijn advies zou zijn: gewoon lekker zo laten.
    Last edited by NGLN; 23-Sep-20 at 16:30.
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

  6. #6
    Senior Member EricLang's Avatar
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,376
    Yep, ik snap het probleem. Het is wel degelijk een bug in mijn ogen, want de range-select verandert VOORDAT ik de muis heb losgelaten.
    Ik ga denken over een betere UI :-)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •