![]() |
ListView mit zu langen Texten
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 |
Re: ListView mit zu langen Texten
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 |
Re: ListView mit zu langen Texten
na ja
ich hab in diesen Zellen die CheckBoxen drin (die bei der Listview dabei sind, und dann gehts nimmer |
Re: ListView mit zu langen Texten
Zitat:
Ansonsten: keine Ahnung, ich würd dann die "Zeile und Spalte" ermitteln und den Hint selber anzeigen
Delphi-Quellcode:
kannst dir das ja selber verbessern und anpssen.
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; Mfg Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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