Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-1082124067
xman
2004-04-16 18:01
2004.07.04
чтение текста


9-1079455657
AlexXn
2004-03-16 19:47
2004.07.04
DelphiX


8-1082600639
Boson
2004-04-22 06:23
2004.07.04
Фильтр НЧ


1-1087414376
dido
2004-06-16 23:32
2004.07.04
Как перейти с одного Edit в другое нажатием Enter?


1-1087329553
AAAlexeyAAA
2004-06-15 23:59
2004.07.04
Ув. мастера. К вам вопрос о представлении типов данных.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский