[lazarus] Bugs in TCustomListBox

Mattias Gaertner nc-gaertnma at netcologne.de
Sun Dec 29 03:44:47 EST 2002


On Sat, 28 Dec 2002 18:59:03 -0200
Karl Brandt <pascalive at bol.com.br> wrote:

>   While trying to implement the ListBox/ComboBox under win32 i found 
> some bugs In TCustomListBox code:
> 
> (1)   Some time ago, Martin Smat found that the wrong Items object was 
> being sent through LM_SORT message (TCustomListBox.UpdateSorted).
>  The problem is that the FItems is created as TExtendedStringList  and 
> the interface expects a interface list type. The current solution is 
> wrong because CNSendMessage(LM_GETITEMS, Self, nil) returns a new 
> instance of the interface list and not the current list (see LM_GETITEMS).
> 
> procedure TCustomListBox.UpdateSorted;
> var AMessage : TLMSort;
> begin
>   if not HandleAllocated then exit;
>   with AMessage do begin
>     Msg:= LM_SORT;
>    --> List:= TObject(Pointer(CNSendMessage(LM_GETITEMS, Self, nil)));
>     IsSorted:= FSorted;
>   end;
>   CNSendMessage(LM_SORT, Self, @AMessage);
> end;
> 
> In CreateHandle,if  UpdateSorted is called after FItems is converted to 
> a interface list type then we could just send FItems to the interface; 
> To win32 is necessary that UpdateSelectionMode also come after the 
> conversion;  

Applied.



> (2)  In LM_SETBORDER message (gtk and win32) there's a explicit typecast 
> that may be wrong:
>       (..) 
>       If (TControl(Sender).fCompStyle = csListBox) Or 
> (TControl(Sender).FCompStyle = csCListBox) Then
>             Begin
>               If -> TListBox(Sender)<-.BorderStyle = 
> TBorderStyle(bsSingle) Then
>     (..)
>    If  the control is TCListBox the type cast is wrong. It's not causing 
> errors, but i thing that should be corrected.
>    I propose to make the BorderStyle property public in TCustomListBox 
> so we can typecast to TCustomListBox and not to TListBox.
>    BTW is there any problem to make the Sorted property public in 
> TCustomListBox?
> This would  facilitate the implementation of Sorted under win32.

I changed that (but didn't test a win32 compilation). 


Mattias






More information about the Lazarus mailing list