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
 
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
 


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 22:53 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