Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Pathname kürtzen ohne MinimizeName aus Unit FileCtrl (https://www.delphipraxis.net/138388-pathname-kuertzen-ohne-minimizename-aus-unit-filectrl.html)

turboPASCAL 9. Aug 2009 14:47


Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Hi,

gibt es eine Function in der Windows API oder Sysutils mit der man den
Pathnamen auf eine bestimmte Länge kürtzen kann, ohne auf die Funktion
MinimizeName aus der Unit FileCtrl zurückzugreifen ?

API 9. Aug 2009 15:44

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Delphi-Quellcode:
function MinimizeName(const Filename: string; Canvas: TCanvas; MaxLen: Integer): string;
var
  b: array [0..MAX_PATH] of Char;
  R: TRect;
begin
  StrCopy(b, PChar(Filename));
  R := Rect(0, 0, MaxLen, Canvas.TextHeight('Wq'));
  if DrawText(Canvas.Handle, b, Length(Filename), R,
    DT_SINGLELINE or DT_MODIFYSTRING or DT_PATH_ELLIPSIS or DT_CALCRECT or DT_NOPREFIX) > 0 then
    Result := b
  else
    Result := Filename;
end;

OldGrumpy 9. Aug 2009 15:46

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
MinimizeName entfernt einfach nur solange Unterverzeichnisse aus dem übergebenen Pfad (und ersetzt den ausgeschnittenen Teil schließlich durch "...") bis die Länge des Textes kleiner oder gleich der übergebenen Maximallänge ist. Das lässt sich in wenigen Zeilen Code auch selber schreiben sofern man unbedingt auf FileCtrl verzichten will.

Edit: OK, das ist natürlich noch eleganter :)

turboPASCAL 9. Aug 2009 16:38

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Wie MinimizeName funktioniert weis ich. Ich hoffte auf eine Windowsfunction oder eine Function aus der SysUtils...
Ich such mir schon einen Wolf...

MinimizeName möchte ich nicht nutzen da ich kein Canvas habe.

OldGrumpy 9. Aug 2009 16:42

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Wenn Du kein Canvas hast, woher weisst Du denn wieviel Platz Dir zur Verfügung steht? Du hättest ja von vorn herein diese ja nun nicht unwichtige "Nebenbedingung" erwähnen können :mrgreen:

himitsu 9. Aug 2009 16:45

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
wenn es um das Anzeigen auf der GUI geht, dann kann man in neueren Delphis es direkt im TLabel machen (die Ellipsis-Option sollte ja kaum zu übersehn sein)

und in TStatic könnte man auch in älteren Delphis einfach via SetWindowLong den passenden WindowStyle setzen und dieses macht es auch alleine.

jaenicke 9. Aug 2009 16:56

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Zitat:

Zitat von turboPASCAL
Ich hoffte auf eine Windowsfunction oder eine Function aus der SysUtils...
[..]
MinimizeName möchte ich nicht nutzen da ich kein Canvas habe.

Daraus schließe ich, dass du einen DC hast? Denn genau der wird ja von der API benutzt.

Dann ersetze den Parameter TCanvas einfach durch einen HDC und übergib den statt Canvas.Handle (den DC des TCanvas). Nur für die Höhe musst du noch schauen, ob du die setzen musst.

turboPASCAL 9. Aug 2009 17:19

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Zitat:

Zitat von OldGrumpy
Wenn Du kein Canvas hast, woher weisst Du denn wieviel Platz Dir zur Verfügung steht? Du hättest ja von vorn herein diese ja nun nicht unwichtige "Nebenbedingung" erwähnen können :mrgreen:

In der Tat. Dann wäre es aber nicht so spannend geworden.


Zitat:

Zitat von himitsu
Wenn es um das Anzeigen auf der GUI geht, dann kann man in neueren Delphis es direkt im TLabel machen (die Ellipsis-Option sollte ja kaum zu übersehn sein)
und in TStatic könnte man auch in älteren Delphis einfach via SetWindowLong den passenden WindowStyle setzen und dieses macht es auch alleine.

Es geht um das Kürtzen mit wenig Aufwand des Pathes für den Fenster Titel.


Zitat:

Zitat von jaenicke
Daraus schließe ich, dass du einen DC hast? Denn genau der wird ja von der API benutzt.
Dann ersetze den Parameter TCanvas einfach durch einen HDC und übergib den statt Canvas.Handle (den DC des TCanvas). Nur für die Höhe musst du noch schauen, ob du die setzen musst.

Ja, das ist kein Problem.
Nur, ich muss halt selber ran. ;)

Der.Kaktus 9. Aug 2009 17:23

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
schau mal auf die Seite von Lucki..da iss was..hatten wir die Woche schonmal son Thema ;-)

OldGrumpy 9. Aug 2009 17:30

Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
 
Zitat:

Zitat von turboPASCAL
In der Tat. Dann wäre es aber nicht so spannend geworden.

Ich bin doch kein Elektriker :mrgreen:


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

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