Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi WinAPI Funktion GetShortPathName (https://www.delphipraxis.net/84658-winapi-funktion-getshortpathname.html)

PeterKiers 19. Jan 2007 16:12


WinAPI Funktion GetShortPathName
 
Hallo!
hab mal Folgende Frage

Mit dieser Funktion können Lange Pfade in kurtze umgewandelt werden:

Code:
uses
  Windows, SysUtils;

function GetShortName(sLongName: string): string;
var
  sShortName:   string;
  nShortNameLen: Integer;
begin
  SetLength(sShortName, MAX_PATH);
  nShortNameLen := GetShortPathName(PChar(sLongName), PChar(sShortName), MAX_PATH - 1);
  if (0 = nShortNameLen) then
  begin
    // handle errors...
  end;
  SetLength(sShortName, nShortNameLen);
  Result := sShortName;
end;

// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := GetShortName('C:\Program Files\Delphi6\Lib\test.cnt');
  // --> C:\PROGRA~1\Delphi6\Lib\test.cnt
end;
meinen code:

Code:

function GetShortName(sLongName: string): string;
var
  sShortName:   string;
  nShortNameLen: Integer;
begin
  SetLength(sShortName, MAX_PATH);
  nShortNameLen := GetShortPathName(PChar(sLongName), PChar(sShortName), MAX_PATH - 1);
  if (0 = nShortNameLen) then
  begin
    // handle errors...
  end;
  SetLength(sShortName, nShortNameLen);
  Result := sShortName;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := GetShortName(Edit1.Text);
end;

Es funktioniert nicht. Was mach ich falsch?

Hoffe ihr könnt mir helfen und danke schonmal im Voraus.

Peter kiers

sirius 19. Jan 2007 16:34

Re: WinAPI Funktion GetShortPathName
 
Funktioniert doch.
Ist die Frage was du bei edit1.text drinn hast. Ich hab edit1 so gefüllt:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var d:TOpendialog;
begin
  d:=TOpendialog.Create(self);
  d.Execute;
  edit1.Text:=d.FileName;
  d.free;
end;

himitsu 19. Jan 2007 16:45

Re: WinAPI Funktion GetShortPathName
 
Existiert die Datei auch?

Und eventuell gibt es auch Probleme mit relativen Pfaden.

PeterKiers 19. Jan 2007 16:58

Re: WinAPI Funktion GetShortPathName
 
Code:
procedure TForm1.Button1Click(Sender: TObject);
var d:TOpendialog;
begin
  d:=TOpendialog.Create(self);
  d.Execute;
  caption := d.FileName;
  d.free;
end;
Bei Caption:

C:\Documents and Settings\HP_Eigenaar\Bureaublad\Test.doc

Dass ist doch nich kurtz!

Peter

himitsu 19. Jan 2007 17:01

Re: WinAPI Funktion GetShortPathName
 
Nee, isses nich :angel:

dann solltest du dir wohl mal den Fehlercode anzeigen lassen, welchen GetShortPathName zurückgibt.

Hier im Forum suchenGetLastError

PeterKiers 19. Jan 2007 17:04

Re: WinAPI Funktion GetShortPathName
 
Ich habe es schon

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var d:TOpendialog;
begin
  d:=TOpendialog.Create(self);
  d.Execute;
  Caption := GetShortName(d.FileName);
  d.free;
end;
Danke fur die Hilfe.

Peter Kiers

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

MrKnogge 19. Jan 2007 17:15

Re: WinAPI Funktion GetShortPathName
 
Hi,
ich würde d.Execute nicht einfach so aufrufen, besser wäre:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  d: TOpendialog;
begin
  d := TOpendialog.Create(self);
  try
    if d.Execute then
      Caption := GetShortName(d.FileName);
  finally
    d.free;
  end;
end;
Gruß

PeterKiers 19. Jan 2007 17:29

Re: WinAPI Funktion GetShortPathName
 
Danke viel mals.

peter Kiers

sirius 20. Jan 2007 10:25

Re: WinAPI Funktion GetShortPathName
 
Zitat:

Zitat von MrKnogge
Hi,
ich würde d.Execute nicht einfach so aufrufen, besser wäre:

Natürlich nicht, das war ja auch nur mal schnell zum testen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.

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