Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Höhe eines Textes in einem Memo ermitteln (https://www.delphipraxis.net/196746-hoehe-eines-textes-einem-memo-ermitteln.html)

sko1 15. Jun 2018 13:09

Höhe eines Textes in einem Memo ermitteln
 
Hallo,

in einer Android-App werden Texte in Memos angezeigt.

Benutzer bemängeln nun, dass man nicht erkennen kann ob mehr Text vorhanden ist und gelesen werden müsste als momentan je nach Größe des Memos sichtbar ist.
Die Scrollbars kommen ja erst, wenn man das Memo antippt :-(

Nun wollte ich die Gesamthöhe des enthaltenen Textes ermitteln, mit der Memo-Höhe vergleichen und ggf. ein Symbol anzeigen.

Nur wie komme ich unter Android mit FMX an die Höhe des Textes?

Oder gibt es einen viel besseren Ansatz, dem Anwender zu signalisieren dass da mehr ist als angezeigt wird?

Ciao
Stefan

TiGü 15. Jun 2018 13:49

AW: Höhe eines Textes in einem Memo ermitteln
 
Ist die Zeilenanzahl deines Memos fix oder verändert die sich je nach Gerät/Bildschirmgröße?

himitsu 15. Jun 2018 13:51

AW: Höhe eines Textes in einem Memo ermitteln
 
Nja, eine Lösung währe wohl rauszufinden wie man das Memo dazubringt die scrollbar nicht auszublenden.

Du könntest auch versuchen mal das native (platform) TMemo zu nutzen, ob es sich "besser" verhält.



Die Anzahl der Zeilen übe Memo.Lines.Count mit der Höhe einer Textzeile ginge auch, so lange im Memo kein Umbruch der langen Zeilen vorkommt (WordWrap), womit es dann mehr Zeilen wären.

Zitat:

Zitat von TiGü (Beitrag 1404912)
Ist die Zeilenanzahl deines Memos fix oder verändert die sich je nach Gerät/Bildschirmgröße?

Die Zeilenanzahl mit oder ohne WordWrap, die Größe des Memos, die Textgröße (manche passen ja alles an die Displaygröße an) und der Font, welcher auf diesem Gerät vewendet wird.
Viele Einflüsse, auf das Verhältnis von Text zu Memo.

sko1 15. Jun 2018 14:10

AW: Höhe eines Textes in einem Memo ermitteln
 
Hallo,

ich habe mal mit folgendem Code:

Delphi-Quellcode:
 
procedure TFormMain.MemoAuftragChange(Sender: TObject);
var
  r: TRectF;
begin

// Font nochmal übergeben sonst funktioniert Measuretext nicht!
  TMemo(Sender).Canvas.Font.Assign(TMemo(Sender).Font);
  r := RectF(0, 0, TMemo(Sender).ViewportSize.Width, 20000);
  TMemo(Sender).Canvas.MeasureText(r, TMemo(Sender).text, true, [],
    TTextAlign.Leading, TTextAlign.Leading);
  LabelScrollHinweis.Visible := r.Bottom > TMemo(Sender).ViewportSize.Height;
versucht, ein Label mit " v v v v v " im Memo anzeigen zu lassen.
Das funktioniert mit 2 Einschränkungen:

1) das Label hat als Parent das Memo und ist Align = alCenter und wird dort auch wie gewünscht angezeigt.
Scrollt man nun im Text bewegt sich das Label mit!
2) Das label wird zwar per Code visible = true aber wird erst sichtbar wenn man das Memo in der Größe ändert (die FormMain vergrößert)

Bekommt man das auch noch irgendwie hin?

Ciao
Stefan

Rollo62 15. Jun 2018 15:01

AW: Höhe eines Textes in einem Memo ermitteln
 
Ich habe zumindest mal bei anderen Control mit dem TextHeight von Canvas mal Erfolg gehabt.

Delphi-Quellcode:
  // In OnUpdateObjects vom ListView
 
  LCtrl.Canvas.Font.Assign( LFont );
  LTh := LCtrl.Canvas.TextHeight( 'HH' ) * LCtrl.Canvas.Scale; // so in er Art
Setze es aber momentan nicht ein, der Test war vor Rx10.0.x
Vielleicht hilft dir das ja weiter.

Rollo


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz