AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView Breite der letzten Spalte beim Resize der Form

ListView Breite der letzten Spalte beim Resize der Form

Ein Thema von Dalai · begonnen am 13. Okt 2023 · letzter Beitrag vom 24. Okt 2023
 
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#1

ListView Breite der letzten Spalte beim Resize der Form

  Alt 13. Okt 2023, 15:44
Hallo in die Gemeinde .

Gegeben sei ein TListView mit Anchors an allen 4 Kanten auf einem TForm. Die letzte Spalte des ListView soll immer die restliche Breite des ListView einnehmen, wenn das Formular in der Breite verändert wird. Ich will also eine Art TListColumn.AutoSize anhand der Breite statt des enthaltenen Texts. Dafür bietet sich das OnResize-Event des ListView an.
Delphi-Quellcode:
procedure TfmMain.ListViewResize(Sender: TObject);
var
  Llv: TListView;
  Lcolwidth, Ltotalcolwidth, i: integer;
  Lcol: TListColumn;
begin
    Llv:= nil;
    if Sender is TListView then
        Llv:= (Sender as TListView);
    if NOT Assigned(Llv) then
        Exit;
    Ltotalcolwidth:= 0;
    for i:= 0 to Pred(Llv.Columns.Count) do begin
        Inc(Ltotalcolwidth, Llv.Columns[i].Width);
    end;
    Lcol:= Llv.Columns[Llv.Columns.Count-1];
    Lcolwidth:= Llv.ClientWidth - Ltotalcolwidth - Lcol.Width;
    if (Lcolwidth >= Lcol.MinWidth) then
        Lcol.Width:= Lcolwidth;
end;
Probleme:
  • Das ListView flackert im unteren Bereich, weil der horizontale Scrollbalken ein- und ausgeblendet wird, wenn die Breite verkleinert wird. Der Scrollbalken verschwindet wieder, wenn man einmal auf den nach rechts zeigenden Pfeil klickt; es wäre also eigentlich gar nicht nötig, dass das ListView den Scrollbalken anzeigt.
    Es scheint so, als wird der Scrollbalken pro Pixel Verkleinerung abwechselnd entweder angezeigt oder ausgeblendet.
    Siehe auch Bild im Anhang (bitte Stil und teilweise fehlende Themes ignorieren).
  • Wenn eine der anderen Spalten vergrößert wird, wird die letzte Spalte bei einer Breitenänderung schmaler, unter Umständen sehr viel schmaler.

Erreichen will ich Folgendes:
  1. Die letzte Spalte soll beim Verändern der Breite den restlichen Raum einnehmen. Das ist mit obigem Code soweit abgedeckt.

  2. Sobald eine der anderen Spalten vergrößert wird, so dass das ListView einen horizontalen Scrollbalken anzeigt, soll die Breite der letzten Spalte nicht verändert werden, solange der Scrollbalken sichtbar ist. Damit soll vor allem verhindert werden, dass die letzte Spalte bei einer Breitenänderung plötzlich sehr schmal wird.
    Ich weiß, dass man mit GetWindowLong(Llv.Handle, GWL_STYLE); ermitteln kann, ob ein Scrollbalken sichtbar ist, aber die Flackerei macht eine sinnvolle Verwendung unmöglich, siehe nächster Punkt.

  3. Die Flackerei durch das Ein- und Ausblenden des horizontalen Scrollbalkens soll verschwinden oder unterdrückt werden.

Grüße
Dalai
Angehängte Grafiken
Dateityp: png DP_ListView_Breite+Scrollbalken.png (3,0 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:27 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