Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2013, 16:20   #1
shiva4
Пользователь
 
Регистрация: 23.02.2012
Сообщений: 11
По умолчанию Выделение строки в TDrawGrid

Всем привет!

Подскажите, можно ли как то сделать, что бы при щелчке правой кнопки мыши по компоненту TDrawGrid, т.е. строка в этом компоненте выделялась бы так же как и при щелчке левой кнопкой мыши?
shiva4 вне форума Ответить с цитированием
Старый 23.07.2013, 06:10   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Обработать событие OnMouseDown, проверить в нём button = bmRight , вычислить с помощью Grid.MouseToCell ячейку поверх которой мышка (с координатами х и у, полученными в событии), и установить col и row свойства грида.
phomm вне форума Ответить с цитированием
Старый 23.07.2013, 09:24   #3
shiva4
Пользователь
 
Регистрация: 23.02.2012
Сообщений: 11
По умолчанию

Спасибо. Так все и делал. Именно за последний момент присваивания значение Col и Row для DrawGrid вчера не догнал сразу. Все получилось.

Код:
...
    SG1: TStringGrid;
...

 public
 _Col, _Row : integer;
..

procedure TForm1.SG1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
      if Button = mbRight then
      SG1.Col:=_Col;
      SG1.row:=_Row;
end;

procedure TForm1.SG1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);

begin
     SG1.MouseToCell(X, Y, _Col, _Row);
end;

___________
Код нужно оформлять тегами (для этого на панели форматирования есть кнопка с "решёточкой" #)

Модератор

Последний раз редактировалось Serge_Bliznykov; 23.07.2013 в 09:31.
shiva4 вне форума Ответить с цитированием
Старый 24.07.2013, 06:05   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
      if Button = mbRight then
      SG1.Col:=_Col;
      SG1.row:=_Row;
Ошибка: нет бегин-енд, т.о. при правой кнопке отработает только присвоение col, присвоение row же будет безотносительно кнопки мыши, хоть левой хоть правой, хоть даже колесом/ака MiddleButton нажать.
Также не совсем понятен ход мысли вычисления клетки (и, соответственно, введения "глобальных переменных" для связи процедур) в обработчике OnMouseMove, ведь ничего не мешает это сделать прямо там же - в OnMouseDown (при этом "глобальные" поля поменять на локальные переменные).

П.С. Интересно , Вы с плюсов что ли в дельфи перешли ? А то 4 пробельный идент, использование подчерка(андерскора), разве что условие в ифе не заскобочено )))
Упд. А нет, вру, идент 5-, 6 -пробельный (издалека видно что больше стандартного 2пробельного дельфишного, вот и подумал что 4, не приглядываясь), тогда мой совет последить за форматированием, в частности, отступ для тела условного оператора.

Последний раз редактировалось phomm; 24.07.2013 в 06:15.
phomm вне форума Ответить с цитированием
Старый 24.07.2013, 09:02   #5
shiva4
Пользователь
 
Регистрация: 23.02.2012
Сообщений: 11
По умолчанию

На счет Begin end это я выдрал часть текста с процедуры сюда и пропустил их. Торопился. Сори. По поводу "локальных переменных", они ж в пределах процедуры действуют, а мне они нужны для использования их в других.

if в MouseDown процедуре переменные получают значение Col и Row выбранного грида, то в MouseMove они должны как то передаваться. Насколько я помню, "жизнь локальных переменных в процедурах" в них и завершается. Таким образом, объявив в MouseDown переменные как локальные, MouseMove уже не будет понимать что за переменные ей указывают, не говоря о значениях их.

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

Pascal изначально стал мне родным, хотя когда то Basic-ом и чуть ассемблером в древние времена баловался. Си как то родным не стал, хоть ничего против него не имею.
shiva4 вне форума Ответить с цитированием
Старый 24.07.2013, 09:54   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Если вам нужны переменные и в других процедурах - я ничего против не имею.
Я указываю на то, что для расписанной задачи задействовать OnMouseMove вообще не надо, а можно обойтись только OnMouseDown. Про локальные переменные Вы правы, собственно, это очевидно, но я про них сказал в свете мысли из первого предложения этого поста, так что, мы о разном говорим.

Насчёт форматирования и оформления кода http://www.gunsmoker.ru/2010/07/blog-post.html
phomm вне форума Ответить с цитированием
Старый 25.07.2013, 10:48   #7
shiva4
Пользователь
 
Регистрация: 23.02.2012
Сообщений: 11
По умолчанию

По поводу реализации в OnMouseMove согласен. В свете выше сказанного соединил содержимое с OnMouseMove и MouseMove. Этот вариант пожалуй лучше. Переменные эти у меня еще кое где анализируются, потому и сделал не локальными.

О стиле оформления почитал ссылку и принял к сведению. Попробую Делфийский вариант. Спасибо за помощь

Последний раз редактировалось shiva4; 25.07.2013 в 10:53.
shiva4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение строки frozzy_16 Microsoft Office Excel 3 18.03.2013 11:42
TDrawGrid - как убрать выделенную ячейку? tiger() C++ Builder 0 14.06.2011 13:54
Выделение строки Necare Общие вопросы C/C++ 0 23.04.2011 19:03
Выделение строки M@riy@ БД в Delphi 1 12.11.2010 19:25
Простой пример использования TDrawGrid bookkc Помощь студентам 1 17.03.2010 15:51