Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   OpenDirDialog (https://www.delphipraxis.net/96316-opendirdialog.html)

Garfield 30. Jan 2008 15:56

Re: OpenDirDialog
 
Ohne Edit kannst Du es machen wie Luckie meinte:
Zitat:

Zitat von Luckie
Mit ShBrowseForFolder und BrowseInfo kann man doch genau das gleiche erreichen, wenn ich ich nicht irre. :gruebel:

Oder Du baust Dir noch eine Dateiliste dazu. Zum Beispiel mit FileListBox.

Jufis 31. Jan 2008 06:57

Re: OpenDirDialog
 
OK, danke fürs erste! Ich werde mich weiter rantasten. :lol:

MfG

Jufis

FAlter 12. Aug 2008 19:02

Re: OpenDirDialog
 
Hi,

Delphi-Quellcode:
Procedure TOpenDirDialog.OpenDirDlgResize(Sender: TObject);
var
  Oben : Integer;
  Unten : Integer;
begin
  if OpenDirDlg.Visible
  then begin
...
    Bu_NewFolder.SetBounds(FWidth - 101, FHeight - 31, 95, 25); // <--- !!! Da krachts, wenn es keinen Bu_NewFolder gibt!
  end;
end;
Die AV sollte noch weg.

Mfg
FAlter

Garfield 15. Aug 2008 21:59

Re: OpenDirDialog
 
Zitat:

Zitat von FAlter
Die AV sollte noch weg.

Vielen Dank. Ist jetzt weg.

Garfield 11. Sep 2008 18:40

Re: OpenDirDialog
 
Mit D2009 sieht der OpenDirDialog schon erheblich besser aus.

Unter TurboDelphi war mir aufgefallen, dass das Ereignis ST_OrdnerChange nicht eingebunden war. Ausserdem wird das Property OnCreate nicht benötigt und aus der Liste der verbotenen Keys habe ich den : herausgenommen, weil sonst immer das Laufwerk angeklickt werden muss, wenn man den Pfad im Edit eingeben will.

Für D2009 konnten die Komponente TWideLabel entfernt und die Deklarationen WideString in String geändert werden. Ausserdem scheint sich DirectoryExists geändert zu haben, da zum Beispiel die Prüfung von 'd:' true ergibt. Im EditKeyPress wird nun die Function CharInSet verwendet, welche in TurboDelphi 2006 noch nicht enthalten ist.

Die Demo ist mit der Trial von D2009 Architect kompiliert und dürfte wohl nur 14 Tage ab Installation ausführbar sein!? In den Edits der Demo wurden bei mir die Unicodezeichen nicht korrekt angezeigt.

Garfield 11. Apr 2010 19:05

Re: OpenDirDialog
 
11.04.2010 - Build 10
  • Unit ShellCtrls mit TShellTreeView gegen Unit uPathExplorer mit TPathExplorer ausgetauscht.
  • Die Property FInitialDir und FPath auf WideString geändert.
  • Function DirExists für Namen in Widestring eingefügt und DirectoryExists entfernt.
  • Function DeleteDirectory in DirDelete umbenannt und für Widestring geändert.
  • ExtractFileDrive aus Unit SysUtils als ExtractDrive übernommen, auf Widestrings geändert und abschließenden Pathdelim hinzugefügt.
  • TRootFolder und nFolder aus der Unit ShellCtrls übernommen, damit die Verzeichnisnamen nicht geändert werden müssen.
  • FRoot wird nicht als String sondern CSIDL angegeben.
  • OpenDirDlg: TreeKeyDown um Einfg ergänzt.
  • NewFolder: TLabel in TWideLabel geändert.
  • NewFolder: NewFolderKeyDown eingefügt.
  • Existiert der im Edit eingetragene Ordner, wird er aufgeschlagen.
  • Nicht existierende Ordner werden im Edit rot angezeigt.

Für Delphi 7 und Turbo Delphi werden die TNT Hack Controls verwendet. Das sollte kein Problem sein, da der Widestring sonst auch irgendwie angezeigt werden muss. Die falsche Anzeige der Widestrings in der Demo mit D2009 lag an der eingestellten Schrift MS San Serif. Mit Tahoma funcktioniert es richtig.

Jetzt müsste das ganze am besten in nonVCL überführt werden. :gruebel:

Garfield 17. Apr 2010 14:59

Re: OpenDirDialog
 
Zwei Versionen für Delphi mit und ohne unicodefähige Komponenten waren mir zuviel. Auch die Verwendung von zwei Units. Deshalb:

17.04.2010 - Build 11
  • Auswertung der Compilerdirektive Unicode zum Laden der Unit TntHackStdCtrls.
  • Wegen der Verwendung der Unit TntHackStdCtrls wird das TWideLabel nicht mehr benötigt und wurde deshalb entfernt.
  • Komponente PathExplorer integriert um zweite Unit einzusparen.
Die ersten Schritte mit nonVCL habe ich nun mit Hilfe von Luckies Tutorial auch schon gemacht.

Garfield 3. Mai 2010 20:09

Re: OpenDirDialog
 
So ganz war es doch noch nicht auf WideStrings umgestellt. Wenn ein Verzeichnis WideChars enthielt, wollte der NewFolder-Dialog nicht. Ebenso war es dann mit dem Erstellen des Unterordners weil ForceDirectories nur Ansi verwendet. Ausserdem hatte ich beim Vergleichen der Strings beim Setzen des InitialDir übersehen, das LowerCase auch nur Ansi ist.

03.05.2010 - Build 12
  • function ExtractDir eingefügt.
  • function ForceDirectoryW eingefügt.
  • ForceDirectories durch ForceDirectoryW ersetzt.
  • Beim NewFolder Dialog war die Variable für den Pfad noch als String deklariert.
  • Beim Setzen des InitialDir wurde LowerCase anstelle von WideLowerCase verwendet.
ForceDirectoryW basiert auf ForceDirectories.

Wie ich gesehen habe, scheint das wiederholte Einlesen nach dem Löschen auch nicht so zu funktionieren, wie es soll. Da müsste noch ein Refresh wie F5 im Explorer rein.

Garfield 4. Mai 2010 13:30

Re: OpenDirDialog
 
Beim Rescan wurden die existierenden Ordner in die Liste hinzugefügt. So erhöhte sich die Anzahl bei jedem Einfügen oder Löschen eines Ordners. Hier die Liste der Änderungen:

04.05.2010 - Build 13
  • Option odPerformCreate entfernt. Funktionierte mit dem PathExplorer nicht mehr, da nicht der Text aus dem Edit sondern der Folder aus dem PathExplorer verwendet wurde.
  • Ist die Option odCaption nicht gesetzt, wird die Caption der MainForm verwendet.
  • Das Einfügen und Löschen über "Einf" und "Entf" ist nur noch möglich, wenn die Option "odNewFolder" gesetzt ist.
  • Beim ReScan wurden die gefundenen Einträge nur hinzugefügt. Jetzt werden erst die besehenden Einträge gelöscht.
  • Mit F5 wird der markierte Ordner aktualisiert.
  • Variable OpenDirDlg_Build für die Versionsabfrage eingefügt.
Die Option odPerformCreate habe ich mit der Einfügung des PathExplorers kaputt gemacht und nun entfernt. Ich überlege allerdings, ob sie wieder rein sollte.

Garfield 15. Jul 2010 18:05

AW: OpenDirDialog
 
Vor kurzem wurde folgendes festgestellt: Wird in einem leeren Verzeichnis ein Unterverzeichnis angelegt, werden für das Unterverzeichnis zwei TreeNodes angelegt. Wird das letzte Unterverzeichnis gelöscht und ein neues angelegt, dann wird es nur einmal angezeigt. Ursache ist, dass beim leeren TreeNode die Eigenschaft Expanded den Wert False hat. Deshalb wird beim Expanding noch einmal EnumFolder ausgeführt. Eine echte Lösung habe ich nicht gefunden, nur einen Workaround:
Delphi-Quellcode:
{ Workaround Beginn }
ptvExplorer.ReScan;
ptvExplorer.SetFocus;
{ Workaround Ende }
ptvExplorer.ReScan;
Beim ersten ReScan wird das Unterverzeichnis zweimal eingetragen. Beim SetFokus wird Expanded aktualisiert und beim zweiten ReScan werden die Unterverzeichnisse gelöscht und der Unterordner nur einmal eingetragen.

Ausserdem habe ich die Aktualisierung nach dem Löschen und nach F5 ein wenig geändert

15.07.2010 - Build 14
  • Nach dem Löschen eines Ordners wird auch der übergeordnete neu gescannt.
  • Beim Aktualisieren per F5 wird auch der übergeordnete Ordner neu gescannt.
  • Workaround dafür, dass bei sofortiger Erstellung des ersten dieser zweimal angezeigt wird.
  • Button beim Formular für den Namen des neuen Ordners auf normale Größe gesetzt und Formularhöhe angepasst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 4 von 6   « Erste     234 56      

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