AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList sehr anfällig?

Ein Thema von EWeiss · begonnen am 26. Aug 2012 · letzter Beitrag vom 31. Aug 2012
 
EWeiss
(Gast)

n/a Beiträge
 
#1

TObjectList sehr anfällig?

  Alt 26. Aug 2012, 08:06
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

Geändert von EWeiss (11. Jul 2019 um 15:41 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz