RxDBGrid - хинт для ячейки

Модераторы: alexs, Модераторы

RxDBGrid - хинт для ячейки

Сообщение naum_off » 25.08.2016 13:49:17

alexs
Можно добавить в RxDBGrid событие на показ хинта для ячейки, как это сделано в EhLib?
Часто в таблицах попадаются поля с кодами, расшифровка которых берется из БД.
Пробовал по старинке через MouseMove, но это полная фигня. Событие генерится слишком часто, а Grid.MouseToCell возвращает координаты ячейки даже если курсор вне пределов ячеек таблицы (внизу или справа где пустое пространство).
Код: Выделить всё
type
  TMyGrid = class(TCustomDBGrid);

procedure TFrmMain.GridMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: integer);
var
  Grid: TRxDBGrid;
  row, col: integer;
  rec: integer;
begin
  Grid := Sender as TRxDBGrid;
  Grid.MouseToCell(X, Y, col, row);
  if col > -1 then
  begin
    rec := TMyGrid(Grid).DataLink.ActiveRecord;
    try
      TMyGrid(Grid).DataLink.ActiveRecord := row;
      Grid.Hint := 'Content of field : ' + Grid.Columns[col].Field.AsString;
      Application.ActivateHint(Mouse.CursorPos);
    finally
      TMyGrid(Grid).DataLink.ActiveRecord := rec;
    end;
  end; 
end;                 
naum_off
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.08.2016 13:31:45

Re: RxDBGrid - хинт для ячейки

Сообщение alexs » 25.08.2016 19:57:49

А какое там объявление? Кинь ссылку на описание - не хочу сам интерфейс изобретать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid - хинт для ячейки

Сообщение naum_off » 25.08.2016 23:28:40

Для себя сделал вот так
Код: Выделить всё
  TRxDBGridDataHintShowEvent = procedure(Sender: TObject; CursorPos: TPoint;
    Cell: TGridCoord; Column: TRxColumn; var HintStr: string;
    var Processed: boolean) of object; 


procedure TRxDBGrid.CMHintShow(var Message: TLMessage);
var
  Cell: TGridCoord;
  tCol: TRxColumn;

  HintStr_: string;
  Processed: boolean;

  rec: integer;
  CellRect_: TRect;
begin
  if Assigned(TCMHintShow(Message).HintInfo) then
  begin
    with TCMHintShow(Message).HintInfo^ do
    begin
      Cell := MouseCoord(CursorPos.X, CursorPos.Y);
      tCol := TRxColumn(ColumnFromGridColumn(Cell.X));
      if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) then
      begin
        if Assigned(tCol) and (TRxColumnTitle(tCol.Title).Hint <> '') and
          (TRxColumnTitle(tCol.Title).FShowHint) then
          HintStr := TRxColumnTitle(tCol.Title).Hint;
      end
      else
      begin
        CellRect_ := CellRect(Cell.X, Cell.Y);
        if (CellRect_.Bottom > CursorPos.Y) and (CellRect_.Right > CursorPos.X) then
          if Assigned(FOnDataHintShow) then
          begin
            rec := DataLink.ActiveRecord;
            try
              DataLink.ActiveRecord := Cell.y - 1;
              HintStr_ := tCol.Field.AsString;
            finally
              DataLink.ActiveRecord := rec;
            end;
            Processed := False;
            FOnDataHintShow(Self, CursorPos, Cell, tCol, HintStr_, Processed);
            if Processed then
              HintStr := HintStr_;
          end;
      end;
    end;
  end;
  inherited CMHintShow(Message);
end;
naum_off
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.08.2016 13:31:45

Re: RxDBGrid - хинт для ячейки

Сообщение alexs » 26.08.2016 23:27:18

Спасибо!
Добавил в ревизии 5106.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxDBGrid - хинт для ячейки

Сообщение naum_off » 20.09.2016 09:49:32

alexs
Поправь метод, а то вылетает при наведении курсора на столбец-индикатор.

Код: Выделить всё
procedure TRxDBGrid.CMHintShow(var Message: TLMessage);
var
  Cell: TGridCoord;
  tCol: TRxColumn;
  HintStr_: string;
  Processed: boolean;
  rec: integer;
  CellRect_: TRect;
begin
  if Assigned(TCMHintShow(Message).HintInfo) then
  begin
    with TCMHintShow(Message).HintInfo^ do
    begin
      Cell := MouseCoord(CursorPos.X, CursorPos.Y);
      tCol := TRxColumn(ColumnFromGridColumn(Cell.X));
      if (Cell.Y = 0) and (Cell.X >= Ord(dgIndicator in Options)) then
      begin
        if Assigned(tCol) and (TRxColumnTitle(tCol.Title).Hint <> '') and
          (TRxColumnTitle(tCol.Title).FShowHint) then
          HintStr := TRxColumnTitle(tCol.Title).Hint;
      end
      else
      if Cell.X >= Ord(dgIndicator in Options) then
      begin
        CellRect_ := CellRect(Cell.X, Cell.Y);

        if (CellRect_.Bottom > CursorPos.Y) and (CellRect_.Right > CursorPos.X) then
          if Assigned(FOnDataHintShow) then
          begin
            rec := DataLink.ActiveRecord;
            try
              DataLink.ActiveRecord := Cell.y - 1;
              HintStr_ := tCol.Field.DisplayText;
            finally
              DataLink.ActiveRecord := rec;
            end;
            Processed := False;
            FOnDataHintShow(Self, CursorPos, Cell, tCol, HintStr_, Processed);
            if Processed then
              HintStr := HintStr_;
          end;
      end;
    end;
  end;
  inherited CMHintShow(Message);
end;                       
naum_off
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.08.2016 13:31:45

Re: RxDBGrid - хинт для ячейки

Сообщение alexs » 20.09.2016 10:39:25

Спасибо. Готово.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru