[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