[lazarus] ComboBox problems
Mattias Gaertner
nc-gaertnma at netcologne.de
Thu Aug 14 17:24:25 EDT 2003
On Thu, 14 Aug 2003 14:02:11 -0300
Karl Brandt <pascalive at bol.com.br> wrote:
> Mattias Gaertner wrote:
> > Karl Brandt <pascalive at bol.com.br> wrote:
> >
> >> Height is set to 100
> >> WM_SIZE message with parameter = 100
> >> Default window proc is called
> >> Height is modified to 21
> >> a new WM_SIZE message is sent with parameter = 21
> >> LCL is updated with Height = 21
> >> Default window proc finishes and returns to WindowProc
> >> LCL is updated with Height = 100
> >> Now we have diferents sizes between LCL and win32
> >>with TWin32Object.SetComboMinDropDownSize the height goes to more then
> >>1000 easily. This is not noted because win32 ignores it and adjust the
> >>dropdown according to the number of items
> >>
> >>I see the following solutions
> >>1) Call DefWindowproc after sending the message to LCL
> >> But this can affect other messages/controls
> >>2) Implements a TCustomComboBox.WMSize proc that retrieves the
> >>current/real size from interface and call inherited with updated value
> >>3) sends a WM_SIZE message with correct value -> did in the patch
> >
> >
> > The 3) is right. Whenever the LCL or the interface changes the height, a
> > WM_SIZE message should be sent to tell the other.
> >
> The downside of this approach is that the LCL is asked
> three times to change the height each time the size is updated in
> interface.
> In the above example changes to 21 -> 100 -> 21
> What do you,and other developers, think about 1) and 2)?
2) is combobox specific. The problem exists for all controls. I think,
TWinControl should be advanced.
1) This is to late. A SetBounds sends a WM_SIZE message after LCL internal
resizing.
What about this:
TWinControl already uses DoConstrainedResize before resizing. We can add a
function, which asks the interface to apply interface specific constraints,
before resizing occurs.
Mattias
More information about the Lazarus
mailing list