Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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

а вообще наверняка сущействует более эргономичное решение чем твое :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо