AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Text zur Anzeige kürzen mit Punkten hinten
Thema durchsuchen
Ansicht
Themen-Optionen

Text zur Anzeige kürzen mit Punkten hinten

Ein Thema von Guido Eisenbeis · begonnen am 28. Okt 2011 · letzter Beitrag vom 4. Nov 2011
 
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#22

AW: Text zur Anzeige kürzen mit Punkten hinten

  Alt 2. Nov 2011, 08:23
Den Thread-Titel wurde schon von einem netter Moderator geändert! Danke.

Lösung zum Testen:
Ersetze DT_VCENTER durch DT_TOP und schiebe das Fenster ganz nach oben links auf den Bildschirm.

Der eigentliche Fehler ist nämlich, dass das Window-Rect sich auf Bildschirmkoordinaten bezieht, DrawText hingegen auf Fenster-Koordinaten.
Das war's! Ich wundere mich nur, dass das Lucky nicht aufgefallen ist. Hast du (Lucky) deine Form ganz links oben platziert? Der Text müsste bei dir doch auch verschwinden, wenn die Form woanders ist, oder?

Somit sollte DrawText jetzt abgehandelt sein.


Mit DrawTextEx kann man eine Rückgabe als String erhalten. Siehe die letzte Variante, also die mit dem Handle (HDC), in Text kürzen (Ellipsis...) von himitsu.


----------------------------------- Nachtrag Anfang -----------------------------------

Habe gerade festgestellt, dass die Funktion von himitsu in Lazarus beim Kürzen von Umlauten ein "?" an der Stelle des Umlauts zeigt. Zum Testen habe ich den Code-Teil von himitsu hier als kompaktes Beispiel zusamengestellt.

Einfach ein TLabel (Label1) auf die Form setzen, AutoSize ausschalten, Label1 links und rechts bis knapp vor den Rand vergrößern. Dann ein FormCreate und ein FormResize erstellen und folgenden Code einfügen. Für ganz Bequeme häng ich ein Beispiel-Projekt an.

Wird die Form langsam verkleinert, bis gerade so das "ü" verschwindet, taucht an dessen Stelle ein "?" auf. Muss da irgendwas auf UniCode umgestellt, oder Lazarus neu kompiliert werden?

Delphi-Quellcode:
// "Classes" und "Windows" zu den uses hinzufügen.

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Label1.AutoSize muss zur Design-Zeit = False gestellt werden;

  Label1.Anchors := [akLeft, akRight, akTop];
end;

function GetEllipsisText(Handle: HDC; S: String; MaxWidth: Integer; MaxHeight: Integer = 0;
  PathEllipsis: Boolean = False; TextFormat: LongWord = 0): String;
var
  R: TRect;
begin
  Result := S;
  UniqueString(Result);
  if MaxHeight <= 0 then
    MaxHeight := 1000;
  R := Classes.Rect(1, 1, MaxWidth, MaxHeight);
  TextFormat := TextFormat or DT_CALCRECT or DT_MODIFYSTRING;
  if PathEllipsis then
    TextFormat := TextFormat or DT_PATH_ELLIPSIS;
  if TextFormat and (DT_END_ELLIPSIS or DT_PATH_ELLIPSIS) = 0 then
    TextFormat := TextFormat or DT_END_ELLIPSIS;
  DrawTextEx(Handle, PChar(Result), Length(Result), R, TextFormat, nil);
  SetLength(Result, StrLen(PChar(Result)));
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Label1.Caption := GetEllipsisText(
    Label1.Canvas.Handle, 'Beispiel-Text für FormResize.', Label1.Width);
end;
------------------------------------- Nachtrag Ende -------------------------------------


Meine Variante "SetShortenedTextWithDots" folgt alsbald. . . . Nachtrag: Das Umlautproblem tritt hier auch auf.

Guido.


Edit: Nachtrag und Beispiel-Projekt hinzugefügt.
Angehängte Dateien
Dateityp: zip Ellipsis-Code von himitsu - kompakt.zip (743,9 KB, 7x aufgerufen)

Geändert von Guido Eisenbeis ( 2. Nov 2011 um 11:00 Uhr) Grund: Nachtrag und Beispiel-Projekt hinzugefügt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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-2025 by Thomas Breitkreuz