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
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#1

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
venice2
(Gast)

n/a Beiträge
 
#2

AW: String Umbruch

  Alt 16. Dez 2020, 16:58
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.
Super werde es direkt mal versuchen..
Danke.

Melde mich dann.

ciTextBreiteInBuchstaben .. kann das nicht length text sein?
bzw. nach was richtet sich die value davon.

PS:
Es macht keinen unterschied.

Geändert von venice2 (16. Dez 2020 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#3

AW: String Umbruch

  Alt 16. Dez 2020, 17:14
Ich weiß halt nicht, wie breit der Text in Deiner Anzeige sein darf, ohne das die Scrollbar benutzt werden muss.

Du müsstest bitte mal mit 'nem sehr langen Sendungstitel ausprobieren, wieviele Zeichen in einer Zeile angezeigt werden können, ohne dass der Text quasi über den rechten Rand hinausreicht. Oder bei der vorhandenen Anzeige mal für 'ne Reihe von Sendungstitel nachzählen, nach wievielen Buchstaben im Schnitt der rechte Rand erreicht ist.

Eventuell probierst Du es mal mit 'nem Sendungstitel ala 'WWW WWW WWW WWW WWW WWW WWW WWW WWW WWW WWW WWW' aus und zählst nach, wieviele WWW plus jeweils ein Leerzeichen angezeigt werden können, bevor der rechte Rand des Listviews erreicht ist. Die Anzahl der WWW * 4 nimmst Du dann als Wert für ciTextBreiteInBuchstaben. Passen z. B. acht WWW in den Listview, ohne den rechten Rand zu "überragen", wäre der Wert für ciTextBreiteInBuchstaben = 32.

Aber letztlich wird es darauf hinauslaufen, dass Du den "richtigen Wert" für ciTextBreiteInBuchstaben durch ausprobieren herausbekommen musst. Bei der Schriftart Courier New haben z. B. alle Buchstaben die gleiche Breite. Bei den anderen Schriftarten eher nicht, so dass man hier eigentlich keinen genauen oder "richtigen" Wert angeben kann. Da hilft nur probieren und sich dann für einen in der Regel passenden Wert entscheiden.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: String Umbruch

  Alt 16. Dez 2020, 19:11
Ich mache es jetzt so.

Delphi-Quellcode:
    LVZattoo.SetItemText(LVZattoo.Handle, (i - 1), 1, ChlRec.title, 8,
      'Genre: ' + FZat.gEpg[i - 1].g + ';' +
      'Sendung: ' + FZat.gEpg[i - 1].t + ';' +
      'Laufzeit: ');
und löse es dann so auf.

Delphi-Quellcode:
   if Assigned(ColumnInfo[HeaderItem].SplitStr) then
   begin
     if ColumnInfo[HeaderItem].SplitStr[Item] <> 'then
     begin
       sSplit := Split(ColumnInfo[HeaderItem].SplitStr[Item], ';');
       TmpRect.Top := TextRect.Top;
       TmpRect.Left := TextRect.Left;
       TmpRect.Right := TextRect.Right;
       for i := Low(sSplit) to High(sSplit) do
       begin
         TmpRect.Top := TmpRect.Top + FPointSize + 2;
         DrawEllipsisText(WinHandle, DC, sSplit[i], TmpRect, Color, FFontName,
           FPointSize, FFontStyle, 0, 0);
        end;
     end;
    end;
anders geht es im Moment nicht bis ich eine bessere Lösung gefunden habe.

Oben wird der String mit Delemiter ';' übergeben
und unten ausgewertet.
Der string selbst wird nicht mehr an das Listview übergeben nur ChlRec.title (= wsItems)

Delphi-Quellcode:
procedure TSkinListView.SetItemText(hListView: hWnd; nItem: Integer; nSubItem: Integer;
  wsItems: WideString; TextTop: Integer = 0; SplitStr: WideString = '');
var
  lvItem: LV_ITEMW;
begin

  lvItem.mask := LVIF_TEXT;
  lvItem.iItem := nItem;
  lvItem.pszText := PWideChar(wsItems);
  lvItem.iSubItem := nSubItem;
  ListView_SetItem(hListView, lvItem);

  ColumnInfo[nSubItem].TextTop := TextTop;
  if SplitStr <> 'then
  begin
    SetLength(ColumnInfo[nSubItem].SplitStr, (nItem + 1));
    ColumnInfo[nSubItem].SplitStr[nItem] := SplitStr;
  end;

end;

Geändert von venice2 (17. Dez 2020 um 12:15 Uhr)
  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 17:09 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