AGB  ·  Datenschutz  ·  Impressum  







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

TListView SubItem Position genau feststellen

Ein Thema von Captnemo · begonnen am 7. Jul 2015 · letzter Beitrag vom 7. Jan 2017
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

TListView SubItem Position genau feststellen

  Alt 7. Jul 2015, 08:49
Hi,

wie kann ich ein TRect eines SubItems in einem TListView korrekt feststellen?
Mit folgender Funktion hole ich mir das TRect zur Zeit:
Delphi-Quellcode:
r:=lv1.Items[i].DisplayRect(drBounds);

InlineCheckbox.BoundsRect:=ShrinkToColumn(lv1, 5, r);
.
.
.
function Tfrm_mitarbeiterT.ShrinkToColumn(lv: TListView; Col: Integer;
  r: TRect): TRect;
var
  i, l: Integer;
begin
  Result:=r;
  if Col>0 then
  begin
    l:=0;
    for I := 0 to col-1 do
      if lv.Columns[i].Width>0 then
        l:=l+lv.Columns[i].Width else
        l:=l+(lv.Columns[i].Width * -1); //Zum Testen, weil unsichtbare Columns teilweise negative
                                         //Werte haben
    Result.Left:=r.Left+l;
  end;
  Result.Right:=Result.Left+lv.Columns[Col].Width;
end;
Nun ist es aber so, dass die Column 0 auf Autosize steht, und sie sich verkleinert, bis sie eine Width von 1 hat. Wenn man dann weiter verkleinert, bekommt sie eine Width von -1, was zeichnerisch an die optimale Spaltenbreite angepasst wird. Wen man jetzt weiter verkleinert, geht die Width weiter in den negativen Bereich, je nach weiterer Verkleinerung. So komme ich dann aber rechnerisch nicht mehr an die genaue Position des SubItems.

Gibt es dafür eine bessere Lösung?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo ( 7. Jul 2015 um 09:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: TListView SubItem Position genau feststellen

  Alt 7. Jul 2015, 12:51
Keiner eine Idee?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3

AW: TListView SubItem Position genau feststellen

  Alt 7. Jul 2015, 13:26
Ich Antworte mir mal selbst, da ich eine Lösung jetzt gefunden habe. (Für alle, die sowas mal suchen)

Quelle: http://www.delphisource.net/365.html

Delphi-Quellcode:
const
   LVM_FIRST = $1000;
   LVM_GETSUBITEMRECT = LVM_FIRST + 56;
   LVIR_BOUNDS = 0;
   
function ListView_GetSubItemRect(hwndLV: HWND; iItem, iSubItem: Integer;
   code: DWORD; prc: PRect): BOOL;
begin
   if prc <> nil then
   begin
     prc^.Top := iSubItem;
     prc^.Left := code;
   end;
   Result := BOOL(SendMessage(hwndLV, LVM_GETSUBITEMRECT, iItem, Longint(prc)));
end;
Aufruf:
Delphi-Quellcode:
var
  wr: TRect;
  li: TListItem;
begin
  li:=ListView1.Items.Add;
  li.SubItems.Add('');
  ListView_GetSubItemRect(ListView1.Handle,
                          li.Index, //Index der jeweiligen Zeile
                          1, //Caption mitzählen
                          LVIR_BOUNDS,
                          @wr);
  //In wr haben wir nun das TRect des SubItems
end;
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#4

AW: TListView SubItem Position genau feststellen

  Alt 7. Jan 2017, 19:01
Ich Antworte mir mal selbst, da ich eine Lösung jetzt gefunden habe. (Für alle, die sowas mal suchen)

Quelle: http://www.delphisource.net/365.html

. . . .
//In wr haben wir nun das TRect des SubItems
end;[/DELPHI]
... scheint momentan nicht sehr vertrauenswürdig . . . ?
- siehe Anhang
Miniaturansicht angehängter Grafiken
maleware.jpg  
Markus H.
  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 22:16 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