Einzelnen Beitrag anzeigen

Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?

  Alt 4. Mai 2014, 16:28
Vielen Dank, Sir Rufo.

Ich hatte gesucht, aber nicht die richtigen Suchbegriffe gefunden. Hast du sowas im Kopf?

Der Link hat mir sehr weitergeholfen, aber bei ShGetFileInfo() bin ich natürlich auch auf die beiden dort ungelösten Probleme gestoßen, nämlich dass die Funktion nicht den vollen Pfad, sondern nur das letzte Verzeichnis zurückgibt, und dass es keinen Weg zurück gibt (deutsch -> englisch).

Das erste Problem habe ich gelöst, indem ich jedes einzelne Teilverzeichnis des Pfades durch die Funktion jage:
Delphi-Quellcode:
uses ShellApi;

function ErmittleDtVerznamen(Verzname:string):string;
var FileInfo: SHFILEINFO; p1,p2:integer; Verz,Teilverz:string;
const Tz = '\';
begin
  Result := '';
  If DirectoryExists(Verzname) then begin
    Verz := IncludeTrailingBackSlash(Verzname);
    Result := Copy(Verzname,1,3);
    p1 := 3;
    p2 := PosEx(Tz,Verz,p1 + 1);
    While p2 > 0 do begin
      Teilverz := IncludeTrailingBackSlash(Copy(Verz,1,p2 - 1));
      If SHGetFileInfo(PChar(Teilverz), 0, FileInfo,SizeOf(FileInfo),SHGFI_DISPLAYNAME) <> 0
        then Result := Result + IncludeTrailingBackSlash(FileInfo.szDisplayName)
        else exit;
      p1 := p2 + 1;
      p2 := PosEx(Tz,Verz,p1 + 1);
    end;
  end;
end;
Da wird unseren Experten noch einiges an Verbesserungspotenzial einfallen , aber es funktioniert und vielleicht hilft es ja jemandem.

Das zweite Problem habe ich nur proprietär gelöst, indem ich eine Liste aller eingedeutschten Namen anlege, was unter meinen Gegebenheiten lückenlos möglich ist.

Geändert von Benmik ( 4. Mai 2014 um 19:10 Uhr)
  Mit Zitat antworten Zitat