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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#1

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 14:45
Wäre es nicht näher dran, wenn du statt TObjectList eine eigene Delphi-Referenz durchsuchenTCollection nehmen würdest?
Eigentlch schon kam da aber nicht mit klar.

Beispiel:
Bei Add.
Da kann man ja nicht groß was übergeben.
Eine Collection enthält immer nur Einträge, die von CollectionItem abgeleitet sind. Solange dies nicht für TClsButtonInfo zutrifft (aktuell tut es das nicht), ist eine Collection eher eine zusätzliche Zwischenstufe. Wenn du nicht auf eine generische Liste oder gar auf Dictionary umsteigen willst, ist TObjectList auch ganz OK.

Vieles an deinem Code ist offensichtlich aus dem VB Programm übernommen - insofern würde man viele Dinge heute in Delphi von vornherein anders machen. Die implizite Verbindung von TClsButtonInfo.Num zum Index in FColButtons (ob nun -1 oder nicht) bringt m.E. einen überflüssigen Overhead in die Implementation. Ich vermute dort die meisten Macken.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 15:02
Zitat:
Vieles an deinem Code ist offensichtlich aus dem VB Programm übernommen
Ja ich wollte nicht das komplette Projekt neu erfinden.
Denke auch wenn ich das heute direkt in Delphi also neu schreiben würde sähe es auch etwas anders aus.
Das wäre mir aber dann doch zuviel des guten zumal da ich es schon einmal geschrieben habe.

Zitat:
dem VB Programm übernommen
aus meinem VB Programm.

Das mit dem addieren funktioniert jetzt ohne Probleme wie am am Shot erkennen kann.
Das entfernen werde ich dann auch noch schaffen.

Der vorteil an der ProgBar Klasse ist halt das ich die nur einmal erstellen muss
diese wird ja dann von zwei Unterschiedlichen Programmen verwendet.
Genauso wie die Klasse ButtonInfo da hab ich mir schon einiges an Arbeit gespart.

Das hier ist ja nur das Konfigurations Programm für die Button
Das eigentliche Programm ProgStart startet dann die Programme für die von ProgBar erstellten ToolBars.
Der sinn und zweck des programms war Hauptsächlich den Desktop sauber zu halten und Programme zu steuern die früher
keine eigene ToolBars enthielten so wie NotePad.

Aber grundsätzlich ist es schon richtig das man so ein Projekt eigentlich komplett neu aufsetzen sollte.
Aber wie schon gesagt zu viel des guten.

gruss

Geändert von EWeiss (26. Aug 2012 um 21:12 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 21:18
oops .. vergessen zu Antworten

Zitat:
Tja, die Collection in Delphi registriert sich bei ihren enthaltenen TComponents und auch andersrum.
Sobald einer er Beteiligten freigegeben wird, wird die aufgebaute Verknüpfung aufgelöst und die Komponenten aus der Liste ausgetragen.
Soweit man TComponente verwendet.

Zitat:
Wer es nicht schafft seine Verlinkungen sauberzuhalten und eindeutige Besitzverhältnisse sichzustellen (nur Einer darf etwas freigeben ... halt das Highlander-Prinzip "Es kann nur Einen geben") oder es so zu regeln, daß sich alle beteiligten Verantwortlichen untereinander informieren, der sollte besser auf Interfaces umsteigen oder auf andere Managed-Systeme.
Gebe ich dir im grunde recht. (Siehe Interface meiner LIB)
Aber es geht um Nonvcl da zählen einige deiner guten Ratschläge leider nicht.
Ansonsten würde ich sie verwenden.. kannst mir glauben

gruss

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

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#4

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.491 Beiträge
 
Delphi 12 Athens
 
#5

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
 
#6

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
 
#7

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
Antwort Antwort


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 14:36 Uhr.
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