[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