Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit dem Freigeben von TabSheets (https://www.delphipraxis.net/47454-probleme-mit-dem-freigeben-von-tabsheets.html)

r2c2 15. Jun 2005 09:13

Re: Probleme mit dem Freigeben von TabSheets
 
Zitat:

Zitat von marabu
Hallo Christian,

deine Groups property hast du als read-only festgelegt, instanziierst immer fleißig neu und gibst nie frei. Ich fürchte da sind noch andere Schwachstellen.

Grüße vom marabu

Hm, ich glaub da hast du Recht. :oops: Ich produzier da Scheicherlöcher ohne Ende und merks nicht. :oops:
Wie blöd kann man nur sein?!

Ich bin Momentan in der Schule, kann also nicht an mein Prog. Heute Mittag werd ich aber alles nochmal prüfen und diverse Fehler verbessern.

mfg

Christian

r2c2 15. Jun 2005 17:38

Re: Probleme mit dem Freigeben von TabSheets
 
Ich hab mir das mit den Speicherlöchern mal angeguckt. Waren doch keine drin(glaub/hoff ich zumindest):

1. Groups is read-only, weil nie schreibend darauf zugegriffen wird. Groups ermittelt nur die Ordnernamen und somit die "Gruppen"
2. beim instanzieren wird den TabSheets und ShellListViews parent zugewiesen, somit gibts
3. auch keine Probleme mit dem freigeben, weil das PageControl das erledigt.

Weitere Schwachstellen hab ich nicht gefunden.

Zum eigentlichen Problem: Ich hab noch was herausgefunden:
Wenn ich den Ordner gelöscht hab, bleibt er noch ewig lange bestehen(bis zur Exception). Allerdings, wenn ich ihn zwischendurch mit dem Explorer löschen will, bekomme ich "Zugriff verweigert". Das könnte(auch wenn ich mir nicht denken kann wie) die Problemquelle sein, nur warum is der ordner noch da? der sollte doch eigentlich nach RemoveDir weg sein...? :gruebel:

mfg

Christian

marabu 15. Jun 2005 18:31

Re: Probleme mit dem Freigeben von TabSheets
 
Schau nochmal genauer:

Delphi-Quellcode:
function TGroups.GetGroups: TStrings;
...
begin
  ...
  Result := TStringList.Create;
  ...
end;

procedure TGroups.CreateGroups;
...
begin
  ...
  for i := 0 to GetGroups.Count - 1 do
    CreateTab(Groups[i]);
end;
Abgesehen von diesem Problem rate ich dir zu einer Abstraktions-Ebene für deine Abbildung Gruppe-nach-Ordner. Es ist einfach zu verwirrend, wenn du an unterschiedlichen Stellen immer versuchst die TabSheets mit den Ordnern im Verzeichnis zu synchronisieren. Kapsel die Ordnerzugriffe so, dass sie für die Gruppen-Aktionen transparent sind und teste das getrennt aus.

marabu

r2c2 16. Jun 2005 20:10

Re: Probleme mit dem Freigeben von TabSheets
 
Zitat:

Zitat von marabu
Abgesehen von diesem Problem rate ich dir zu einer Abstraktions-Ebene für deine Abbildung Gruppe-nach-Ordner. Es ist einfach zu verwirrend, wenn du an unterschiedlichen Stellen immer versuchst die TabSheets mit den Ordnern im Verzeichnis zu synchronisieren. Kapsel die Ordnerzugriffe so, dass sie für die Gruppen-Aktionen transparent sind und teste das getrennt aus.

Hm...
Jetzt fragt sich nur: wie? Ich greife mehrmals auf die Ordner zu:
- beim Start zum ermitteln der Gruppen: GetGroups
- beim Erstellen einer Gruppe: NewGroup
- beim Umbenennen einer Gruppe: RenameGroup
- beim Löschen der Gruppe: DeleteGroup

Dabei sind die Gruppen in den Ordnern "gespeichert" und werden durch die TabSheets angezeigt. Du meinst also, ich sollte ne neue Klasse TSyncDir oder sowas erstellen, die die Ordner in den genannten Fällen syncronisiert.

Dann hätte ich jeweils nur den Aufruf SyncDirs und nicht mehr DeleteDir, RenameDir, ForceDirectories...

Man bekommt also im Quelltext nur mit, dass die Ordner syncronisiert werden, wie das passiert nicht. Ob das übersichtlicher wird... :gruebel:

Ich glaub ich hab den Sinn da noch nicht ganz erfasst, oder hab ich dich nur falsch verstanden? :gruebel:

mfg

Christian

r2c2 16. Jun 2005 20:26

Re: Probleme mit dem Freigeben von TabSheets
 
Ich hab ne funktionierende Lösung *freu*. :P
Allerdings würde ich das nicht unbedingt "schön" nennen.

Ich hab ne StringList FDirsToDel eingeführt. In DeleteGroup wird dann der zu löschende Ordner eingetragen und im Destuctor dann wirklich gelöscht. Damit kommts nicht mehr zur AV.

Jetzt stellt sich nur die Frage: Geht das nicht besser? Und vor allem: Warum "dauert" das Löschen so lange. Darin sehe ich nämlich momentan das eigentliche Problem. Ich bekomme "Zugriff verweigert"(auch wenn ich nicht weiß, wo ich denn nochmal auf den Ordner zugreife) und das führt zur AV.

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Seite 2 von 2     12   

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