![]() |
Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Delphi-Version: 2009
Hallo Gemeinde, der Titel besagt ja was ich gerne in Erfahrung bringen möchte. Wozu? Ich habe eine ListView mit fester Größe, darin sind 2 Spalten. Die letzte Spalte soll so breit werden das der Längste vorhandene String hineinpasst. Diese Funktion ist bereits erfüllt. Da ich nicht weiß wie Breit eine Vertikale Scrollbar ist habe ich pro forma einen Wert von
Delphi-Quellcode:
Lokal bei mir klappt es so aber ich Wette das die Scrollbar woanders auch breiter sein kann, deswegen benötige ich diesen Wert.
"LängsterStringInPixel" + 20 Pixel
Falls das jemand weiß, ich freue mich auf eine Antwort! Danke fürs Lesen.
Delphi-Quellcode:
<- so stell ich die breite momentan ein, L = LängsterStrInPx
LVProcess.Columns[1].Width := L+20;
|
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
|
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
![]() Aber kann man bestimmt auch irgendwie über die Theming-Klassen der VCL erfragen. |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Zitat:
Delphi-Quellcode:
LVProcess.Columns[1].Width := L+GetSystemMetrics(SM_CXVSCROLL);
Zitat:
|
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Dir ist schon klar, dass es für ListView-Spaltebreiten Konstanten wie Beispielsweise "längster String" gibt?
|
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Nein, ich ermittle momentan über Canvas wie breit die Spalte sein muss bei Erstellung der Einträge.
Wie lautet denn das ListView Pendant dazu bitte? |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
![]() Die Zahlen haben auch einen Namen:
Delphi-Quellcode:
const
ColumnHeaderWidth = -2; ColumnTextWidth = -1; |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Ich Verstehe nicht wie Du das meinst es umzusetzen?
Also beim Start ist meine Column.Width = 10, nach füllen der List so ca das zehnfache. Wie rufe ich bei der ListView jetzt welchen Befehl auf der als Ergebnis mir den Längsten String in Pixel wieder gibt, oder halt nur den längsten String den ich wieder übers Canvas ausrechnen lasse wieviel Pixel ich brauche? Wenn Du da ein Beispiel für hättest das wäre lieb. edit Also momentan ist
Delphi-Quellcode:
das meine methode, was sollte als Ersatz für "L" da stehen?
LVProcess.Columns[1].Width := L+GetSystemMetrics(SM_CXVSCROLL);
|
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
![]() |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Ja Danke DeddyH.
Ich vermute
Delphi-Quellcode:
würde mich ans Ziel bringen um mir das "L" zu ersparen.
LVSCW_AUTOSIZE_USEHEADER
Diese Function/Macro kennt mein Delphi noch nicht. Da muss ich erst wieder gucken/suchen/lesen wie ich das nun wieder umsetze :-) |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Da ist ein Link oben im Artikel, der führt hierhin:
![]() Alternativ kann man die Width je Column auch einfach zuweisen, wenn man da dann -1 oder -2 nimmt... |
AW: Wie ermittel ich die Breite einer Vertikal Scrollbar in einem ListView?
Jetzt habe ich es herausgefunden, die Unit CommCtrl fehlte mir in Uses.
Falls jemand auch auf der Suche nach automatisch maximum Breiten Spalten ist, hier der Code mit dem es bei mir funktioniert oder lest die MSDN Artikel für andere Möglichkeiten. Danke DeddyH!:thumb:
Delphi-Quellcode:
.
CommCtrl.ListView_SetColumnWidth(LVProcess.Handle,1,LVSCW_AUTOSIZE_USEHEADER);
Parameter 1 = Das ListView Handle Parameter 2 = Die Spalte (Column) Parameter 3 = Es wird so breit wie der Längste String auch Danke an Redeemer, Du meintest auf jeden Fall das Richtige, nur hab ichs nicht so ganz verstanden gehabt, jetzt schon. hier seht ihr den Vorher Nacher effekt
Delphi-Quellcode:
procedure TfrmKnips.FillListView;
var i1, i2 : Integer; // <- hier verschwindet gleich was :) begin frmKnips.LVProcess.Clear; SLHandles.Clear; SLNames.Clear; if EnumWindows(@MyEnumProcess, i2) = False then MessageBox(0, 'EnumWindows wird nicht Unterstützt! ','Fehler!',0); LVProcess.Items.BeginUpdate; i2 := 0; for i1 := 0 to SLHandles.Count - 1 do begin with LVProcess.Items.Add do begin // if Canvas.TextWidth(SLNames[i1]) > i2 then i2 := Canvas.Textwidth(SLNames[i1]); Caption := SLHandles[i1]; SubItems.Add(SLNames[i1]); end; end; LVProcess.Items.EndUpdate; CommCtrl.ListView_SetColumnWidth(LVProcess.Handle, 1, LVSCW_AUTOSIZE_USEHEADER); // LVProcess.Columns[1].Width := i2+GetSystemMetrics(SM_CXVSCROLL); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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