AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String Umbruch

Ein Thema von venice2 · begonnen am 16. Dez 2020 · letzter Beitrag vom 17. Dez 2020
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

String Umbruch

  Alt 16. Dez 2020, 14:23
Ich habe eine ListView OwnerDraw erstellt. (siehe Anhang)
Und schicke dieser einen String der so aussieht.

Delphi-Quellcode:
    LVZattoo.SetItemText(LVZattoo.Handle, (i - 1), 1, ChlRec.title
      + #13#10 + 'Genre: ' + FZat.gEpg[i - 1].g + #13#10 + 'Sendung: '
      + FZat.gEpg[i - 1].t + #13#10 + 'Laufzeit: ', 8);
Eine ListView ist ja eigentlich nicht dafür ausgelegt einen String innerhalb der Zeile umzubrechen.

Mein Problem ist nun das sich dadurch die Scrollbar verändert obwohl der String (Sichtbar) eigentlich gar nicht hinausragt.
Wie kann ich dem ListView nun mitteilen das ein Umbruch stattgefunden hat?

ein #0 anhängen bringt nichts.

Geändert von venice2 (17. Dez 2020 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: String Umbruch

  Alt 16. Dez 2020, 14:44
Ich habe so etwas ähnliches mit Frames umgesetzt.

- alle Frames in die aktuelle Scrollbox-Breite zeichnen und dabei die benötigte Breite ermitteln
- maximal benötigte Breite ebenfalls merken
- wenn maximal benötigte Breite nicht mit realer Breite übereinstimmt, dann die Liste neu durchgehen und die Breite aller Frames neu setzen
- dabei wird auch berücksichtigt, wenn die Einblendung der vertikalen Scrollbar (ja/nein) sich bei der Aktualisierung ändert

Ich befürchte, dass Du keine ganz einfache Lösung finden wirst (es sei denn, es gibt schon eine Listview, die das passend umsetzt).
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: String Umbruch

  Alt 16. Dez 2020, 14:48
Ich habe so etwas ähnliches mit Frames umgesetzt.

- alle Frames in die aktuelle Scrollbox-Breite zeichnen und dabei die benötigte Breite ermitteln
- maximal benötigte Breite ebenfalls merken
- wenn maximal benötigte Breite nicht mit realer Breite übereinstimmt, dann die Liste neu durchgehen und die Breite aller Frames neu setzen
- dabei wird auch berücksichtigt, wenn die Einblendung der vertikalen Scrollbar (ja/nein) sich bei der Aktualisierung ändert

Ich befürchte, dass Du keine ganz einfache Lösung finden wirst (es sei denn, es gibt schon eine Listview, die das passend umsetzt).
Hmmm. überlege ob ich den String nicht einfach als Array übergebe. Nur bringt das was

Ich dachte eigentlich wenn man einen NULL terminierten String anhängt also #0 müsste die Liste das erkennen das der String hier beendet wird.
Tut sie aber nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#4

AW: String Umbruch

  Alt 16. Dez 2020, 14:53
Kannst du nicht einfach die waagerechte Scrollbar abschalten bzw. spricht da etwas dagegen?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#5

AW: String Umbruch

  Alt 16. Dez 2020, 15:02
Kannst du nicht einfach die waagerechte Scrollbar abschalten bzw. spricht da etwas dagegen?
Ja wenn der Text länger ist dann muss ich scrollen.
Ich weis ja nicht welcher String mir da geliefert wird.
Die Sendungstitel könnte ja sehr lang sein
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.441 Beiträge
 
Delphi 7 Professional
 
#6

AW: String Umbruch

  Alt 16. Dez 2020, 16:57
Alternativvorschlag:
Delphi-Quellcode:
const
  ciTextBreiteInBuchstaben = 25;
...
 LVZattoo.SetItemText(LVZattoo.Handle, (i - 1), 1,
    SysUtils.WrapText(ChlRec.title,ciTextBreiteInBuchstaben) + #13#10
  + 'Genre: ' + FZat.gEpg[i - 1].g + #13#10
  + 'Sendung: ' + FZat.gEpg[i - 1].t + #13#10
  + 'Laufzeit: ', 8);
ciTextBreiteInBuchstaben weist Du einen Wert zu, der der maximal sinnvoll anzeigbaren Breite in Buchstaben entspricht.

WrapText sorgt für eine entsprechende Textbreite, in dem es bei Erreichen dieses Wertes beim nächsten auftretenden WhiteSpace einen Zeilenumbruch einfügt.

Dann musst Du Dir keine Gedanken über Scrollbar Ja/Nein ... machen. Der Sendungstitel enthält dann jeweils auch entsprechend viele Zeilenumbrüche.

Ob's damit dann besser aussieht, müsstest Du mal ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#7

AW: String Umbruch

  Alt 17. Dez 2020, 07:49
Kannst du nicht einfach die waagerechte Scrollbar abschalten bzw. spricht da etwas dagegen?
Ja wenn der Text länger ist dann muss ich scrollen.
Ich weis ja nicht welcher String mir da geliefert wird.
Die Sendungstitel könnte ja sehr lang sein
Richtig, ist die Frage ob das von dir dann aber gewollt ist und wie dein Aufbau ist.

Vorschlag:
Ich würde ggf. in so einer Liste nur grobe Informationen anzeigen, beim Hover darauf dann ins Detail gehen im Hover.

Dann könntest du einfach eine maximale Stringlänge angeben (Was Delphi.Narium aufgezeigt hat) brauchst aber keinen zusätzlichen Stringumbruch ggf. Einbauen, sondern würdest den Text "Beschneiden" (evtl. auch nur dann den Hover "erlauben") und generell keine waagerechte Scrollleiste erlauben.

Dadurch bleibt das Layout gleich, die Funktionalität leidet nicht und in geschätzt 90% der Fälle solltest du alle Informationen immer angezeigt bekommen.


OT: Ich würde [ und " beim Genre entfernen.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:03 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