Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TListView: Permanenter vertikaler Scrollbar (https://www.delphipraxis.net/73510-tlistview-permanenter-vertikaler-scrollbar.html)

sundance 19. Jul 2006 09:22


TListView: Permanenter vertikaler Scrollbar
 
Hallo DelphiFans,

(schon wieder ich...)
Wie kann ich es anstellen, dass bei einer ListView der vertikale Scrollbar permanent (und nicht nur bei Bedarf) angezeigt wird? Ich kann mich vage daran erinnern, dass man da mit SendMessage() was bewirken kann, aber ich kriege es nicht mehr hin...

.sundance.

Lannes 19. Jul 2006 14:28

Re: TListView: Permanenter vertikaler Scrollbar
 
Hallo,

versuch es mal damit:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var AStyle: LongInt;
begin
  AStyle:=GetWindowLong(ListView1.Handle,GWL_STYLE);
  ShowScrollBar(ListView1.Handle,SB_VERT,True);
  SetWindowLong(ListView1.Handle,GWL_STYLE,AStyle);
end;

sundance 20. Jul 2006 08:27

Re: TListView: Permanenter vertikaler Scrollbar
 
Hallo Lannes,

danke für deinen Tip, leider erhalte ich nicht das gewünschte Ergebnis.
Es erscheint zwar am rechten Rand des Listviews ein Bereich, wo sonst der vertikale Scrollbar ist, doch der Scrollbar ist (so scheint es) irgendwie nicht fertig gezeichnet. Sieht merkwürdig aus... Außerdem ist mein eigentliches Problem immer noch vorhanden: Den Scrollbar wollte ich nur deshalb permanent haben, damit beim automatischen Auftauchen desselben (wenn die ListView zu scrollen anfängt) nicht auch noch ein horizontaler erscheint... Aber möglicherweise gehe ich das "Problem" auch falsch an und es gibt dafür eine viel einfachere Lösung...

.sundance.

marabu 20. Jul 2006 12:11

Re: TListView: Permanenter vertikaler Scrollbar
 
Hallo Sundance,

gut dass du deine eigentlichen Beweggründe noch aufgedeckt hast und ja, es gibt eine einfache Lösung: Setze bei einer Spalte in deiner ListView die Eigenschaft AutoSize auf True.

Grüße vom marabu

sundance 20. Jul 2006 14:29

Re: TListView: Permanenter vertikaler Scrollbar
 
Hallo marabu,

habe ich schon probiert; irgendwas mache ich wohl noch falsch:
Mein LogForm ist ganz simpel: Es enhält nur eine ImageListe und ein ListView (vsReport, ColumnHeader=false), und diese auch nur eine (hab's auch schon mit zweien probiert) TListColumn (AutoSize=true):

Auszug aus der dfm-Datei:
Delphi-Quellcode:
object LogForm: TLogForm
  Left = 209
  Top = 324
  Width = 450
  Height = 213
  BorderIcons = [biSystemMenu]
  Caption = 'LogForm'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Shell Dlg 2'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object LogListView: TListView
    Left = 0
    Top = 0
    Width = 442
    Height = 186
    Align = alClient
    Columns = <
      item
        AutoSize = True
      end>
    ShowColumnHeaders = False
    SmallImages = LogImageList
    TabOrder = 0
    ViewStyle = vsReport
  end
  object JvFormMagnet: TJvFormMagnet
    Active = True
    ScreenMagnet = False
    FormGlue = False
    MainFormMagnet = True
    Left = 296
    Top = 40
  end
  object LogImageList: TImageList
    Left = 264
    Top = 40
    Bitmap = {
    .....
    }
  end
end
Mit dieser Prozedur landen die Einträge in der Liste:
Delphi-Quellcode:
procedure TLogForm.WriteReportline(const S: String; ImgIndex: Integer);
begin
  with LogListView.Items.Add do begin
    ImageIndex := ImgIndex;
    Caption := TimeToStr(Now) + ': ' + S;
  end; { with }
  LogListView.Perform(WM_VSCROLL, SB_BOTTOM, 0);
end;
Und was soll ich sagen: Sobald die Scrollerei losgeht, erscheinen beide Scrollbalken...

marabu 21. Jul 2006 23:15

Re: TListView: Permanenter vertikaler Scrollbar
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sundance,

so funktioniert es bei mir:

Delphi-Quellcode:
procedure TDemoForm.CheckScrollBar;
var
  dwStyle: DWORD;
begin
  with ListView do
  begin
    dwStyle := GetWindowLong(Handle, GWL_STYLE);
    if dwStyle and WS_HSCROLL <> 0 then
      Columns[0].Width := ClientWidth;
  end;
end;

procedure TDemoForm.TimerTimer(Sender: TObject);
begin
  with ListView.Items.Add do
  begin
    Caption := RandomStr(50);
    Selected := True;
    MakeVisible(False);
    CheckScrollBar;
  end;
end;
Gute Nacht

marabu

sundance 24. Jul 2006 10:11

Re: TListView: Permanenter vertikaler Scrollbar
 
Hallo marabu,

tausend Dank, jetzt funktionierts.
Schade daß man sowas triviales nicht einfach über Properties verfügbar gemacht hat.
Ich hoffe, du hast dir nicht meinetwegen die halbe Nacht um die Ohren geschlagen... ;-)

.sundance.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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