Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2015, 06:29   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Смещение выделенной строки в DBGrid

Привет.

Если проматывать список колесом, то выделение конкретной строки тоже смещается. Как сделать, чтобы выделение строки не смещалось при прокручивании списка?

bilibian вне форума Ответить с цитированием
Старый 03.01.2015, 09:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У грида есть событие OnMouseWheel?
Если да то попробуй вычислять разницу при прокрутке, на сколько записей ролер прокручивает, и используя метод MoveBy у Датасета, к которому грид подключен меняй текущую запись. Проблема будет только при вычислении кол-ва записей прокрутки, ну тут идей нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2015, 13:55   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так, что ли:
Код:
type
  TDBGrid = class(DBGrids.TDBGrid)
  protected
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  public
    property OnMouseWheel;
  end;
  TForm1 = class(TForm)
...
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  DBGrid1.OnMouseWheel:=DBGridMouseWheel;
end;

procedure TForm1.DBGridMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var CountLine: Integer;
begin
  if (WheelDelta<>0) and 
     Assigned(DBGrid1.DataSource) and
     Assigned(DBGrid1.DataSource.DataSet) and
     DBGrid1.DataSource.DataSet.Active then begin
    DBGrid1.DataSource.DataSet.MoveBy(-WheelDelta div 120);
{или вместо предыдущей строки
    SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,@CountLine,0);
    DBGrid1.DataSource.DataSet.MoveBy(-Sign(WheelDelta)*CountLine);
}
    DBGrid1.Invalidate;
  end;
end;

function TDBGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result:=True;
end;

function TDBGrid.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result:=True;
end;
Лучше все это вытащить в свой компонент наследник TCustomDBGrid
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.01.2015 в 14:06.
Аватар вне форума Ответить с цитированием
Старый 03.01.2015, 15:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так, что ли:
Вот вот. Примерно так я и имел ввиду. Вот только формула WheelDelta div 120 может не совсем подходить. Ну это на практике лучше проверить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2015, 15:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

120 от размера шрифта зависит? Проверять лень. Лучше то, что закоментировано или -Sign(WheelDelta) для единичного смещения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 03.01.2015 в 15:47.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос выделенной строки с дальнейшим добавлением, поочередно из dbgrid в stringgrid Ksenia Weide БД в Delphi 9 28.04.2014 01:10
номер выделенной строки в DBGrid Delphi tanek Помощь студентам 2 12.03.2012 17:08
Удаление выделенной строки из DBGrid Sinker БД в Delphi 9 20.05.2011 03:09
Получение данных отдельного поля из выделенной строки DBGrid Kuzya59 БД в Delphi 3 18.02.2010 13:11
доступ к элементам выделенной строки в DBGrid yulia БД в Delphi 2 12.12.2007 12:51