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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> StringGrid клик правой кнопки мыши 
:(
    Опции темы
SlaUr
Дата 25.9.2008, 09:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Мне нужно чтобы при клике правой кнопки мыши по ячейке StringGrida она становилась селектированной

Когда то давно задавал такой вопрос по ListBox и мне правильно ответили :
Код

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbRight) then ListBox1.ItemIndex := ListBox1.ItemAtPos (Point (X,Y),false);
end;


А возможно ли сделать также просто для StringGrida ?
PM MAIL   Вверх
Staruha
Дата 25.9.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: нет
Всего: 27



А инфа в гриде откуда грузится?


Это сообщение отредактировал(а) Staruha - 25.9.2008, 10:13


--------------------
Возмездие настигнет
PM MAIL   Вверх
SlaUr
Дата 25.9.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Из БД 
А разве это имеет значение?
PM MAIL   Вверх
Staruha
Дата 25.9.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: нет
Всего: 27



 smile Я так понимаю если ты по гриду хлопнеш запись ,которая находится в данной строке станет текущей ,т.е читается это все из БД а не из Stringa и если я правильно поняла ,то это несложно надо только заглянуть в раздел БД


--------------------
Возмездие настигнет
PM MAIL   Вверх
Poseidon
Дата 25.9.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Staruha, ты не правильно поняла. StringGrid - это компонент отображения. Обратно, источнику данных, он ничего не отсылает (конечно, если его об этом специально не попросить)

Цитата(SlaUr @  25.9.2008,  09:33 Найти цитируемый пост)
Мне нужно чтобы при клике правой кнопки мыши по ячейке StringGrida она становилась селектированной

Вот что пришло сразу на ум...
Код

procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  NewSel: TGridRect;
begin
  with StringGrid1 do
  if (Button = mbRight) then
  begin
    NewSel.Left := Trunc(X/DefaultColWidth);
    NewSel.Top := Trunc(Y/DefaultRowHeight);
    NewSel.Right := Trunc(X/DefaultColWidth);
    NewSel.Bottom := Trunc(Y/DefaultRowHeight);
    Selection := NewSel;
  end;
end;


Это сообщение отредактировал(а) Poseidon - 25.9.2008, 13:46


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Staruha
Дата 25.9.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: нет
Всего: 27



Poseidon Теперь вижу что все правильно поняла. smile 
Не понимаю только для чего столько усилий-что б ячейку выделить? Или все таки нужно потом какие то данные получить? smile 


--------------------
Возмездие настигнет
PM MAIL   Вверх
SlaUr
Дата 25.9.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Мне нужно чтобы при щелчке правой кнопки мыши я знал столбец Stringrida  и селектировал быэту ячейку одновременно бы например на 3 столбце возникало PopupMenu1 а на 4 PopupMenu2
А то придется сначала левой кнопкой селектировать ячейку а потом правой вызывать popupmenu
 

Это сообщение отредактировал(а) SlaUr - 25.9.2008, 14:45
PM MAIL   Вверх
Poseidon
Дата 25.9.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Staruha @  25.9.2008,  14:12 Найти цитируемый пост)
Не понимаю только для чего столько усилий-что б ячейку выделить?
Мне на ум только одно приходит: связать PopupMenu, и что бы в зависемости от ячейки выводились разные менюшки. В таком случае выделение ячейки по правому клику будет правдано.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SlaUr
Дата 25.9.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Poseidon, вариант не подходит потому что столбцы разные по ширине

Это сообщение отредактировал(а) SlaUr - 25.9.2008, 14:48
PM MAIL   Вверх
Poseidon
Дата 25.9.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



На сколько я помню, в СтрингГриде разные по ширене колонки можно сделать только руками, т.е. во время выполнения программы. И это никак не отловишь и даже не узнаешь новый размер. Может быть я ошибаюсь, т.к. давно не пользовался СтрингГридами. Их мне заменил VirtualStringTree. 

Это сообщение отредактировал(а) Poseidon - 25.9.2008, 14:56


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Staruha
Дата 25.9.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: нет
Всего: 27



Попробуй определить по типу данных или по байтам - чем то столбцы должны отличаться


