Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Номер записи DataSet над которым находится курсор


Автор: hug 27.7.2007, 18:09
Ребят, выручайте, горю
мыслей уже больше нет

значит так пишу класс. "Всплывающая подсказка". при наведении на что-либо выскакивает форма, которая описывается ХМL. Ну и дальше с этой формы можно идти дальше, в завиисоти от ХML

Так вот в этой всплывающей подсказке мне нужно использовать данные строки DataSet а, над которым завис курсор для дальнейшего использование в запросе.этот DataSet просмтаривается через TDBGrid. То есть наводим на нужную строку Grid он считывает данные выполняется запрос и в подсказке всплывающей выводится результат запроса

Строку и столбец грида, над которым завис курсор мыши опеределя с помощью функции MouseCoord. он возвращает строку и столбец грида. получает положение курсора на экране. И все работает хорошо, пока весь датасет влазит в грид. Но когда появляется скрол и мы скролим и наводим мышью на строку, то MouseCoord возвращает строку грида а не датасета. То есть всегда фиксировано 1..10. Например ( если грид на 10 строк). так кот как бы мне узнать над какой строкой ДАТАСЕТА завис мой курсор??

может как то можно отщитать сколько записей грида скрол отщитал?
может как то можно узнать какие записи датасета сейчас показывт грид при текущем положении скролла.

Пример. Выводим Table 20 строк в Грид на 10 строк.
прокручиваем грид на 10-20 строки. наводим мышкой на 3 строку грида и соотв на 13 строку датасета mousecoord показывает 3. вот как мне 13 получить?

Спасайте:(

Автор: ALeXandrK 27.7.2007, 21:48
Мне кажется нужно не MouseCoord использовать, а MouseToCell(X, Y, ACol, ARow),
которая вернет номер строки и столбца (координаты ячейки) без проблем - сколько не скроль smile 

Автор: hug 28.7.2007, 13:37
только у TDBGrid нет такого метода
это только у StringGrid

Автор: ALeXandrK 28.7.2007, 15:04
Может стоит попробовать перенести этот метод в TDBGrid?! smile 
Если не получется или лень, тогд использовать сторонний DBGrid, где уже такой метод есть.
К таким относится грид в библиотеке http://jvcl.sourceforge.net/. smile 

Автор: Savek 28.7.2007, 16:51
Примерно так
Код

type
TDBHack = class(TDBGrid);
end;
...

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var GrCoord : TGridCoord;
      rn : Integer;
begin
GrCoord:=TDBHack(DBGrid1).MouseCoord(x,y); 
if (GrCoord.X>0)and(GrCoord.Y>0) then begin

  ADOTable1.DisableControls;
  rn:=GrCoord.Y-TDBHack(DBGrid1).Row;
  ADOTable1.MoveBy(rn);

  DBGrid1.Hint:=ADOTable1.FieldByname('Hint fieldname').AsString;

  ADOTable1.MoveBy(rn*-1);
  ADOTable1.EnableControls;
  end;
end;


Автор: hug 28.7.2007, 18:39
Цитата(ALeXandrK @ 28.7.2007,  15:04)
Может стоит попробовать перенести этот метод в TDBGrid?! smile 
Если не получется или лень, тогд использовать сторонний DBGrid, где уже такой метод есть.
К таким относится грид в библиотеке http://jvcl.sourceforge.net/. smile

не пройдет в проекте уже куча гридов.
менять их не выход

Автор: ALeXandrK 28.7.2007, 20:41
А добавить это свойство совсем никак?
Ну если никак, то тогда предлагаю встроить этот метот прям в оброботчик OnMouseMove
(или через что ты там выводишь hint), если это возможно.

Посмотри для начала этот метод - там же на входе только X,Y. Это как раз то, что тебе
нужно. Осталось только алгоритм преобразования X,Y в Col и Row подсмотреть smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)