![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добраться до DBGrid.FPressedCell.X [D7]
Stas © (2004-06-07 13:01:00)Суть такая:
На экране в DBGrid - SQL запрос. Поставил у DBGrid свойство dgRowSelect=True. Т.е. подсвечена вся строка. А одно из полей DBGrid - checkbox. Перехватываю двойное нажание, но определить что двойной щелчек произошел именно на CheckBox не могу. Все DBGrid.Columns.Grid.Col и другие возвращают номер(или имя) первого поля в DBGride(строка подсвечена вся и отдельная колонка не индифицируется).
Через inspector нашел DBGrid.FPressedCell.X который указывает нужное мне значение. Его показывает даже watch(дебаг окно).
Но в программе использовать не удается: "Undeclared". Т.е. переменная внутренняя, вероятно.
Как мне до нее добраться то?
Stas (2004-06-08 11:35:00) [1]2 NAlexey. Да я разобрался, единственная нестыковочка - срабатывает в середине ЛЮБОГО поля, а не только CheckBox.
2 ЮЮ. Попробую.
NAlexey (2004-06-08 07:59:00) [2]>Stas (07.06.04 23:04) [4]
Размеры грида здесь вообще нипричем. Check имеет определенные размеры и располагается посередине ячейки. При двойном клике выясняешь что мышь находится в пределах области чека.
ЮЮ (2004-06-08 07:41:00) [3]> Отключи RowSelect.
> Это уже изменение условия задачи.
RowSelect означает, что тв выбирать будешь ТОЛЬКО СТРОКИ, а не отдельные поля. А для разукрашивания выбранной строки надо использовать не RowSelect, а отрисовать в OnDraw...
KSergey (2004-06-08 06:54:00) [4]> [5] Курдль (07.06.04 23:43)
> Отключи RowSelect.
Это уже изменение условия задачи.
> [4] Stas (07.06.04 23:04)
> 2 NAlexey: Это если известны размеры Grida?
А его размеры и так всегда известны ;)
Курдль (2004-06-07 23:43:00) [5]
> 2 Курдль: Не прокатывает, ВСЕГДА возвращает 0. Т.е. первый
> столбец.
Отключи RowSelect.
Stas (2004-06-07 23:04:00) [6]2 roottim: Если можно поподробнее, а то для меня это пока слишком мудренно звучит. Может примерчик?
>сущействует более эргономичное решение чем твое :)
Внимательно слушаю! :)
2 Курдль: Не прокатывает, ВСЕГДА возвращает 0. Т.е. первый столбец.
2 NAlexey: Это если известны размеры Grida?
А вообщем спасибо, буду пытаться что то сделать твоим методом.
NAlexey (2004-06-07 15:02:00) [7]
const
CheckWidth = 15;
CheckHeight = 15;
type
TxGrid = class(TCustomGrid);
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
Pt: TPoint;
ARow, ACol: Integer;
TheRect, CheckRect: TRect;
CellSize: TSize;
GC: TGridCoord;
begin
GetCursorPos(Pt);
Pt := DBGrid1.ScreenToClient(Pt);
GC := DBGrid1.MouseCoord(Pt.X, Pt.Y);
TheRect := TxGrid(DBGrid1).CellRect(GC.X, GC.Y);
CellSize.cx := TheRect.Right - TheRect.Left;
CellSize.cy := TheRect.Bottom - TheRect.Top;
CheckRect.Left := TheRect.Left + (CellSize.cx - CheckWidth) div 2;
CheckRect.Top := TheRect.Top + (CellSize.cy - CheckHeight) div 2;
CheckRect.Right := CheckRect.Left + CheckWidth;
CheckRect.Bottom := CheckRect.Top + CheckHeight;
if PtInRect(CheckRect, Pt) then
ShowMessage('Yes')
else
ShowMessage('No');
end;
Курдль (2004-06-07 14:08:00) [8]
Specifies the index of the currently selected column in the Columns array.
property SelectedIndex: Integer;
roottim (2004-06-07 14:02:00) [9]если она в private то написать дочерний класс в юните исходника, где ее и откроеш, а если protected то тоже дочерний класс, но его можеш писать в своем юните... только вряд ли он protected :)
а вообще наверняка сущействует более эргономичное решение чем твое :)