AGB  ·  Datenschutz  ·  Impressum  







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

ListView mit zu langen Texten

Ein Thema von Helmi · begonnen am 21. Jul 2004 · letzter Beitrag vom 24. Jul 2004
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

ListView mit zu langen Texten

  Alt 21. Jul 2004, 19:46
Hallo

ich habe eine textview in der in einer Zelle (falls mann das bei einer Listview auch so nennen kann)
ein zu langer Text drin steht.

Nun macht Listview beim Anzeigen aus dem langen text einen kurzen mit drei Punkten als Endung

das ist ja alles in Ordnung

nur: ich will, dass man eine art Hint-Message erhalte, wenn man mit der maus auf diese Zelle
geht, in der der komplette (ungekürzte) Text der Zelle drinsteht.

mfg
Helmi
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: ListView mit zu langen Texten

  Alt 21. Jul 2004, 20:08
Hallo

ich versteh dich nicht, bei mir ist das bereits das standardverhalten einer Listview. Beil Zellen, wo der Text nicht reinpaßt, wird automatisch der Text als Hint angezeigt.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: ListView mit zu langen Texten

  Alt 21. Jul 2004, 20:24
na ja

ich hab in diesen Zellen die CheckBoxen drin (die bei der Listview dabei sind, und dann gehts nimmer
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: ListView mit zu langen Texten

  Alt 24. Jul 2004, 13:00
Zitat von Helmi:

ich hab in diesen Zellen die CheckBoxen drin (die bei der Listview dabei sind, und dann gehts nimmer
das hättest du auch gleich sagen können .
Ansonsten: keine Ahnung, ich würd dann die "Zeile und Spalte" ermitteln und den Hint selber anzeigen
Delphi-Quellcode:
procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var ColumnRect:Trect;
    col,i,row,i2:integer;
    oldhint,newhint:string;
begin
  {man kann auch mit getitemat arbeiten, leider funktioniert das bei rowselect=false nur, wenn die maus über der caption-spalte ist}

  //läßt sich mit Sicherheit noch verbessern: ein paar Sicherheitsüberprüfungen und ein paar breaks, bzw ein anderer Schleifenaufbau wäre z.b. was
  with Sender as TListView do
    begin
      row := -1;
      col := -1;
      //alles items durchlaufen und y-pos vergleichen
      for i2:=0 to Items.Count-1 do
        begin
          //erstmal Rect der ganzen zeile ermittlen, um top, bottom und left zu haben
          ColumnRect := items[i2].DisplayRect(drBounds);
          //y-pos überprüfen
          if (y>=ColumnRect.top) and (y<=ColumnRect.Bottom) then
            begin
              row:=i2;
              //x-pos überprüfen
              for i:=0 to Columns.Count-1 do
                begin
                  //listview_getcolumwidth statt colum.width verwenden, wurde ccolumnsheaderwith etc. verwendet, liefert comumn.width die falschen werte (zumind. bei mir (d6pro),).
                  ColumnRect.Right := ColumnRect.left+ListView_GetColumnWidth(Columns.Owner.Handle, i);
                  if (x>=ColumnRect.Left) and (x<=ColumnRect.Right) then col:=i;
                  //nächste Spalte ermittlen
                  ColumnRect.left:=ColumnRect.Right;
                end;
            end;
        end;
      label1.Caption:='Zeile: '+inttostr(row)+'-'+'Spalte: '+inttostr(col);

      //showhint muß auf true sein
      //hint pro Zelle anpassen, hier könnte man noch mit listview.stringwidth arbeiten, um nur einen hint anzuzeigen, wenn die Spaltenbreite zu klein ist
      oldhint := hint;
      newhint := '';
      if (row<>-1) and (col<>-1) then
        begin
          //caption oder subitems-spalte?
          if col=0 then
            newhint := items[row].Caption
           else
            //sichergehe4n,m das es auch so viele subitems gibt
            if items[row].SubItems.Count-1>=col-1 then
              newhint:=items[row].SubItems[col-1];
          //wenn neuer Hint, application.cancelhint aufrufen, um den neuen hint auch anzuzeigen
          if newhint<>oldhint then
            begin
              hint:=newhint;
              Application.CancelHint;
            end;
        end;
    end;
end;
kannst dir das ja selber verbessern und anpssen.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  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 05:42 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