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 2 von 6     12 34     Letzte »    
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#11

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 13:26
  1. Das Löchen von Elementen aus einer Liste funktioniert nur dann richtig, wenn man 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2012 um 13:32 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 13:27
Zitat:
Oder von <start> bis <ende> und dabei immer nur auf den kleinsten Index zugreift.
Geht aber auch nur bei bedingungslosem Löschen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#13

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 13:34
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.

Nja, rückwärtslöschen ist einfacher, aber manchmal kommt es auf die Reihenfolge drauf an, wierum gelöscht wird.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 13:55
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 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

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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 14:48
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

Geändert von EWeiss (27. Aug 2012 um 06:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 15:01
Wäre es nicht näher dran, wenn du statt TObjectList eine eigene Delphi-Referenz durchsuchenTCollection nehmen würdest?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 15:18
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:
function Add:
Wie soll ich hier die Classe TClsButtonInfo übergeben?

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

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 15: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
 
#19

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 16: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 22:12 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: TObjectList sehr anfällig?

  Alt 26. Aug 2012, 22: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 06:18 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     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 03:48 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