Für unser dbgrid möchten wir, dass die Bildlaufleisten ständig ausgeblendet werden. Da TDBGrid keine Eigenschaften für Bildlaufleisten hat, verwenden wir:
%Vor%Wenn wir jedoch die Größe des Fensters (und des Panels mit dem dbgrid) ändern, z eine Sekunde lang erscheinen die Bildlaufleisten und werden erst nach dem Aufruf wieder ausgeblendet die beiden oben genannten Methoden.
Eine Lösung besteht darin, diese Methoden in DrawColumnCell aufzurufen, was jedoch zu Flackern führt des dbgrid, selbst wenn DoubleBuffered auf true gesetzt ist.
Gibt es eine Möglichkeit, die Bildlaufleisten dauerhaft zu verbergen?
Vielen Dank im Voraus!
Versteckt die Bildlaufleiste des TDBGrid
in CreateParams
hat eine kurze Wirkung. Es gibt die Prozedur UpdateScrollBar
, die bewirkt, dass die Bildlaufleiste sichtbar ist. Dies geschieht, weil die Sichtbarkeit der Bildlaufleiste abhängig von den angezeigten Daten gesteuert wird. Daher wird diese Prozedur aufgerufen, wenn die Daten geändert werden.
Da diese Prozedur immer dann aufgerufen wird, wenn die Bildlaufleiste aktualisiert werden muss und weil sie virtuell ist, ist es an der Zeit, sie zu überschreiben.
Das folgende Codebeispiel verwendet die interposed Klasse, also alle Komponenten TDBGrid
auf dem Formular, das gehört zu dieser Einheit verhält sich das gleiche:
Die Bildlaufleiste wird in TDBGrid.UpdateScrollBar
aktualisiert. Leider ist diese Routine nicht virtuell (zumindest in D7). Innerhalb dieser Routine wird SetScrollInfo
aufgerufen, eine Windows-Funktion, die keine Nachricht sendet, die abgefangen werden könnte. Kein Glück dort.
Die einzige verbleibende Möglichkeit besteht darin, den Nachrichtenhandler für die Nachricht zu überschreiben, die gesendet wird, wenn das Steuerelement die Größe ändert:
%Vor% Obwohl UpdateScrollBar
auch aufgerufen wird, wenn die Daten geändert werden oder wenn sich die Active
-Eigenschaft der Datenmenge ändert, scheint dies hier ohne Flackern zu funktionieren.
Vielleicht überschreiben Sie CreateParams()
Methode und entfernen WS_HSCROLL
und WS_VSCROLL
Bits Form Params.Style
macht den Unterschied. Sie können versuchen, es mit dem Klassenhelfer zu machen, wenn Sie keinen eigenen Nachkommen schreiben möchten.
Sie können auch die API SetWindowLongPtr mit% co_de verwenden %, um den Stil des Fensters zu ändern, aber dann gehen die Änderungen verloren, wenn das Fenster des Gitters aus irgendeinem Grund neu erstellt wird (also ist es nicht so zuverlässig wie GWL_STYLE
zu überschreiben).
Tags und Links delphi scrollbar dbgrid c++builder c++builder-xe