![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить значение ячейки в 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