Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

Как получить координаты курсора в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.012 c
10-1147683164
AbrosimovA
2006-05-15 12:52
2008.07.27
Удалённый запуск приложений через WMI


4-1193296400
Василий К.
2007-10-25 11:13
2008.07.27
GWL_EXSTYLE в windows XP


1-1195488425
DevilDevil
2007-11-19 19:07
2008.07.27
Получить Call-Stack


11-1186297255
MTsv DN
2007-08-05 11:00
2008.07.27
MultiSelect in TreeView


15-1212790668
alex-drob
2008-06-07 02:17
2008.07.27
Как организовать смену иконки treeview на 10 сек





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