[lazarus] Possible bug in FPC or in Lazarus?

Martin Smat martin.smat at tiscali.cz
Fri Dec 20 13:52:48 EST 2002


Mattias Gaertner wrote:
> On Thu, 19 Dec 2002 18:51:07 +0100
> Martin Smat <martin.smat at tiscali.cz> wrote:
> 
> 
>>Hi,
>>Look at the procedure TCustomListBox.CreateHandle:
>>
>>procedure TCustomListBox.CreateHandle;
>>var
>>   NewStrings : TStrings;
>>   i: integer;
>>begin
>>   inherited CreateHandle;
>>   CNSendMessage(LM_SETBORDER, Self, nil);
>>   UpdateSelectionMode;
>>(1)  UpdateSorted;
>>   NewStrings:= TStrings(Pointer(CNSendMessage(LM_GETITEMS, Self, nil)));
>>   NewStrings.Assign(Items);
>>   for i:=0 to Items.Count-1 do begin
>>     if clbiSelected in GetListBoxItemRecord(FItems,i)^.Flags then
>>       SendItemSelected(i,True);
>>   end;
>>   FItems.Free;
>>   FItems:= NewStrings;
>>   CNSendMessage(LM_SETITEMINDEX, Self, Pointer(FItemIndex));
>>end;
>>
>>Line (1) UpdateSorted sends LM_SORT message which works with 
>>TGtkCListStringList (in GTK) or with TWin32CListStringList (in Win32) 
>>object. These classes are descendands of class TStringList.
>>In constructor TCustomListBox.Create is line
>>FItems := TExtendedStringList.Create(...). TExtendedString is descendand 
>>of class TStringList too.
>>So we have folowing classes:
>>   TStringList
>>     |
>>     |---TWin32CListStringList
>>     |
>>     |---TExtendedString
>>
>>When processing the LM_SORT message in interface, there is this 
>>typecasting (symplified):
>>   TWin32CListStringList(FItems).Sorted:=...
>>This line calls TWin32CListStringList.SetSorted method.
>>
>>On this line crashes the listboxtest.pp example. I think it is because 
>>of calling the SetSorted method. This method is not in TExtendedString 
>>class.
>>Listboxtest example ends with "Unknown Run-Time Error : 217". (tested in 
>>Win32)
> 
> 
> UpdateSorted sent the wrong list in TLMSort. The gtk interface does not use
> it and so the bug didn't appear there. I fixed that. Can a win32 user check
> if this works?
> 
> 
> Mattias
> 
Yes, it works now. Thanks.






More information about the Lazarus mailing list