Вниз
Скачать: CL | DM;

Как добраться до 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
6-1083934129
Denis_ada
2004-05-07 16:48
2004.07.04
прилож. кл.–серв. для работы с файлами и папками на удал.машине


3-1086602298
inic
2004-06-07 13:58
2004.07.04
Отмена запроса, но как ???


8-1082305824
ARY
2004-04-18 20:30
2004.07.04
Анимация велосипеда.


3-1086415647
Шнур
2004-06-05 10:07
2004.07.04
Доступ к данным


14-1087186912
X9
2004-06-14 08:21
2004.07.04
Новый проц




   Наверх