[lazarus] Recreating ListBox/ComboBox handle in win32

Mattias Gaertner nc-gaertnma at netcologne.de
Tue Aug 26 04:09:15 EDT 2003


On Tue, 26 Aug 2003 01:35:11 -0300
Karl Brandt <pascalive at bol.com.br> wrote:

> There's a problem (AKA bug) in RecreateListControl: the windowproc 
> address is not being set, which breaks link between listboxes and 
> comboboxes and LCL.
> I tried to rework the procedure setting the properties at same order of 
> LM_CREATE, but i got unusable controls.
> The patch comments RecreateListControl calls and rewrite the procedure 
> to accomplish the above, although without sucess.
> It also cleans SetComboHeight(Sending WM_SIZE message is no more 
> necessary) and fix a typo at win32List.Add
> Note that MultiSelect, Sorted implementation rellies at recreating the 
> handle.

The patch failed on SetComboHeight and the compilation failed on
TLocalCustomComboBox.
I have applied the patch and fixed the compilation manually. Please check
this.

 
> I see four ways to go:
> 
> 1) Find a way to change MultiSelect, Sorted properties under win32 on 
> the fly, without recreating handle. The ideal, although improbable.
> 
> 2) The properties could be set in LM_CREATE handling, so 
> TWincontrol.RecreateWnd could be called. Now the cited properties are 
> set after LM_CREATE, with LM_SETSORTED and LM_SETSELMODE which causes a 
> endless loop calling RecreateWindow.

Endless loop?
Is the win32 intf checking, if MultiSelect and Sort are already set? A
RecreateWnd should not result in an endless loop. It is an allowed
operation. Especially as the VCL uses it a lot.


> This has a good side effect: now the handle are created three times for 
> each ListBox(LM_CREATE,LM_SETSORTED,LM_SETSELMODE) and twice for each
> combo. The problem is that should be defined at LCL that these features
> should be checked/set at create handling.
> This is the most viable
> 
> 3) Doesn't allow to change these properties at runtime under win32 ????
> 
> 4) Fix the problem in RecreateListControl. Volunteers, please.

Why not fix LM_CREATE in the win32 intf to create a Handle with the correct
flags and add some code to LM_SETxxx to check if RecreateWnd is needed?


> PS: not recreating the handles, makes the listboxes to be drawn (but 
> works fine)incorrectly (Looks the same problem as TMemo), but it's not a 
> new bug. It's a previous hidden bug. In the other side, allows the user 
> to use the combobox at ObjectInspector :-)

:{
a phyrus victory


Mattias






More information about the Lazarus mailing list