![]() |
StringGrid: Breite der vertikalen Scrollbar ermitteln
Hallo,
gibt es die Möglichkeit die Breite der vertikalen Scrollbar eines StringGrid zu ermitteln? Ich hatte gehofft, dass sich ClientWidth dadurch ändert, aber leider bleibt der Wert mit/ohne Scrollbar gleich Was will ich eigentlich tun? (für manche eine schwierige Frage) Wenn die vertikale Scrollbar sichtbar ist, dann möchte ich die Breiten der Spalten des StringGrids reduzieren. Ob eine Scrollbar sichtbar ist, mach ich mit diesem Code:
Delphi-Quellcode:
(gefunden bei den
if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_VSCROLL) <> 0 then
ShowMessage('Vertical scrollbar is visible!'); if (GetWindowlong(Stringgrid1.Handle, GWL_STYLE) and WS_HSCROLL) <> 0 then ShowMessage('Horizontal scrollbar is visible!'); ![]() |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Schau Dir mal TGridDrawInfo an; vllt ersparst Du Dir dann das Gefummel mit den Scrollbars.
Besonders TGridDrawInfo.Horz.LastFullVisibleCell u dgl ... |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Versuch es mal mit
![]() Zitat:
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
hab aber bei den Schweizern noch einen Code für die Breite/Höhe gefunden ![]() |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Viele Wege führen zum Kompilat.
Was mich bei der Scrollbar-Überlegung stört ist, daß die Scrollbars nicht Teil des Problems sind, sondern nur ein Symptom. Das Problem ist ein zu breites Grid, das angepaßt werden muß. Wenn aus diversen Gründen grundsätzlich keine Scrollbars angezeigt würden (Optionen verändert etc.), dann hättest Du keine Scrollbars, aber das Grid wäre immer noch zu breit. Über die GridDrawInfo und LeftCol weißt Du alles, was Du wissen mußt:
Delphi-Quellcode:
var
DrawInfo: TGridDrawInfo; begin grdDemo.CalcDrawInfo(DrawInfo); |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Ich habe D2010, da heißt es in Grids.pas / Zeile 2465:
Delphi-Quellcode:
procedure TCustomGrid.CalcDrawInfo(var DrawInfo: TGridDrawInfo);
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
in XE2 ist CalcDrawInfo protected
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Naja, da kommt man ja noch drum herum.
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
(habs ned so mit knacken :-) ) |
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; |
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); |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Japp, solange "nur" protected (ohne strict).
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Also ich habe es gerade getestet (XE7) und
![]()
Delphi-Quellcode:
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.
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; |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
Delphi-Quellcode:
implementation
{$R *.dfm} type TStringGridAntiProtect = class(TStringGrid); procedure TF_DevelopTest.Button1Click(Sender: TObject); var DrawInfo: TGridDrawInfo; begin TStringGridAntiProtect(StringGrid1).CalcDrawInfo(DrawInfo); end; |
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
|
AW: StringGrid: Breite der vertikalen Scrollbar ermitteln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 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