Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить значение ячейки в DBGrid [D7]


nstur ©   (2006-01-17 13:46:00) 

Подскажите, как при наведении на ячейку указателем мыши получить ее значение.
Мне нужен Hint для каждой ячейки.


nstur   (2006-02-08 10:53:00) [1]

Проверил. Отлично работает.

Это ХИТ.


fox   (2006-02-02 12:27:00) [2]

Как пример :)
type
 TCrackDBGrid = class(TCustomDBGrid)
 end;

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
grCoord: TGridCoord;
aGrid: TCrackDBGrid;
oldActiveRecord: integer;
delta: integer;
begin
 aGrid := TCrackDBGrid(Sender);
 grCoord := aGrid.MouseCoord(X, Y);
 aGrid.DataSource.DataSet.DisableControls;
 oldActiveRecord := aGrid.DataLink.ActiveRecord;
 delta := grCoord.Y - aGrid.DataLink.ActiveRecord - 1;
 aGrid.DataLink.DataSet.MoveBy(delta);
 if grCoord.X > 0 then
   caption := format( 'строка: %d, столбец: %d, delta: %d, текст: %s',
             [grCoord.Y, grCoord.X, delta, aGrid.Columns[grCoord.X-1].Field.DisplayText]);
 aGrid.DataLink.ActiveRecord := oldActiveRecord;
 aGrid.DataSource.DataSet.EnableControls;
end;


msguns   (2006-02-01 11:56:00) [3]

Да


nstur   (2006-02-01 11:50:00) [4]

Существует ли возможность получить значение не сфокусированной ячейки?
Т.е. на которую наведен указатель мышки.


menart   (2006-01-18 09:21:00) [5]

Как можно получить какие данные отображаются в DBGRid, те номера полей с такого по такой


ЮЮ   (2006-01-18 08:22:00) [6]


> allex299 ©   (17.01.06 22:43) [13]


<переменная> := TCustomDBGrid.SelectedField.Value.

P/S. Правда это только из выделенной ячейки.
А > из строки DBGrid, да в одну переменную - оно это надо?


nstur   (2006-01-18 07:47:00) [7]

allex299- Один из способов:
OnDrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
begin
 with (Sender as TDBGrid).Canvas do begin
   if (gdFocused in State) then ...

    Column <- твоя ячейка


allex299   (2006-01-17 22:43:00) [8]

Подскажите как получить значение ячейки в переменную из строки DBGrid по клику мыши или по Enter если строка активна.


tech   (2006-01-17 22:07:00) [9]

procedure TForm1.GridMouseMove(Sender: TObject; Shift: TShiftState;  X, Y: Integer);
var
 Coord: TGridCoord;
begin
 Coord := dg.MouseCoord(X,Y);
 if dg.Columns[Coord.X].Field = нужное поле then
   ...

end;


DimDim   (2006-01-17 19:22:00) [10]

Еще раз: библиотека EhLib. Кроме хинта развернутого содержимого ячейки там масса других прелестей. Например, многострочная шапка, сумма по полю, работающий скролинг и т.д.


ANB   (2006-01-17 17:24:00) [11]


> nstur   (17.01.06 15:51) [9]

По координатам.


nstur   (2006-01-17 15:51:00) [12]

Все понятно. У меня примерно так же. Но как получить ячейку при наведении на нее мышкой?


Val   (2006-01-17 15:42:00) [13]

>nstur   (17.01.06 13:46)
обратите внимание на [7] msguns ©   (17.01.06 15:00), поскольку: хинт имеет свойство отображаться лишь опр. промежуток времени + удобство отображения + отсутствие сторонних компонентов(при надобности)


msguns   (2006-01-17 15:00:00) [14]

Для отображения "длинных" текстов есть такие решения:
1. Панель на этой же форме с мемо, отображающим текущее "длинное" поле датасета (если полей несколько, то для каждого - свое мемо)
2. Форма fsStayOnTop с тем же TMemo, отображающим поле датасета. Удобство по сравнению с 1) в том, что юзер может передвинуть его в любое удобное место экрана или изменить размер до нужного.
3. Рисовать содержимое поля в ячейке, варьируя шрифтом и высотой строки грида в событии OnDrawColumnCell
4. Показывать текст в статус-баре
5. Показывать текст в спец.отведенном контроле по кнопке


nstur   (2006-01-17 14:21:00) [15]

OnMouseMove возвращает X, Y, а мне нужна ячейка или запись.


Sergey13   (2006-01-17 14:20:00) [16]

2nstur   (17.01.06 13:46)
Поищи библиотеку EhLib в сети. Бесплатная последняя версия - 3.6. Там (в ее гриде) это уже реализовано. Хочешь юзай, хочешь смотри реализацию.


nstur   (2006-01-17 14:17:00) [17]

Содержимое очень большое. А когда строки начинаются одинаково, это просто сложно для юзера. Зачастую юзер я сам.


Lexer   (2006-01-17 14:15:00) [18]

Поюзай Grid.MouseCoord(X, Y)


msguns   (2006-01-17 14:06:00) [19]

Пардон, это только при нажатии на мышь. Если для хинта, то надо вычислять координаты мыши относительно грида, затем колонку, над которой мышь и т.д. в событии грида OnMouseMove.. В общем, муторно это.
А нафига ?


msguns   (2006-01-17 14:02:00) [20]

DBGrid1.SelectedField.AsString


Наверх

Титульная страница Поиск, карта сайта Написать письмо