Langen Pfad in zu kurzes TEdit - Wie?

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von photor »

Hallo Forum,

für ein GUI-Programm müssen für eine projekt-orientierte Anwendung einige Pfade spezifiziert werden. Das mache ich einerseits über einen Select-Button (mit TopenDirectory) und der Pfad wird anschließend zur Kontrolle und Info in einem TEdit angezeigt und andererseits kann der Pfad in diesem TEdit direkt eingegeben oder noch editiert werden. Soweit so gut.

Nun sind die Pfade recht lang und in weiten Teilen gleich. Da die Struktur aber nicht so strikt definiert werden soll, ist nicht klar, wie viel der Pfade gleich sind (hatte schon die Idee, einen Basispfad anzugeben und alle anderen relativ dazu - kam aber nicht so gut an, da die User sich ihre Projekte unterschiedlich organisieren). Also: alle Pfade nach Möglichkeit einzeln und absolut angeben.

Um die langen Pfade im TEdit anzuzeigen, werden diese sehr lang oder es ist nur ein Teil des Pfades zu sehen; letzteres würde ich dadurch umgehen, dass ich im Hint des jeweiligen TEdits den Pfad ganz anzeige, wenn die Maus drüber gehalten wird. Ich fände es schön, wenn im TEdit der Pfad etwa so angezeigt werden könnte:

Code: Alles auswählen

D://Anfang/Bla ..... ub/Ende/
d.h. man kann sowohl den Anfang (also Laufwerk und erstes Directory) erkennen und gleichzeitig das eigentliche Ziel-Verzeichnis. Ich habe sowas schon gesehen, finde aber nichts, wie ich das in Lazarus bzw. Delphi realisieren kann. Geht das mit einfachen Mitteln? Eine Option im TEdit?

Wahrscheinlich brauche ich nur den passenden Hinweis oder das richtige Suchwort.

Dankbar für einen Tipp,
Photor

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von Winni »

Hi!

Maximale Läge definieren
Vorderen Teil mit maxlen div 2 kopieren
Hinteren Teil mit maxlen div 2 kopieren
3 Punkte dazwischen
Fertig:

Code: Alles auswählen

var s,sfront, send, sfinal: string;
maxlen, partlen: integer;
begin
s := 'X:\Lazarus\MeinKrams\Tests\BGRAcomponents\BGRAVirtualScreen\transparentes\';
maxlen := 40;
if length(s) > maxlen then
  begin
  partlen := maxlen div 2 -1;
  sfront := copy (s,1,partlen);
  send := copy (s,length(s)- partlen, partlen);
  sfinal := sfront +'...'+send;
  end else sfinal := s;
  showMessage (sfinal);       
Quick and dirty von

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von theo »

Das nennt man "Ellipsis"
Ich würde aber den editierbaren Text im TEdit lassen wie er ist und den Hint kürzen, das wird sonst schwierig zu bedienen.

S.a.
https://forum.lazarus.freepascal.org/in ... ic=14917.0
https://www.delphipraxis.net/164139-tex ... ipsis.html

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von wennerer »

Hi Photor,
das hier könnte dich interessieren:
viewtopic.php?p=116330#p116330

Viele Grüße
Bernd

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von TBug »

Hallo photor,

schau Dir einmal die Funktion MinimizeName in der Unit filectrl.pp an.

Dort kannst Du auch die maximale Länge in Pixel angeben, damit der gekürzte Pfad exakt in Dein TEdit-Feld hineinpasst

Das andere Problem wäre dann aber noch das Editieren des Pfades.
.

Benutzeravatar
photor
Beiträge: 443
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Langen Pfad in zu kurzes TEdit - Wie?

Beitrag von photor »

Hallo alle,

erstmal "Danke" an alle die hier Input liefern; ich lese mich mal durch und lasse mich anregen. Helfen tut's in jedem Fall. Hier schonmal eine schnelle Reaktion:
Winni hat geschrieben:
Di 9. Aug 2022, 20:51
Maximale Läge definieren
Vorderen Teil mit maxlen div 2 kopieren
Hinteren Teil mit maxlen div 2 kopieren
3 Punkte dazwischen
Fertig:
Wenn ich das richtig verstehe, wird dabei der Eintrag im TEdit selbst gändert. Das würde ich gerne vermeiden, da die Pfade auch direkt vom User darin geändert werden können. Ich suche eine Anzeige-only-Lösung.

theo hat geschrieben:
Di 9. Aug 2022, 21:06
Das nennt man "Ellipsis"
Ich würde aber den editierbaren Text im TEdit lassen wie er ist und den Hint kürzen, das wird sonst schwierig zu bedienen.

S.a.
https://forum.lazarus.freepascal.org/in ... ic=14917.0
https://www.delphipraxis.net/164139-tex ... ipsis.html
Stimmt! Auf den Begriff "Ellipse" hätte ich kommen können (Ärger); hätte beim Suchen helfen können.

Ich würde lieber den TEdit kurz (= klein/kompakt auf der GUI) halten; wenn wenn der User dann den Pfad genauer ansehen will (wegen Kontrolle z.B.) kann er die Maus drauf bewegen und sieht dann im Hint den ganzen Pfad und kann ihn checken.

Aber richtig, den selbst Text im TEdit möchte ich wenn es geht nicht anfassen - s.o.

Die Links schaue ich mir an.

TBug hat geschrieben:
Di 9. Aug 2022, 21:10
Hallo photor,

schau Dir einmal die Funktion MinimizeName in der Unit filectrl.pp an.

Dort kannst Du auch die maximale Länge in Pixel angeben, damit der gekürzte Pfad exakt in Dein TEdit-Feld hineinpasst

Das andere Problem wäre dann aber noch das Editieren des Pfades.
.
Die Funktion kannte ich nicht - sehe ich mir an. Aber den Text ändern, nur wenn unbedingt nötig - s.o.


Zu den anderen Tipps: muss ich erst lesen - und drüber nachdenken.

Ciao,
Photor

Antworten