--------------------
Возмездие настигнет
PM MAIL   Вверх
SlaUr
Дата 25.9.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Колонку я научился селектировать а вот со строкой что-то не выходит.
Код

Function MouseToColumn2a(X,Y:integer):integer;
var i1,i2:integer;
begin
    Result:=0;  if Y<16 then exit;     Result:=1;//чтобы исключить нажатие на шапке
    i2:=0;
for i1:=2 to Form1.StringGrid3.LeftCol do i2:=i2+Form1.StringGrid3.ColWidths[i1-1];
  X:=X+i2;//У меня можно смещать Stringrid (в смысле все колонки не входят в видимую часть)
   {ShowMessage(intToStr(i2));}

 if X<Form1.StringGrid3.ColWidths[0] then result:=0 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1] then Result:=1 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2] then Result:=2 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3] then Result:=3 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3]+Form1.StringGrid3.ColWidths[4] then Result:=4 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3]+Form1.StringGrid3.ColWidths[4]+Form1.StringGrid3.ColWidths[5] then Result:=5 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3]+Form1.StringGrid3.ColWidths[4]+Form1.StringGrid3.ColWidths[5]+
       Form1.StringGrid3.ColWidths[6] then Result:=6 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3]+Form1.StringGrid3.ColWidths[4]+Form1.StringGrid3.ColWidths[5]+
       Form1.StringGrid3.ColWidths[6]+Form1.StringGrid3.ColWidths[7] then Result:=7 else
  if X<Form1.StringGrid3.ColWidths[0]+Form1.StringGrid3.ColWidths[1]+Form1.StringGrid3.ColWidths[2]+
       Form1.StringGrid3.ColWidths[3]+Form1.StringGrid3.ColWidths[4]+Form1.StringGrid3.ColWidths[5]+
       Form1.StringGrid3.ColWidths[6]+Form1.StringGrid3.ColWidths[7]+Form1.StringGrid3.ColWidths[8] then Result:=8 else Result:=0;

end;

procedure TForm1.StringGrid3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

if (Button = mbRight) then    StringGrid3.Col:=MouseToColumn2a(X,Y);
end;


И PopupMenu тоже возникает ;Осталось селектировать верную строку,пока не могу

Добавлено @ 15:44
Цитата

На сколько я помню, в СтрингГриде разные по ширене колонки можно сделать только руками, т.е. во время выполнения программы. И это никак не отловишь и даже не узнаешь новый размер

Form1.StringGrid3.ColWidths[0] указывает ширину столбца (0)

Это сообщение отредактировал(а) SlaUr - 25.9.2008, 15:47
PM MAIL   Вверх
Staruha
Дата 25.9.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: нет
Всего: 27



А ты посмотри у Poseidonа код там же есть Left ,Top
(Я надеюсь ты не сердишься -я так учусь тоже)


--------------------
Возмездие настигнет
PM MAIL   Вверх
SlaUr
Дата 25.9.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 5



Все оказалось намного проще
Код

procedure TForm1.StringGrid3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i1,i2:integer;
begin

  if (Button = mbRight) then
  if Y>16 then
 with StringGrid3 do
  begin
    MouseToCell(X,Y,i1,i2);
    Col:=i1;
    Row:=i2;
  end;


end;


И все работает


p.s. Я кстати задавал вопрос как узнать что кликнули по шапке так вот с помощью это процедуры можно тоже об этом узнать (MouseToCell)

Это сообщение отредактировал(а) SlaUr - 25.9.2008, 16:17
PM MAIL   Вверх
черная
Дата 21.4.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А у меня такой вопрос: есть StringGrid, есть контекстное меню в котором пункты создаются программно при активации формы из БД (кэпшн у них соответсвенно значения из БД). По клику на пункте меню в селектированной ячейке StringGrid появляется кэпшн пункта меню. Так вот среди этих пунктов меню есть с кэпшном "8" и "7.12". В БД они символьного типа. А когда они попадают в ячейку StringGrid, перед ними появляется еще и "&". Почему это происходит и как от этого избавиться?  smile Заранее спасибо!

Это сообщение отредактировал(а) черная - 23.4.2009, 16:00
PM MAIL ICQ   Вверх
Google
  Дата 19.1.2019, 09:23 (ссылка)  





  Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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