Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

Как получить координаты курсора в TStringGrid при DblClick?   Найти похожие ветки 

 
maxon   (2008-06-30 00:06) [0]

Как можно узнать координаты курсора в таблице при двойном щелчке мыши?
А еще лучше, сразу узнать координаты той ячейки, на которой кликнули.


 
Тын-Дын ©   (2008-06-30 00:09) [1]

Может стоило немного почитать форум и поискать сначала?

http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&search=DblClick


 
maxon   (2008-06-30 00:12) [2]

Да вот, интернет медленный. А вопросы иной раз издалека начинают задавать. Всего и не перечитаешь.


 
Amoeba ©   (2008-06-30 00:18) [3]


> сразу узнать координаты той ячейки, на которой кликнули.
>
>

MouseToCell
Подробности по F1


 
maxon   (2008-06-30 00:22) [4]

Да, вот спасибо еще раз (надеюсь не последний)!

procedure TfMain.sgMainDblClick(Sender: TObject);
var
 pPnt:       TPoint;
begin
GetCursorPos( pPnt );
pPnt:= sgMain.ScreenToClient( pPnt );

fMain.Caption:=  IntToStr( sgMain.MouseCoord( pPnt.X, pPnt.Y ).X ) + " X " +
                 IntToStr( sgMain.MouseCoord( pPnt.X, pPnt.Y ).Y );
end;


 
Игорь Шевченко ©   (2008-06-30 00:33) [5]

Убери fMain из кода


 
maxon   (2008-06-30 00:46) [6]

Вообще я хотел чтобы по двойному щелчку в ячейки начиналось ее редактирование, но при этом, чтобы в TStringGrid.Options было goRowSelect.
И вот что получилось:

procedure TfMain.sgMainDblClick(Sender: TObject);
var
 pPnt:       TPoint;
begin
 GetCursorPos( pPnt );
 pPnt:= sgMain.ScreenToClient( pPnt );

 if xRow > 0 then
 begin
   sgMain.Options:= sgMain.Options - [goRowSelect] + [goEditing];
   sgMain.Col:= sgMain.MouseCoord( pPnt.X, pPnt.Y ).X;
   sgMain.Row:= sgMain.MouseCoord( pPnt.X, pPnt.Y ).Y;
   sgMain.EditorMode:= true;
 end;
end;


Но, как теперь все вернуть назад? Т.е. чтобы когда пользователь закончил редактировать ячейку ( нажал Enter, Esc или щелкнул мышью в другом месте ) выделилась опять вся строка?


 
Игорь Шевченко ©   (2008-06-30 00:53) [7]


> Вообще я хотел чтобы по двойному щелчку в ячейки начиналось
> ее редактирование, но при этом, чтобы в TStringGrid.Options
> было goRowSelect.


А зачем именно RowSelect ? Чтобы строка выделялась или чтобы клавишами вправо-влево тоже был переход по строкам ?


 
maxon   (2008-06-30 00:59) [8]

2 Игорь Шевченко
Чтобы строка выделялась. Но очередное раскрашивание таблицы не лучший вариант ( я и так каждый 2й столбик подкрашиваю ).


 
Германн ©   (2008-06-30 02:25) [9]


> maxon   (30.06.08 00:59) [8]
>
> 2 Игорь Шевченко
> Чтобы строка выделялась. Но очередное раскрашивание таблицы
> не лучший вариант ( я и так каждый 2й столбик подкрашиваю
> ).
>

Сделай как в TBGrid. Добавь фиксированный столбец с индикатором.


 
ЮЮ ©   (2008-06-30 04:36) [10]

> Чтобы строка выделялась. Но очередное раскрашивание таблицы
> не лучший вариант ( я и так каждый 2й столбик подкрашиваю
> ).


И что, раскраска всего одной строки (которая и так выполняется при RowSelect) кого-то сильно нагрузит?


 
maxon   (2008-06-30 23:44) [11]

Вот, вообщем мое решение:

const
 SGOPTS_RO = [goFixedVertLine,goFixedHorzLine,goColSizing,goColMoving,goRowSelect];
 SGOPTS_RW = [goFixedVertLine,goFixedHorzLine,goColSizing,goColMoving,goEditing];
 
...

var
 zACol, zARow: integer;

implementation

...

procedure TfMain.sgMainDblClick(Sender: TObject);
var
 pPnt:       TPoint;  // Координаты курсора
 xCol, xRow: integer; // Адрес ячейки таблицы
begin
 GetCursorPos( pPnt );
 pPnt:= TStringGrid(Sender).ScreenToClient( pPnt );
 // Находим позицию нашей ячейки
 xCol:= TStringGrid(Sender).MouseCoord( pPnt.X, pPnt.Y ).X;
 xRow:= TStringGrid(Sender).MouseCoord( pPnt.X, pPnt.Y ).Y;

 // Редактируем ячейки начиная с первой строки (не 0-ой).
 if xCol > 0 then
 begin
   // Устанавливаем атрибут goEditing и удаляем goRowSelect.
   TStringGrid(Sender).Options:= SGOPTS_RW;

   TStringGrid(Sender).Col:= xCol; // Фокус в ячейку, на которой кликнули.
   TStringGrid(Sender).Row:= xRow;

   zACol:= xCol;      // Сохраним текущий адрес ячейки
   zARow:= xRow;

   TStringGrid(Sender).EditorMode:= true;  // Входим в режим редактирования ячейки.
 end;
end;

procedure TfMain.sgMainSelectCell(Sender: TObject; ACol, ARow: Integer;
 var CanSelect: Boolean);
begin
 // Если фокус получает другая ячейка таблицы (не та которую мы редактируем),
 // то удаляем атрибут goEditing и устанавливаем goRowSelect.
 if ( zACol <> ACol ) or ( zARow <> ARow ) then
   TStringGrid(Sender).Options:= SGOPTS_RO;

 zACol:= ACol; // Сохраняем новые координаты
 zARow:= ARow;
end;


Надеюсь, все правильно?


 
Amoeba ©   (2008-07-01 01:14) [12]

Замени эту хрень:
pPnt:= TStringGrid(Sender).ScreenToClient( pPnt );
// Находим позицию нашей ячейки
xCol:= TStringGrid(Sender).MouseCoord( pPnt.X, pPnt.Y ).X;
xRow:= TStringGrid(Sender).MouseCoord( pPnt.X, pPnt.Y ).Y;

на:
TStringGrid(Sender).MouseToCell(pPnt.X, pPnt.Y, xCol, xRow);


 
maxon   (2008-07-01 01:42) [13]

2 Amoeba
Мож я че не так делаю, но у меня так: TStringGrid(Sender).MouseToCell(pPnt.X, pPnt.Y, xCol, xRow); не работает :(


 
maxon   (2008-07-01 01:48) [14]

Зато, работает так:

 pPnt:= TStringGrid(Sender).ScreenToClient( pPnt );

 TStringGrid(Sender).MouseToCell( pPnt.X, pPnt.Y, xCol, xRow );


Без этого - pPnt:= TStringGrid(Sender).ScreenToClient( pPnt );
- никак!


 
Amoeba ©   (2008-07-01 02:00) [15]


> Зато, работает так:
>
>  pPnt:= TStringGrid(Sender).ScreenToClient( pPnt );
>
>  TStringGrid(Sender).MouseToCell( pPnt.X, pPnt.Y, xCol,
> xRow );
>
>
> Без этого - pPnt:= TStringGrid(Sender).ScreenToClient( pPnt
> );
> - никак!
>

Все правильно. Просто не было времени проверить, и я напрасно забраковал 1-ю строку, хотя и не было полной уверенности.



Страницы: 1 вся ветка

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1213185737
Ega23
2008-06-11 16:02
2008.07.27
Своё cmd-окошко


2-1214217352
tey
2008-06-23 14:35
2008.07.27
текст в непонятой кодировке


3-1202464120
ANB
2008-02-08 12:48
2008.07.27
Векторные запросы. Оракл и все остальные СУБД


2-1214575666
Link
2008-06-27 18:07
2008.07.27
Виртуальные методы...


15-1212860862
WOWA
2008-06-07 21:47
2008.07.27
Какой сервер выбрать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский