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

Вниз

StringGrid   Найти похожие ветки 

 
Id   (2006-08-10 13:55) [0]

Здраствуйте, уважаемые мастера.
Как сделать так, чтобы при наведении на определенную запись в StringGrid-e она изменяла свой шрифт


 
clickmaker ©   (2006-08-10 14:20) [1]

OnMouseMove
OnDrawCell


 
Id   (2006-08-10 14:23) [2]


> clickmaker ©   (10.08.06 14:20) [1]
> OnMouseMove

Как поймать нужную запись?


 
Id   (2006-08-10 14:39) [3]


> clickmaker ©   (10.08.06 14:20) [1]


> OnDrawCell

В данной процедуре используются переменные Arow и ACol. я так понимаю, что это координаты прорисовываемой ячейки, но при по шаговом выполнении процедуры данные переменные неизменяются и равно нулю. Почему?


 
Сергей М. ©   (2006-08-10 14:49) [4]


> данные переменные неизменяются


А почему они должны изменяться ?


> равно нулю


Для ячейки в верхнем левом углу процедура действительно будет вызвана с нулевыми упомянутыми параметрами

Для любой другой ячейки утверждение не соотв-ет действительности


 
clickmaker ©   (2006-08-10 14:56) [5]


> Как поймать нужную запись?

MouseToCell()


 
Id   (2006-08-10 15:52) [6]


> clickmaker ©   (10.08.06 14:56) [5]


>
> MouseToCell()

Несовсем понятно, можно пример.


 
clickmaker ©   (2006-08-10 16:00) [7]


> можно пример

в справке есть


 
Id   (2006-08-10 16:18) [8]


> clickmaker ©   (10.08.06 16:00) [7]

Разобрался, спасибо.
Еще вопрос, Как правильнее вызвать прорисовку определенной ячейки из другой процедуры?
Пробую вызвать
StringGrid1DrawCell(sender,c,r,rect,state),
возникают проблемы с параметрами rect  и state, что указывать в них?


 
clickmaker ©   (2006-08-10 16:25) [9]


> Id   (10.08.06 16:18) [8]

не надо так делать
Grid.Refresh() или Grid.Repaint
либо Invalidate


 
Id   (2006-08-10 16:41) [10]

Вот, что в результате получилось (см.тему)

procedure TForm2.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
begin
StringGrid1.MouseToCell(x,y,co,ro);
StringGrid1.Refresh;
end;

procedure TForm2.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 if (acol=co) and (arow=ro) then begin
  with StringGrid1.Canvas do begin
    font.Color:=clBlue;
    font.Style:=[fsUnderline]  ;
    FillRect(Rect);
    TextOut(Rect.Left+1,Rect.Top+1,StringGrid1.Cells[co,ro]);
  end;
 end;

end;


где co,ro: Longint - глобальные переменные
Но видимо из-за частого Refresh, получается очень неприятное мигание таблицы, как этого избежать?


 
clickmaker ©   (2006-08-10 16:47) [11]


> как этого избежать?

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


 
Id   (2006-08-10 17:05) [12]


> clickmaker ©   (10.08.06 16:47) [11]

Очень благодарю



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

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

Наверх




Память: 0.49 MB
Время: 0.043 c
2-1155698844
California
2006-08-16 07:27
2006.09.03
Что такое XPManifest ?


2-1155198993
Sania1
2006-08-10 12:36
2006.09.03
Запуск от имени


2-1155499409
RASkov
2006-08-14 00:03
2006.09.03
Динмассив


15-1154760816
McSimm
2006-08-05 10:53
2006.09.03
Пункт 2 правил форума


15-1155108043
Red_imp
2006-08-09 11:20
2006.09.03
VBA vs Other