Показать сообщение отдельно
  #8  
Старый 16.03.2018, 13:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от aford
...самому сделать не получается
Не получается, это потому как слишком глобальной оказалась поставленная задача, нужно разбить её на этапы и задавать вопросы по мере их прохождения. Вот подсказки:

Сначала хорошенько подумать, а точно-ли нужен именно такой, самописный вариант отображения данных или всёж можно обойтись уже имеющимся, от разработчиков?

При положительном ответе, думать дальше:

Убрать видимую разметку ячеек проще всего в дизайнтайме, для чего в Options отключить (=false) флажки dgEditing-dgTitles-dgIndicator-dgColLines-dgRowLines, тогда на екране останутся "голые" данные, как на рисунке.

Отследить положение курсора мышки можно с помощью функции GetCursorPos(), или глобальных значений Mouse.CursorPos.X/Y

За отрисовку ячеек в "таблице" отвечает обработчик DrawColumnCell, вот в нём нужно найти положение мышки, если она в пределах строки, то "выделить контуром строку" посредством вызова .Canvas.FrameRect(), эта низкоуровневая функция закрашивает не всё "тело" области, как это делает .Canvas.FillRect(), а только её контур, рамку как на рисунке

Вывод тескта в ячее - это .Canvas.TextOut()

Узнать над каким полем висит мышь
Код:
var
ScrPt, GrdPt: TPoint;
Cell: TGridCoord;
begin
ScrPt := Mouse.CursorPos;
GrdPt := DBGrid.ScreenToClient(ScrPt);
Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y);
// Col := Cell.X;
// Row := Cell.Y;
end;
...
FieldText: string;
DLink: TDataLink;
OldActiveRec: Integer;
... 

Cell := DBGrid.MouseCoord(GrdPt.X, GrdPt.Y);
FieldText := '';   
DLink := THackDBGrid(DBGrid).DataLink;
if Assigned(DLink) then
begin
  if (Cell.X < = 0)or(Cell.Y < = 0) then Exit;
  OldActiveRec := DLink.ActiveRecord;
  try
    DLink.ActiveRecord := Cell.Y-1;
    FieldText:= DBGrid.Columns[Cell.X-1].Field.Text;
  finally
    DLink.ActiveRecord := OldActiveRec;
  end;
end;
drkb. Пробуйте, появятся вопросы - спрашивайте
Ответить с цитированием