Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

Получить значение ячейки в DBGrid   Найти похожие ветки 

 
nstur   (2006-01-17 13:46) [0]

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


 
msguns ©   (2006-01-17 14:02) [1]

DBGrid1.SelectedField.AsString


 
msguns ©   (2006-01-17 14:06) [2]

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


 
Lexer ©   (2006-01-17 14:15) [3]

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


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

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


 
Sergey13 ©   (2006-01-17 14:20) [5]

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


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

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


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

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


 
Val ©   (2006-01-17 15:42) [8]

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


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

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


 
ANB ©   (2006-01-17 17:24) [10]


> nstur   (17.01.06 15:51) [9]

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


 
DimDim ©   (2006-01-17 19:22) [11]

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


 
tech ©   (2006-01-17 22:07) [12]

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;


 
allex299 ©   (2006-01-17 22:43) [13]

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


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

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 <- твоя ячейка


 
ЮЮ ©   (2006-01-18 08:22) [15]


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


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

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


 
menart ©   (2006-01-18 09:21) [16]

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


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

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


 
msguns ©   (2006-02-01 11:56) [18]

Да


 
fox ©   (2006-02-02 12:27) [19]

Как пример :)
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;


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

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

Это ХИТ.



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.032 c
6-1134394900
user51
2005-12-12 16:41
2006.04.02
как обратися к сокету зная SocketHandle


3-1139307056
kblc
2006-02-07 13:10
2006.04.02
Password on DB MS Access


2-1142886765
Luarv
2006-03-20 23:32
2006.04.02
Удалить элемент ФАЙЛА


2-1142528321
Ell
2006-03-16 19:58
2006.04.02
RichEdit замена текста


4-1137257217
Guest386x
2006-01-14 19:46
2006.04.02
Чтение видеобуфера