Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TObjectList sehr anfällig? (https://www.delphipraxis.net/170018-tobjectlist-sehr-anfaellig.html)

Medium 26. Aug 2012 23:06

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von EWeiss (Beitrag 1180039)
Aber es geht um Nonvcl da zählen einige deiner guten Ratschläge leider nicht.

Klare Besitzverhältnisse haben imho nun garnix mit der VCL zu tun. Eher damit, ob man sich selber den Gefallen tun möchte oder lieber im eigenen Kauderwelsch suhlt ;)

Blup 27. Aug 2012 08:58

AW: TObjectList sehr anfällig?
 
Scheinbar hat hier oButton.Num nichts mit dem Index in der TObjectlist zu tun.
Ursache kann z.B. sein, das die Buttons nicht vollständig, doppelt oder nicht in der richtigen Reihenfolge eingefügt oder nach dem Einfügen nicht sortiert werden. Also sollte man den Index unberücksichtigt lassen, statt dessen nach dem richtigen Button suchen:
Delphi-Quellcode:
type
  TMyColButtons = class(TObjectList)
  private
    function GetButton(ANum: Integer): TClsButtonInfo;
  public
    procedure Add(AButton: TClsButtonInfo);
    procedure Remove(ANum: Integer);
    property Button[ANum: Integer]: TClsButtonInfo read GetButton; default;
  end;

function TMyColButtons.GetButton(ANum: Integer): TClsButtonInfo;
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
  begin
    Result := TClsButtonInfo(Items[i]);
    if Result.Num = ANum then
      Exit;
  end;
  Result := nil;
end;

procedure TMyColButtons.Add(AButton: TClsButtonInfo);
begin
  Remove(AButton.Num);
  inherited Add(AButton);
end;

procedure TMyColButtons.Remove(ANum: Integer);
var
  oButton: TClsButtonInfo;
begin
  oButton := Button[ANum];
  if Assigned(oButton) then
    inherited Remove(oButton);
end;
Wichtig ist:
Wenn ein Button gelöscht werden soll, muss er aus der Liste entfernt werden, bevor er freigegeben wird.

EWeiss 27. Aug 2012 09:06

AW: TObjectList sehr anfällig?
 
Ahh hab diesbezüglich auch schon Fehler gefunden.
Beim klick auf einen Button werden mir nur ungerade Button korrekt zurückgeliefert.

Vielleicht behebt dein Code das problem direkt mit.

Werde es mal testen.

PS:
Ja leider geht nicht alles da VBCollection doch anderes gehandhabt werden.

Danke.

gruss

EWeiss 27. Aug 2012 10:04

AW: TObjectList sehr anfällig?
 
Hab mir deinen Code nochmal durchgesehen er hilft mir leider nicht weiter
Trotzdem nochmal Danke.

Zitat:

Wenn ein Button gelöscht werden soll, muss er aus der Liste entfernt werden, bevor er freigegeben wird.
Im moment ist mir noch nicht ersichtlich was eigentlich alles in die ObjectList gespeichert wird.
Die gesamten eigenschaften der Classen oder nur der Index des aktuell addierten Button.


gruss

DeddyH 27. Aug 2012 10:10

AW: TObjectList sehr anfällig?
 
In einer TObjectList werden die Instanzen abgelegt, Du hast also vollen Zugriff auf alle Eigenschaften und Methoden der jeweiligen Instanz. Wenn es sich nicht um eine spezialisierte Ableitung bzw. eine generische TObjectList handelt, musst Du diese aber vorher noch auf den entsprechenden Typen casten.

EWeiss 27. Aug 2012 10:34

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von DeddyH (Beitrag 1180068)
In einer TObjectList werden die Instanzen abgelegt, Du hast also vollen Zugriff auf alle Eigenschaften und Methoden der jeweiligen Instanz. Wenn es sich nicht um eine spezialisierte Ableitung bzw. eine generische TObjectList handelt, musst Du diese aber vorher noch auf den entsprechenden Typen casten.

Wenn ich dich also richtig verstehe sollten alle eigenschaften des aktuellen button(Instanz)

oButton.Num
oButton.BmpFile
oButton.ButtonKey
oButton.ToolTip
oButton.ButtonCmd

beispiel für button 1 im feld 0 gespeichert sein?
Also der Counter macht mir ärger.
Der dritte button wird einfach nicht addiert in die ObjectList

Delphi-Quellcode:
      if Btn > FColButtons.Count - 1 then
      begin
        try
          oButton := TClsButtonInfo.Create(nil);
          oButton.Num := Btn;
          AddButton(oButton);
        finally
          oButton := nil;
        end;
      end;
Die ersten beiden werden ordnungsgemäß addiert
aber beim dritten ist der Count immer noch 2 obwohl er eigentlich 3 sein müßte.
Die probleme nehmen einfach kein ende mit der Liste ;)

Sternchen für OK!
1*, 2* 3, 4*, 5, 6*, 7, 8*

Was ist mit den anderen die werden einfach nicht addiert.
Der FColButtons.Count erhöht sich nicht nach dem addieren des 2,4,6 usw..

gruss

Medium 27. Aug 2012 10:51

AW: TObjectList sehr anfällig?
 
Wofür braucht du überhaupt die Property "Num"? Die erscheint mir eher redundant, und gerade wenn sie mit dem Index in der Liste immer übereinstimmen muss, auch aufwändig zu pflegen (Man müsste nach jedem Insert in die Liste ggf. alle Buttons anpassen).
Soweit ich deinen (zugegebenermaßen recht eigentümlichen) Code verstehe, willst du doch nicht mehr, als einfach alle Buttons in eine ungeordnete Sammlug werfen. Dann kannst du die doch einfach in die Liste Adden, der Index (also "Num") ergibt sich dann ohnehin nachher implizit über seine Position in der Liste. Warum das gehuddel?

Eine Liste speichert ansonten immer auch nur Referenzen auf Objekte.
Delphi-Quellcode:
var
  myInstance: TMyClass;
  aList: TObjectList;
begin
  aList := TObjectList.Create;
  myInstance := TMyClass.Create;
  aList.Add(myInstance);
  // Folgende Zugriffe sind dann vollständig identisch:
  myInstance.SomeProperty := 'Foo';
  TMyClass(aList[0]).SomeProperty := 'Foo';
end;

DeddyH 27. Aug 2012 10:52

AW: TObjectList sehr anfällig?
 
Darf ich mal ganz doof fragen, was Btn eigentlich ist bzw. welchen Zweck sie erfüllen soll?

EWeiss 27. Aug 2012 11:10

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von DeddyH (Beitrag 1180086)
Darf ich mal ganz doof fragen, was Btn eigentlich ist bzw. welchen Zweck sie erfüllen soll?

Btn steht für Button..
Und ist der index des aktuellen Button.

gruss

DeddyH 27. Aug 2012 12:49

AW: TObjectList sehr anfällig?
 
Also wenn das eine Instanz ist, könntest Du mit IndexOf(Btn) den Index erfragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 3 von 6     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz