Behalten Sie die Bildlaufleisten in einem Delphi-dbgrid verborgen (sogar bei der Größenänderung)

8

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!

    
user729103 23.09.2011, 13:15
quelle

3 Antworten

6

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:

%Vor%     
TLama 29.03.2012, 11:23
quelle
1

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.

    
NGLN 29.03.2012 11:31
quelle
0

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).

    
ain 23.09.2011 13:38
quelle