Versuche die TObjectList anstelle von Collection(VB) zu verwedenden.
Beim start der Anwendung wird ein Button erstellt der aber nicht in die TObjectList aufgenommen wird.
Das ergebis ist dann ListIndex überschreitet das Maximum(1)
Lasse ich den ersten Button weg und fange bei 0 an kommt die Meldung ListIndex überschreitet das Maximum(0)
Langsam bekomme ich einen Anfall und frage mich ob es nicht besser wäre einfach ein normales Array zu verwenden.
Ich dachte das es sinnvoll wäre da die Button während der Laufzeit auch wieder entfernt
bzw.. ReOrganisiert werden müssen.
FColButtons: TObjectList;
Delphi-Quellcode:
function TClsProgBar.Button(Btn: Integer): TClsButtonInfo;
var
FSelButton: TObject;
begin
FSelButton := nil;
try
try
// auch ein FColButtons.Items[Btn- 1]) führt zu einem EListError
FSelButton := (FColButtons.Items[Btn]) as TClsButtonInfo;
except
//
end;
finally
Result := TClsButtonInfo(FSelButton);
end;
end;
Delphi-Quellcode:
function TClsProgBar.ReOrgDisplay(Ctrl: TClsControls; oInit: Bool): Bool;
var
Width: Integer;
Height: Integer;
Btn: Integer;
oButton: TClsButtonInfo;
begin
NewNumButtons := ButtonWidth * ButtonHeight;
oButton := nil;
// Lösche nicht benötigte Controls
if NewNumButtons < FNumButtons then
begin
// lösche nichtverwendete Tasten, ausgenommen die erste
for Btn := NewNumButtons + 1 to FNumButtons do
Ctrl.RemoveButton(Btn);
end;
// lösche nichtverwendete einträge in der TObjectList
if NewNumButtons < FColButtons.Count then
// Lösche nicht benötigte Tasten, ausgenommen die erste
for Btn := NewNumButtons + 1 to FNumButtons do
RemoveButton(Btn);
// erstelle neue Tasten wenn vorhanden
Btn := 0;
for Height := 1 to ButtonHeight do
begin
for Width := 1 to ButtonWidth do
begin
inc(Btn);
if Btn > FNumButtons then
Ctrl.AddButton(frmButtonHandle, Btn);
Ctrl.PositionButton(Btn, Width, Height);
if Btn > FColButtons.Count then
begin
try
oButton := TClsButtonInfo.Create(nil);
oButton.Num := Btn;
AddButton(oButton);
finally
oButton := nil;
end;
end;
end; // Width
end; // Height
// ButtonForm adjustieren
Ctrl.Adjust(ButtonWidth, ButtonHeight);
if oInit then
begin
// lösche die 1. Taste
oButton := Button(1);
if Assigned(oButton) then
begin
try
oButton.BmpFile := '';
oButton.ButtonKey := '';
oButton.ToolTip := '';
oButton.ButtonCmd := '';
finally
oButton := nil;
end;
end;
// ProgBar-Properties zurücksetzen
ClassNamen := '';
ProgPath := '';
ArbVerz := '';
ProgTitle := '';
ProgToolTips := '';
ProgTrayMenu := '';
Name := '';
FNumButtons := 1;
end else
FNumButtons := NewNumButtons;
if Assigned(SelButton) then
SelButton.Free;
result := True;
end;
Bedingt durch den Fehler fehlen mir immer irgendwelche Button
hier zum beispiel 2 .. sollten 8 sichtbar sein.
gruss