Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > StringGrid Click


Автор: Rodman 16.10.2006, 14:13
Дароф....

Подскажите, пожалуйста, как программно нажать на ячейку на которую было произведено нажатие в последний раз....

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

Как это сделать...

Спасибо...

Автор: skyboy 16.10.2006, 14:38
уже вижу два варианта:
1. честная эмуляция - отослать сообщения wm_mousedown и wm_mouseup твоей таблице. Недостатки очевидны: 
- если ячейки на экране нет, кликнуть в пределх этой ячейки не выйдет; 
- надо определять координаты требуемой ячейки;
2. "Прямой" вызов обработчика нажатия с передачей нужных параметров. 
Пересчет у тебя по какому событию вызывается? По OnClick?
Тогда делай так:
Код

...
Form1.StringGrid1OnClick(Form1.StringGrid1);
...

Или на OnSelectCell?
Тогда:
Код

...
SomeCol:= ...; // переменная, содержащая номер столбца твоей "считающей" ячейки
SomeRow:= ...; // переменная, содержащая номер строки твоей "считающей" ячейки
CanSelect:= ...;// переменная,... а, не помню уже, что-то связанная с возможностью выделения ячейки; посмотри в справке на OnSelectCell
Form1.StringGrid1OnSelectCell(Form1.StringGrid1,SomeCol,SomeRow,CanSelect);
...

Автор: Rodman 17.10.2006, 10:16
По OnSelectCell... 

Сенкс... Попробую...

Автор: Rodman 17.10.2006, 17:05
а как мне нажать на StringGridDrawCell
Код

FrmWeek.StGrdDrawCell(FrmWeek.StGrd, SomeCol, SomeRow, MyRect, [gdFocused]);


но если изенятся текущая ячейка, она не перерисовывается...

Что не так???

Автор: skyboy 17.10.2006, 17:19
Цитата(Rodman @  17.10.2006,  16:05 Найти цитируемый пост)
а как мне нажать на StringGridDrawCell

Цитата(Rodman @  17.10.2006,  16:05 Найти цитируемый пост)
но если изенятся текущая ячейка, она не перерисовывается...

доходчивее обьясни.

Автор: Rodman 17.10.2006, 19:37
Ячейка может меняться...

а на старте хотелось бы закрашивать первую....

у меня высота и ширина ячеек = 22

я расчитываю параметр Rect как Rect.left:=ARow*22 и Rect.Top:=ACol*22, по такому же принципу и остальные параметры...

Но рисовать не хочет...

Автор: Zero 17.10.2006, 21:44
Rodman, там в стрингриде бывает баг, когда по несколько раз перересовывешь одну и ту же ячейку.
В DRKB есть код как на ней рисовать один раз, но при перерисовке бывают глюки... Я в своё время, заменил стринггрид, другим компонентом (название не помню, в поисковике ищется) предназначеным для создания отчётов. Если ты делаешь именно их, то стринггрид на него и замени, если нет то искать другие способы.

Добавлено @ 21:47 
Цитата(Rodman @  17.10.2006,  20:37 Найти цитируемый пост)
Но рисовать не хочет... 

В общем, если хочешь то посмотри тут:
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&article_num=000602
Там подробное описание рисования на ячейках.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)