AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pfadangaben verkürzen

Ein Thema von Matze · begonnen am 3. Mai 2004
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Pfadangaben verkürzen

  Alt 3. Mai 2004, 10:34


Hier ist eine Unit, die es ermöglicht, längere Pfadangaben zu verkürzen, indem sie die Pfade mit ... darstellt.

Dies ist ganz nützlich, wenn man ein relativ kleines Formular hat und doch Pfadangaben übersichtlich darstellen möchte.


Diese Unit hat Luckie in diesem Thread gepostet.


Delphi-Quellcode:
{******************************************************************************}
{                                                                              }
{                        Delphi-Unit DotPath V1.0                              }
{                                                                              }
{                    Copyright (c) 2001 Michael Puff                           }
{                           [url]www.luckie.de.vu[/url]                                   }
{                      [email]michaelpuff74@compuserve.de[/email]                             }
{                                                                              }
{******************************************************************************}

{ What it does...
  Diese Unit verkürzt einen lange Dateipfad zu einem kurzen mit Pünktchen,
  wobei man die Anzahl der Backslashes angeben kann die von vorne bzw. von hinten
  angezeigt werden sollen

  Beispiel:
  macht aus:
  E:\Michael\eigene Dateien\Programmierung\Delphi\Programme\VCL\in Bearbeitung\MichaelsMusikDB02.zip
  mit den Einstellungen 2 Backslashes von vorne und 2 von hinten das:
  E:\Michael\...\in Bearbeitung\MichaelsMusikDB02.zip

  How to use this garbage of code...
  Einfach die Unit in die Uses-Klausel aufnehmen und
  DotPath.ShortPath(Path, 2, 2);
  ergibt obiges Ergebnis, wenn Path der oben genannte Beispiel-Pfad ist
}




unit DotPath;

interface
  function ShortPath(Path: String; NumSlashesBegin, NumSlashesEnd: Byte): String;
  function CountBackSlashes(Path: String): Integer;


implementation

uses windows;

{ für so ein bißchen keine SysUtils }
function ExtractFileName(const FileName: string): string;
var
   RPos: Integer;
begin
   RPos := Length(FileName);
   while not (FileName[RPos] in ['\', ':']) and (RPos > 0) do
      Dec(RPos);
   Result := Copy(FileName, RPos + 1, MaxInt);
end;

function ExtractFilePath(const FileName: string): string;
var
   RPos: Integer;
begin
   RPos := Length(FileName);
   while not (FileName[RPos] in ['\', ':']) and (RPos > 0) do
      Dec(RPos);
   Result := Copy(FileName, 0, RPos + 1);
end;

function CountBackSlashes(Path: String): Integer;
var
  i: byte;
  cBackSlash: Byte; { Anzahl der BackSlashes }
begin
  { Anzahl der BackSlashes ermitteln }
  cBackSlash := 0;
  for i := 1 to length(Path) do
  begin
    if Path[i] = '\then
      Inc(cBackSlash);
  end;
  result := cBackSlash;
end;

function ShortPath(Path: String; NumSlashesBegin, NumSlashesEnd: Byte): String;
{ Path: na was wohl ;))
{ NumSlashes: Anzal der "\"-Dinger, die angezeigt werde sollen bevor die
  Pünktchens kommen }

var
  i, j: byte;
  aBackSlash: array of Byte; { Array für die BackSlashes und deren Position }
  ShortPath: String; { gekürzter Pfad }
  Temp: String;
  FileName: String;
begin
  { Nur mal kucken, ob da keiner Blödsinn eingibt }
  if (NumSlashesBegin > CountBackSlashes(Path)) or
    (NumSlashesEnd > CountBackSlashes(Path))then
  begin
    result := Path;
    exit;
  end;
  if (NumSlashesEnd > CountBackSlashes(Path)) or
    (NumSlashesEnd > CountBackSlashes(Path))then
  begin
    result := Path;
    exit;
  end;

  { Eingaben korrigieren }
  if CountBackSlashes(Path) <= 3 then
  begin
    result := Path;
    exit;
  end;
  if NumSlashesBegin = 0 then NumSlashesBegin := 1;
  if NumSlashesEnd = 0 then NumSlashesEnd := 1;

  { Größe des BackSlash-Arrays setzen }
  SetLength(aBackSlash, CountBackSlashes(Path));
  
  { BackSlash-Array mit den Positionen der BackSlashes füllen }
  j := 0;
  for i := 0 to length(Path) do
  begin
    if Path[i] = '\then
    begin
      aBackSlash[j] := i;
      Inc(j);
    end;
  end;

  ShortPath := copy(Path, 0, aBackSlash[NumSlashesBegin-1]-1);
  Temp := copy(Path, abackSlash[CountBackSlashes(Path)-NumSlashesEnd],
    length(ExtractFilePath(Path)));
  FileName := ExtractFileName(Path);
  
  result := ShortPath + '\...' + Temp;
end;

end.
Luckie sagt noch folgendes dazu:
Zitat von Luckie:
Dazu will ich noch was sagen.

Erstens: Es ist noch eine Jugendsünde von mir. Zu dem Zeitpunkt habe ich gerade erst ernsthaft begonnen mit Delphi zu programmieren.

Zweitens: Es musste schnell gehen, da ich so was brauchte.

Drittens: Borland stellt in einer Unit, ich weiß nie ob SysUtils oder FileCtrl eine Funktion bereit die wie der Flag DT_PAHTELLIPSES der GDI-Funktion DrawText arbeitet. Diese implementation fand ich schon immer etwas unglücklich, da sie einen immer etwas im Stich läßt. Sie macht aus
Zitat:
E:\Michael\eigene Dateien\Programmierung\Delphi\Programme\VCL\in Bearbeitung\MichaelsMusikDB02.zip
zum Beispiel
Zitat:
E:\Michael\eigene Dateien\...\MichaelsMusikDB02.zip
Das heißt spätenstens wenn man im Verzeichnis "eigene Dateien" ist, ist man verloren. Der Nachteil, bzw. der Unterschied, meiner Funktion ist, dass man nicht angeben kann wie lang der String in Pixeln maximal werden darf, sondern man gibt die gewünschten Backslashes an, die man noch sehen will. Man sollte also von Fall zu Fall entscheiden, welche Funktion man am besten nutzt.
[edit=Chakotay1308]Fertig für die CodeLib gemacht. Mfg, Chakotay1308[/edit]
  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 11:33 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