[lazarus] Possible bug in FPC or in Lazarus?
Michael.VanCanneyt at Wisa.be
Michael.VanCanneyt at Wisa.be
Thu Dec 19 13:09:00 EST 2002
On Thu, 19 Dec 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.
This is wrong, since TWin32CListStringList does not descend from
TExtendedString.
What is more, based on what I think it should do, I think that
TWin32CListStringList should not descend from TStringList but
from TStrings.
>
> 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)
217 is an abstract error. It seems that some abstract method has not been
properly implemented. Try compiling everything with version 1.1 of the
compiler, it will tell you (warning/note) when a class containing an
abstract method is constructed somewhere.
Michael.
More information about the Lazarus
mailing list