Das umschreiben der ButtonExists sorgt zumindest dafür das es zu keinen ElistError mehr kommt.
Wenn ich hingegen irgendeine Zeile von AddButton entferne dann kracht es wieder.
Delphi-Quellcode:
function TClsProgBar.AddButton(var oButton: TClsButtonInfo): Bool;
begin
if ButtonExists(oButton.Num) then
RemoveButton(oButton.Num);
FColButtons.Add(oButton); // kann nicht entfernt werden
FColButtons.Insert(oButton.Num, oButton); // Das auch nicht
Result := True;
end;
Wirklich kompiliziert die Collection von VB nach Delphi zu portieren.
Hier sind mal die VB Teile dazu..
mcolButtons = Collection und in Delphi halt die TObjectList.
Code:
Public Function AddButton(ByRef roButton As clsButtonInfo) As Boolean
If ButtonExists(roButton.Num) Then RemoveButton roButton.Num
mcolButtons.Add roButton, CStr(roButton.Num)
End Function
Code:
Public Property Get Button(ByVal vlBtn As Long) As clsButtonInfo
On Error Resume Next
Set moSelButton = mcolButtons.Item(CStr(vlBtn))
Set Button = moSelButton
Err.Clear
End Property
Code:
Private Function ButtonExists(ByVal vlBtn As Long) As Boolean
Dim oButton As clsButtonInfo
Set oButton = Button(vlBtn)
ButtonExists = CBool(Not oButton Is Nothing)
End Function
Nur das ihr den Unterschied sehen könnt.
Sorry habe mich noch nie mit der ObjectList beschäftigt.
Nebenbei:
Es geht hier nicht um Copy/Paste
Es ist ein Programm das ich 1999 in VB geschrieben habe was da auf der VB seite abgeht weiss ich und stellt kein problem dar.
gruss