Delphi-PRAXiS
Seite 2 von 6     12 34     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)

himitsu 26. Aug 2012 12:26

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1179937)
  1. Das Löchen von Elementen aus einer Liste funktioniert nur dann richtig, wenn man
    Delphi-Quellcode:
    for I:=<ende> downto <start> do
    verwendet.

Oder von <start> bis <ende> und dabei immer nur auf den kleinsten Index zugreift.

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.

Siehe meine Firemonkey-Hints. Da hab ich dieses auch endlich selber mal verwendet. Dort speichere ich mir ja in Variablen Zeiger auf die beteiligten Objekte. Um diese Variablen "sauber" zu halten und keine "tote" Verlinktungen zu erhalten, hab ich meine Ojekte ebenfalls entsprechend registriert und räume bei Benachrichtigung dann entsprechend meine Variablen auf.


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.

mkinzler 26. Aug 2012 12:27

AW: TObjectList sehr anfällig?
 
Zitat:

Oder von <start> bis <ende> und dabei immer nur auf den kleinsten Index zugreift.
Geht aber auch nur bei bedingungslosem Löschen

himitsu 26. Aug 2012 12:34

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von mkinzler (Beitrag 1179944)
Zitat:

Oder von <start> bis <ende> und dabei immer nur auf den kleinsten Index zugreift.
Geht aber auch nur bei bedingungslosem Löschen

Gut, man kann den Index ja auch hochzählen, entsprechend der Bedingung. :angle2:

Nja, rückwärtslöschen ist einfacher, aber manchmal kommt es auf die Reihenfolge drauf an, wierum gelöscht wird.

EWeiss 26. Aug 2012 12:55

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1179937)
Ein paar Dinge gleich nach dem ersten Duchsehen:
  1. Der Index in TObjectList ist 0-basiert, TClsButtonInfo.Num fängt aber bei 1 an.
  2. Das Löchen von Elementen aus einer Liste funktioniert nur dann richtig, wenn man
    Delphi-Quellcode:
    for I:=<ende> downto <start> do
    verwendet.

Ja ich weiss deshalb sagte ich auch in einem der Beiträge das ich den ersten Button nicht in die ObjectList eingetragen habe.
Es scheint so das die ObjectListe damit nicht klar kommt wenn du sagst das ich unbedingt mit 0 anfangen muss.

Es dürfte klar sein das wenn man Button zu einem Fenster zur Laufzeit addiert dann muss zumindest 1 vorhanden sein der auch nicht gelöscht werden darf.
Dieser repräsentiert den Index 0;

Ich habe versucht bei 0 anzufangen in dem ich einfach

Delphi-Quellcode:
FSelButton := (FColButtons.Items[Btn -1]) as TClsButtonInfo;

Btn -1 zugewiesen habe..

Aber auch das habe ich schon angemerkt dann meldet er mir das der ListIndex Maximum(0) überschritten wäre.
Fange ich bei eins an meckert er das ListIndex Maximum(1) überschritten ist.

Da hab ich noch was zu tun ;)

Zitat:

1.Das Löchen von Elementen aus einer Liste funktioniert nur dann richtig, wenn man for I:=<ende> downto <start> do verwendet.
Müßte ich dann noch ändern.
In der Collection VB seite spielte das keine rolle.

Danke für die überprüfung.

gruss

EWeiss 26. Aug 2012 13:48

AW: TObjectList sehr anfällig?
 
Das addieren geht jetzt grundsätzlich schon mal
Muss jetzt nur noch das problem mit dem entfernen Korrigieren.

Hab da mit der Liste noch nicht den richtigen ansatz gefunden.
Habe da mal temporär die Indexes der Button als Caption addiert.

gruss

Sir Rufo 26. Aug 2012 14:01

AW: TObjectList sehr anfällig?
 
Wäre es nicht näher dran, wenn du statt TObjectList eine eigene Delphi-Referenz durchsuchenTCollection nehmen würdest?

EWeiss 26. Aug 2012 14:18

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1179955)
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.

TObjectList
Delphi-Quellcode:
  FColButtons.Add(oButton);
  FColButtons.Insert(oButton.Num, oButton);
TCollection:
Delphi-Quellcode:
function Add:

Wie soll ich hier die Classe TClsButtonInfo übergeben?

Die ObjektList kam der Collection von VB am nächsten.

gruss

Uwe Raabe 26. Aug 2012 14:45

AW: TObjectList sehr anfällig?
 
Zitat:

Zitat von EWeiss (Beitrag 1179957)
Zitat:

Zitat von Sir Rufo (Beitrag 1179955)
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.

EWeiss 26. Aug 2012 15:02

AW: TObjectList sehr anfällig?
 
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

EWeiss 26. Aug 2012 21:18

AW: TObjectList sehr anfällig?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Seite 2 von 6     12 34     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