Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизCM_Hint Show обязателен? Найти похожие ветки
← →
Sandman29 © (2005-11-22 17:20) [0]Как в стандартный DBGrid добавить настраиваемый хинт, зависящий от различных полей строки?
Заключается ли горькая правда в том, что без наследования и добавления собственного события решить задачу невозможно?
← →
Leonid Troyanovsky © (2005-11-22 17:27) [1]
> Sandman29 © (22.11.05 17:20)
> Как в стандартный DBGrid добавить настраиваемый хинт, зависящий
> от различных полей строки?
> Заключается ли горькая правда в том, что без наследования
> и добавления собственного события решить задачу невозможно?
Реальность еще горше, бо даже сделать наследника не очень-то просто.
--
Regards, LVT.
← →
Sandman29 © (2005-11-22 17:36) [2]Leonid Troyanovsky © (22.11.05 17:27) [1]
Спасибо.
Интересно. В чем трудности с наследованием от TDBGrid и перекрытием одного метода?
Надеюсь, не придется заводить свои аналоги TColumn, TColumns и т.д.
← →
clickmaker © (2005-11-22 17:38) [3]
> Как в стандартный DBGrid добавить настраиваемый хинт, зависящий
> от различных полей строки?
попробуй через TApplication.OnShowHint
← →
Sandman29 © (2005-11-22 17:41) [4]clickmaker © (22.11.05 17:38) [3]
Пробовал, при переходе на другую строку того же грида событие не срабатывает.
← →
clickmaker © (2005-11-22 17:45) [5]
> Sandman29 © (22.11.05 17:41) [4]
а если через OnMouseMove
if (перешли на другую) then begin
Application.CancelHint;
DBGrid.Hint :=
← →
Leonid Troyanovsky © (2005-11-22 17:46) [6]
> Leonid Troyanovsky © (22.11.05 17:27) [1]
> Реальность еще горше, бо даже сделать наследника не очень-
> то просто.
Впрочем, может я сгустил тучи, т.е.
http://www.rsdn.ru/Forum/Message.aspx?mid=907742&only=1
Т.е., можно без наследника,
type
TCrackGrid = class (TDBgrid) ; // после приведения нам будут
доступны и защищенное свойство DataLink.
Ну, а вместо MoveBy д.б. что-то типа чтения из буфера записи
TDataSet.Buffers.
--
Regards, LVT.
← →
Sandman29 © (2005-11-22 17:51) [7]clickmaker © (22.11.05 17:45) [5]
Спасибо, интересная идея. Завтра попробую.
Leonid Troyanovsky © (22.11.05 17:46) [6]
Да, но, по-моему, все равно придется писать наследника для перекрытия CMHintShow.
← →
Leonid Troyanovsky © (2005-11-22 17:55) [8]
> Sandman29 © (22.11.05 17:51) [7]
> Да, но, по-моему, все равно придется писать наследника для
> перекрытия CMHintShow.
Скорее потребуется кракнуть и TDataSet, бо Buffers тоже protected.
Ну, а код показывающий hint тоже надо написать [5].
--
Regards, LVT.
← →
Sandman29 © (2005-11-23 11:17) [9]Большое спасибо Leonid Troyanovsky и clickmaker!
type
TDBGridEx = class(TDBGrid);
procedure TfmFullData.grDocumentsMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
const
OldRowIndex : Integer = -1;
var
GridCoord : TGridCoord;
OldActiveRecord : Integer;
begin
with TDBGridEx(Sender) do
begin
GridCoord := MouseCoord(HitTest.X, HitTest.Y);
if (GridCoord.X >= FixedCols)
and (GridCoord.Y >= FixedRows) then
begin
if GridCoord.Y <> OldRowIndex then
begin
Application.CancelHint;
OldActiveRecord := DataLink.ActiveRecord;
try
DataLink.ActiveRecord := GridCoord.Y - FixedRows;
// не заменять на Fields[], иначе не будет работать
// после перемещения колонки грида
Hint := DataLink.DataSet.FieldByName("MySecretField").AsString;
finally
DataLink.ActiveRecord := OldActiveRecord;
end;
OldRowIndex := GridCoord.Y;
end;
end
else
Application.CancelHint;
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c