Delphi-PRAXiS
Seite 2 von 2     12   

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 StringGrid: Breite der vertikalen Scrollbar ermitteln (https://www.delphipraxis.net/184064-stringgrid-breite-der-vertikalen-scrollbar-ermitteln.html)

DeddyH 23. Feb 2015 14:00

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Delphi-Quellcode:
type
  TStringGrid = class(Grids.TStringGrid)
  public
    procedure CalcDrawInfo(var DrawInfo: TGridDrawInfo);
  end;

  TFormDings = class(TForm)
    StringGrid1: TStringGrid;
    ...
  end;

...


procedure TStringGrid.CalcDrawInfo(var DrawInfo: TGridDrawInfo);
begin
  inherited;
end;

ConnorMcLeod 23. Feb 2015 14:04

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Müßte auch so gehen (rein ausm Kopf):

Delphi-Quellcode:
type
  TMyDemoGrid = class(TStringGrid)
  end;

...

var
  FgrdDemo: TMyDemoGrid;

...

procedure MachWas;
var
  DrawInfo: TGridDrawInfo;
begin
  FgrdDemo.CalcDrawInfo(DrawInfo);

DeddyH 23. Feb 2015 14:10

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Japp, solange "nur" protected (ohne strict).

Sir Rufo 23. Feb 2015 14:12

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Also ich habe es gerade getestet (XE7) und Delphi-Referenz durchsuchenTStringGrid.ClientWidth ändert sich, wenn die Scrollbar ins Spiel kommt.
Delphi-Quellcode:
type
  TForm1 = class( TForm )
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click( Sender: TObject );
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click( Sender: TObject );
begin
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  Label1.Caption := StringGrid1.ClientWidth.ToString;
end;
Allerdings muss man aufpassen, wenn man innerhalb eines StringGrid-Events auf diese Eigenschaft zugreifen möchte. Diese wird nämlich quasi zum Abschluss der gesamten Aktualisierung gesetzt und ist somit erst nach Abarbeitung der ganzen Events verfügbar.

BadenPower 23. Feb 2015 14:56

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Zitat:

Zitat von Helmi (Beitrag 1291117)
Zitat:

Zitat von DeddyH (Beitrag 1291116)
Naja, da kommt man ja noch drum herum.

verrätst du mir auch wie?

So würde es auch gehen:

Delphi-Quellcode:
implementation

{$R *.dfm}

type
   TStringGridAntiProtect = class(TStringGrid);

procedure TF_DevelopTest.Button1Click(Sender: TObject);
var
  DrawInfo: TGridDrawInfo;
begin
  TStringGridAntiProtect(StringGrid1).CalcDrawInfo(DrawInfo);
end;

Helmi 23. Feb 2015 15:04

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Zitat:

Zitat von Sir Rufo (Beitrag 1291122)
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender: TObject );
begin
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  Label1.Caption := StringGrid1.ClientWidth.ToString;
end;

In diesem Beispiel dürfte sich ClientWidth gar nicht verändern, da du nur Zeilen hinzufügst, dadurch die Höhe veränderst, nicht aber die Breite

Sir Rufo 23. Feb 2015 15:28

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Zitat:

Zitat von Helmi (Beitrag 1291132)
Zitat:

Zitat von Sir Rufo (Beitrag 1291122)
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender: TObject );
begin
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  Label1.Caption := StringGrid1.ClientWidth.ToString;
end;

In diesem Beispiel dürfte sich ClientWidth gar nicht verändern, da du nur Zeilen hinzufügst, dadurch die Höhe veränderst, nicht aber die Breite

Falsch, irgendwann können nicht mehr alle Zeilen angezeigt werden und dann kommt die Scrollbar und die Änderung der Breite

Helmi 23. Feb 2015 15:34

AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
 
Zitat:

Zitat von Sir Rufo (Beitrag 1291139)
Zitat:

Zitat von Helmi (Beitrag 1291132)
Zitat:

Zitat von Sir Rufo (Beitrag 1291122)
Delphi-Quellcode:
procedure TForm1.Button1Click( Sender: TObject );
begin
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  Label1.Caption := StringGrid1.ClientWidth.ToString;
end;

In diesem Beispiel dürfte sich ClientWidth gar nicht verändern, da du nur Zeilen hinzufügst, dadurch die Höhe veränderst, nicht aber die Breite

Falsch, irgendwann können nicht mehr alle Zeilen angezeigt werden und dann kommt die Scrollbar und die Änderung der Breite

Ich geb mich geschlagen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr.
Seite 2 von 2     12   

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