Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсвестить текст в StringGrid 
:(
    Опции темы
Mach3
Дата 3.2.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: 3
Всего: 2



Привет.
Хочу подсветить текст в яйчейке StringGrid при наведении на онный мышкой.

Видимо для смены стиля текста надо обраатывать   onDrawCell, но как узнать позицию курсора и в какой именно яйчейке изменить текст?
Предполагаю, что как-то так в onDrawCell
Код

SG1.MouseToCell(mouse.CursorPos.X,mouse.CursorPos.Y,x,y);
if (acol=x) and (arow=y) then SG1.Canvas.Font.Color:= clRed;

Но так что-то не работает =))

Это сообщение отредактировал(а) Mach3 - 3.2.2012, 13:29
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
Snowy
Дата 3.2.2012, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

StringGrid1.MouseToCell(ScreenToClient(Mouse.CursorPos).X, ScreenToClient(Mouse.CursorPos).Y, x, y);

PM MAIL   Вверх
Mach3
Дата 3.2.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: 3
Всего: 2



Не получается.. 
Если я правильно понимаю,  мне необходимо на событие onMouseMove грида запустить отрисовку клетки,
а в onDrawCell грида перерисовать клетку на которой находится курсор мыши..

Что такое ScreenToClient?

Спасибо.
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
northener
Дата 4.2.2012, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Mach3 @  3.2.2012,  19:26 Найти цитируемый пост)
Если я правильно понимаю,  мне необходимо на событие onMouseMove грида запустить отрисовку клетки,
а в onDrawCell грида перерисовать клетку на которой находится курсор мыши..

Ты сам то понимаешь какую туеву хучу "перерисовок" должен будет выполнять твой грид при такой реализации "подсветки"?
У стандартных TSting(TDraw)Gind нет методов типа InvalidateRect.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 4.2.2012, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Mach3 @  3.2.2012,  19:26 Найти цитируемый пост)
Что такое ScreenToClient?

А справку читать лень?
Из справки о глобальной переменной Mouse:
"Use CursorPos to get the position of the mouse cursor in global coordinates".
Из справки о TStringGid. MouseToCell:
"Call MouseToCell to convert from grid-relative screen coordinates..."


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Mach3
Дата 4.2.2012, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 26.11.2005

Репутация: 3
Всего: 2



Цитата(northener @  4.2.2012,  01:21 Найти цитируемый пост)
Ты сам то понимаешь какую туеву хучу "перерисовок" должен будет выполнять твой грид при такой реализации "подсветки"?

Почему же, можно запускать перерисовку, только если мышь над неоходимой клеткой.
Код

procedure TForm1.SG1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  r, c : integer;
begin
  SG1.MouseToCell(X, Y, c, r); 
  if (((c=0) or (c=2)) and (Pos('http://',Sg1.Cells[c,r]) >0)) then //если курсор над первым или третим столбцом и если присутствует строка http://
    begin
      SG1.Cursor := crHandPoint;
      SG1DrawCell(SG1,c,r,?,?) //Не знаю как правильно запустить процедуру
    end else 
      begin
        SG1.Cursor := crDefault
      end;
    end;
end;



Это сообщение отредактировал(а) Mach3 - 4.2.2012, 05:38
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.