Comment tronquer un chemin d'accès de fichier trop long en une expression elliptique.
Naturellement, la fonction peut être surchargée pour accepter d'autres contrôles qu'une zone de texte (TEdit).
Pour tronquer une chaîne de caractères trop longue et ajouter des points de suspension, il vous faut simplement remplacer l'option DT_PATH_ELLIPSIS par DT_WORD_ELLIPSIS.
Source / Exemple :
function GetPathEllipsis(ASender: TEdit; APath: string): string;
{ Retourne une expression elliptique d'un emplacement de fichier }
var
PChr: PChar;
Rct: TRect;
begin
if Assigned(ASender) then
with TCanvas.Create do
try
Handle:=GetDC(ASender.Handle);
if (Handle<>0) and (APath<>EmptyStr) and (ASender.ClientWidth>0) then begin
// Un simple transtypage peut générer une erreur mémoire (chaîne AZT modifiée)
PChr:=StrAlloc(Length(APath) + 5);
StrPCopy(PChr, APath);
Rct:=ASender.ClientRect;
// Réserver 2 pixels aux marges gauche et droite
Rct.Right:=Rct.Right-2;
Font:=ASender.Font;
if (DrawText(Handle, PChr, Length(Apath), Rct, DT_MODIFYSTRING Or DT_SINGLELINE or DT_PATH_ELLIPSIS)>0) then
Result:=PChr;
StrDispose(PChr);
end;
finally
if (handle<>0) then
ReleaseDC(ASender.Handle, Handle);
Free;
end;
end;
Conclusion :
Voir le projet en demo (comparaison des méthodes DrawText et MinimizeName).
Nota bene : rappelez-vous qu'une chaîne AZT modifiée par une API ne doit pas être créée par simple transtypage (PChar).
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.