Delphi dbgrid непрерывная прокрутка
Я делаю приложение, которое хранит заказы и печатает счета. У меня есть несколько ярлыков, ярлыков, темем, кнопок, источника данных, пометки, всплывающего меню и dbgrid в моей форме.
Когда я собираю программу и прокручиваю вниз полосу прокрутки dbgrid, она прокручивается после того, как я отпускаю кнопку мыши. Но я хочу непрерывную прокрутку.
Привет
2 ответа
Это называется отслеживанием большого пальца. Извлеките новый класс, чтобы переопределить поведение прокрутки. Пример использования промежуточного класса:
type
TDBGrid = class(DBGrids.TDBGrid)
private
procedure WmVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;
TForm1 = class(TForm)
DBGrid1: TDBGrid;
..
implementation
procedure TDBGrid.WmVScroll(var Message: TWMVScroll);
begin
if Message.ScrollCode = SB_THUMBTRACK then
Message.ScrollCode := SB_THUMBPOSITION;
inherited;
end;
Вы также можете заменить WindowProc
контроля, если вы не хотите выводить новый класс. Все, что вам нужно сделать, это справиться WM_VSCROLL
сообщение. Вот пример, как это сделать.
Вот другое решение, упомянутое Сертаком Акьюзом без необходимости выводить новый класс из TDBGrid:
private
FOrgDBGridWndProc: TWndMethod;
procedure DBGridWndProc(var Msg: TMessage);
// ...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOrgDBGridWndProc:= DBGrid1.WindowProc;
DBGrid1.WindowProc := DBGridWndProc;
end;
procedure TForm1.DBGridWndProc(var Msg: TMessage);
begin
if (Msg.Msg = WM_VSCROLL) and
(LongRec(Msg.wParam).Lo = SB_THUMBTRACK) then
begin
LongRec(Msg.wParam).Lo := SB_THUMBPOSITION;
end;
if Assigned(FOrgDBGridWndProc) then
FOrgDBGridWndProc(Msg);
end;