[Lazarus] ShowControl (was: IDE docking flaw?)
Hans-Peter Diettrich
DrDiettrich1 at aol.com
Wed Jun 8 04:22:46 CEST 2011
Mattias Gaertner schrieb:
> Current ShowControl:
> Set Visible of one control to true and switches active parent Pages.
>
> Wanted:
> A method to set Visible of control and all its parents to true,
> switches active parent Pages, optionally changes Z-Order, optionally
> calls BringToFront on top level form, optionally scrolls parent
> controls, optionally moves top level form into monitor bounds,
> optionally moves top level form to current monitor.
Dunno how you want to make all this depending on *one* boolean parameter ;-)
ShowControl already is recursive, and a BringToFront parameter is
meaningful only to the top-level Parent. This lead me to a new suggestion:
- Add a procedure (or method) that stores additional parameter(s) in a
static location, and make it call ShowControl (as is).
- Update TWinControl.ShowControl to evaluate and finally reset all the
options.
This allows to introduce parameters like:
- MakeVisible (applicable to all controls)
- BringToFront (applicable in top-level controls)
- MakeFullyVisible (move top level form into monitor bounds)
- whatever else you like[1] ;-)
This solution
- doesn't require any changes to the ShowControl overrides,
- doesn't change the behaviour of ShowControl when called from other
places, and
- all options are handled in only one place: TWinControl.ShowControl.
[1] You can add ScrollIntoView, if you like, by overriding ShowControl
in TScrollingWinControl.
When the options are passed as a set, it's easy to clear all options at
once (ShowOptions:=[];), after ShowControl reached the top level form.
When the options are added to the non-virtual TControl.Show
(default=[]), no new method has to be introduced at all :-)
DoDi
More information about the Lazarus
mailing list