Delphi - chemin d'accès de style elliptique (get path ellipsis)

Description

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).

Codes Sources

A voir également

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.