[lazarus] Possible bug in FPC or in Lazarus?

Martin Smat martin.smat at tiscali.cz
Thu Dec 19 13:59:05 EST 2002


Martin Smat 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)
> 
> If you still don't know what I'm speaking about compile my attached demo 
> and run it. It ends with Run-Time error 216. I don't know why once it is 
> error 216 and once 217. Maybe someone from FPC team can answer this.
> 
> Martin Smat.
More info: After removing the keyword "virtual" in procedure 
TWin32CListStringList.SetSorted, the example runs fine.

   Martin.






More information about the Lazarus mailing list