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
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#21

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 23:06
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 08:58
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#23

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 09:06
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

Geändert von EWeiss (27. Aug 2012 um 10:03 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#24

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 10:04
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 10:10
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#26

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 10:34
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

Geändert von EWeiss (27. Aug 2012 um 10:46 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#27

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 10:51
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;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 10:52
Darf ich mal ganz doof fragen, was Btn eigentlich ist bzw. welchen Zweck sie erfüllen soll?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#29

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 11:10
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: TObjectList sehr anfällig?

  Alt 27. Aug 2012, 12:49
Also wenn das eine Instanz ist, könntest Du mit IndexOf(Btn) den Index erfragen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 19:15 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