Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизКак добраться до DBGrid.FPressedCell.X Найти похожие ветки
← →
Stas (2004-06-07 13:01) [0]Суть такая:
На экране в DBGrid - SQL запрос. Поставил у DBGrid свойство dgRowSelect=True. Т.е. подсвечена вся строка. А одно из полей DBGrid - checkbox. Перехватываю двойное нажание, но определить что двойной щелчек произошел именно на CheckBox не могу. Все DBGrid.Columns.Grid.Col и другие возвращают номер(или имя) первого поля в DBGride(строка подсвечена вся и отдельная колонка не индифицируется).
Через inspector нашел DBGrid.FPressedCell.X который указывает нужное мне значение. Его показывает даже watch(дебаг окно).
Но в программе использовать не удается: "Undeclared". Т.е. переменная внутренняя, вероятно.
Как мне до нее добраться то?
← →
roottim (2004-06-07 14:02) [1]если она в private то написать дочерний класс в юните исходника, где ее и откроеш, а если protected то тоже дочерний класс, но его можеш писать в своем юните... только вряд ли он protected :)
а вообще наверняка сущействует более эргономичное решение чем твое :)
← →
Курдль © (2004-06-07 14:08) [2]
Specifies the index of the currently selected column in the Columns array.
property SelectedIndex: Integer;
← →
NAlexey © (2004-06-07 15:02) [3]
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;
← →
Stas (2004-06-07 23:04) [4]2 roottim: Если можно поподробнее, а то для меня это пока слишком мудренно звучит. Может примерчик?
>сущействует более эргономичное решение чем твое :)
Внимательно слушаю! :)
2 Курдль: Не прокатывает, ВСЕГДА возвращает 0. Т.е. первый столбец.
2 NAlexey: Это если известны размеры Grida?
А вообщем спасибо, буду пытаться что то сделать твоим методом.
← →
Курдль (2004-06-07 23:43) [5]
> 2 Курдль: Не прокатывает, ВСЕГДА возвращает 0. Т.е. первый
> столбец.
Отключи RowSelect.
← →
KSergey © (2004-06-08 06:54) [6]> [5] Курдль (07.06.04 23:43)
> Отключи RowSelect.
Это уже изменение условия задачи.
> [4] Stas (07.06.04 23:04)
> 2 NAlexey: Это если известны размеры Grida?
А его размеры и так всегда известны ;)
← →
ЮЮ © (2004-06-08 07:41) [7]> Отключи RowSelect.
> Это уже изменение условия задачи.
RowSelect означает, что тв выбирать будешь ТОЛЬКО СТРОКИ, а не отдельные поля. А для разукрашивания выбранной строки надо использовать не RowSelect, а отрисовать в OnDraw...
← →
NAlexey © (2004-06-08 07:59) [8]>Stas (07.06.04 23:04) [4]
Размеры грида здесь вообще нипричем. Check имеет определенные размеры и располагается посередине ячейки. При двойном клике выясняешь что мышь находится в пределах области чека.
← →
Stas (2004-06-08 11:35) [9]2 NAlexey. Да я разобрался, единственная нестыковочка - срабатывает в середине ЛЮБОГО поля, а не только CheckBox.
2 ЮЮ. Попробую.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c