Pfadname fuer Ausgabe zu lang
-
Hallo Zusammen,
ich möchte einen Filnamen inkl. Laufwerk und Pfad in einem Label ausgeben. Der zur Verfügung stehende Platz ist aber in den meisten Fällen zu klein. Gibt es eine Funktion die die ersten Unterpfade in Punkte umwandelt so lange bis der Platz für den Text ausreicht oder muß ich das selber machen?Evi48
-
MinimizeName
Ich hab mir für solche Zwecke eine kleine Routine gebastelt, hier allerdings für nen TStaticText. Lässt sich aber sehr leicht an andere Gegebenheiten anpassenvoid TForm1::ShowFileName(AnsiString str, TStaticText *ST) { TCanvas *Canvas=new TCanvas(); Canvas->Handle=GetDC(ST->Handle); Canvas->Font->Assign(ST->Font); ST->Caption=MinimizeName(str, Canvas, ST->Width); ReleaseDC(ST->Handle, Canvas->Handle); delete Canvas; }
-
Ja das wollte ich gern umgehen weil es doch sicher so etwas schon fertig geben muß denn die Pfadnamen werden im BCB in Verzeichnisse/Bindungen auch auf eine solche Weise angegeben.
Evi48
-
Tja, alles müssen sie ja auch nicht vorkauen oder? (o; Spätestens seit meiner MSVC Zeit weiss ich: Nur weils in der Programmierumgebung verwendet wird, lieferts der SW-Hersteller noch lange nicht in der LIbrary mit.
-junix
-
Peter schrieb:
Ich hab mir für solche Zwecke eine kleine Routine gebastelt
Sei ehrlich, das hast du jetzt aus der FAQ abgeschrieben!?
evi48 schrieb:
die Pfadnamen werden im BCB in Verzeichnisse/Bindungen auch auf eine solche Weise angegeben
Falls du "Verzeichnisse/Bedingungen" in den Projektoptionen meinst, das kann ich nicht nachvollziehen. Soweit ich sehe werden dort die Pfadnamen nicht gekürzt sondern lediglich aus absoluten Pfaden relative gemacht.
Und das geschieht mit Sicherheit nicht über eine Methode oder Eigenschaft der dort verwendeten Edits, sondern (vermutlich) programmatisch beim Speichern des Projektes.
-
Sei ehrlich, das hast du jetzt aus der FAQ abgeschrieben!?
Hmm
, stimmt, wäre eine Möglichkeit gewesen. An die FAQ hatte ich garnicht gedacht da ich solche kleinen "Hilfsroutinen" auf meiner Platte sammle
-
..und das obwohl du selbst Autor des erwähnte beitrags warst... dzdz Peter du wirst alt... würdest du zum Forentreffen kommen, würde ich dich mal kräftig durchschütteln um das Hirn zu reanimieren. (o;
-junix
-
Hätte ja sein können, dass es ein fertiges Tool gibt. So schreibe ich selber eine Routine
Evi48
-
... dzdz Peter du wirst alt...
Stimmt, aber man ist ja grundsätzlich immer nur so alt wie man sich fühlt
Da ich der Autor des FAQ Beitrags war hatte ich mir damals gleich diese Routine fertig vorbereitet in ein "Beispielverzeichniss" gelegt damit später nicht wieder sie Sucherei los geht. Der erste Griff war somit nicht in die FAQ sondern auf meine Platte
-
Leider konnte ich nicht gleich mit meinem Problem fortfahren doch hier ist nun das Ergebnis:
void __fastcall THauptForm::getAufzFileName( TObject* Sender, TFile_Name FileName) { const int ciStrLaenge = 40; int ilaenge; AnsiString astrGesamt = FileName.FileName; AnsiString astrAusgabe = astrGesamt; // Den String aufteilen AnsiString astrFileName = ExtractFileName(astrGesamt); AnsiString astrPath = ExtractFilePath(astrGesamt); AnsiString astrRetten = ExtractFileDrive(astrGesamt) + "\\"; // Ist der String laenger als 40 Zeichen dann verkuerzen fuer die // Ausgabe if(astrGesamt.Length() > ciStrLaenge) { astrPath.Delete(1, astrPath.Pos("\\")); do { // Ersten Teilstring der Ausgabe erstellen astrAusgabe = astrRetten; // einen Pfadnamen durch Punkte ersetzen astrAusgabe += "..\\"; // Ist noch ein Backslash im Pfad enthalten if ((ilaenge = astrPath.Pos("\\")) == 0) astrAusgabe += astrPath + astrFileName; else { astrPath.Delete(1, ilaenge); astrRetten = astrAusgabe; astrAusgabe += astrPath + astrFileName; } // Ist Pfad zu Ende? if(ilaenge == 0) break; } while (astrAusgabe.Length() > ciStrLaenge); } // Ende: if(astrGesamt.Length() > ciStrLaenge) // Anzeigen AufzDateiLabel->Caption = astrAusgabe; }
Im Forum gab es den Hinweis man soll die Lösung eines Problemes auch bekannt geben um anderen zu helfen die FAQs lesen.
Evi48
-
Ideal ist die Lösung allerdings nicht. Vierzig mal 'W' dürfte um einiges breiter sein als vierzig mal 'i'. Es sei denn, du benutzt ausschliesslich FixedWidth-Fonts.
Was spricht denn gegen die Verwendung von MinimizeName?
-
Ja stimmt habe ich nicht dran gedacht
Herzlichen Grlückwunsch zum 10000. Beitrag. Was bekommen wir bei 11111?
Evi48