![]() |
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 ? |
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; |
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 :) |
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. |
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:
|
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. |
Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
Zitat:
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. |
Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
Zitat:
Zitat:
Zitat:
Nur, ich muss halt selber ran. ;) |
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 ;-)
|
Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
Zitat:
|
Re: Pathname kürtzen ohne MinimizeName aus Unit FileCtrl
Zitat:
Delphi-Quellcode:
// EDIT:
function MinimizeName(const Filename: string; DC: HDC; MaxLen: Integer): string;
var b: array [0..MAX_PATH] of Char; R: TRect; TextSize: TSize; begin StrCopy(b, PChar(Filename)); GetTextExtentPoint32(DC, PChar(FileName), Length(FileName), TextSize); R := Rect(0, 0, MaxLen, TextSize.cy); if DrawText(DC, 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; Wobei man für die Höhe ggf. wie im Beispiel auch nur etwas Kurzes statt des gesamten Dateinamens als schnelleren Ersatz nehmen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz