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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ниспадающий список по правой кнопке в StringGrid, или менюшка,только в пределенном столбце 
:(
    Опции темы
Jey_k
Дата 29.9.2004, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

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



В общем по щелчку правой кнопки в гриде по ячейке из 3-го столбца нужно чтоб был какой-то способ ввода известных значений в эту ячейку. Или ниспадающий список значений или всплывающая менюшка, по клику левой кнопкой мыши по элементу или первого или второго, этот элемент должен отобразиться в выбраной ячейке грида. Как правильно и без лишнего геморроя?


--------------------
PM MAIL WWW   Вверх
gray_k
Дата 29.9.2004, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

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



Я в этом случае накладываю ComboBox на нужную ячейку, подгоняю его размеры, делаю видимым. Затем на OnCloseUp заношу данные в ячейку грида, комбобокс делаю невидимым.


--------------------
С уважением.
Gray.
PM MAIL   Вверх
Jey_k
Дата 30.9.2004, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

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



gray_k
Благодарю. Буду пробовать



--------------------
PM MAIL WWW   Вверх
Jey_k
Дата 5.10.2004, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

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



Цитата(gray_k @ 29.9.2004, 13:20)
Я в этом случае накладываю ComboBox на нужную ячейку, подгоняю его размеры, делаю видимым. Затем на OnCloseUp заношу данные в ячейку грида, комбобокс делаю невидимым.

Все бы хорошо, но вот размерность таблицы не известна заранее, пользователь может строки добавлять, а вот вышеуказанная возможность нужна в 3-м столбце всех строк.

Это сообщение отредактировал(а) Jey_k - 5.10.2004, 15:18


--------------------
PM MAIL WWW   Вверх
gray_k
Дата 5.10.2004, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

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



А в чём проблема?
Отлавливаешь событие OnSelectCell , проверяешь, что у тебя третий столбец и тогда замещаешь ячейку комбобоксом.
Будет время я тебе простенький пример сделаю.


--------------------
С уважением.
Gray.
PM MAIL   Вверх
gray_k
Дата 5.10.2004, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

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



Оба на, аттача то нету sad.gif .
В общем так. Форма. На форме стринг грид - sg и ComboBox - cb. У стринг грида свойство DefaultRowHeight := 21 (ВАЖНО). У бокса visible := false; У формы KeyPreview := true;
Три обработчика:
Код

procedure TForm1.sgMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var r:TRect;
 col, row:integer;
begin
 //если правая кнопка мыши
 if Button = mbRight then begin
   //получаем столбец и строку на которой юзер кликнул мышкой
   sg.MouseToCell( X, Y, col, row );
   //если у нас нулевой столбец (для заголовков строк)
   //или не третья строка, то выходим из обработчика
   if ( row <> 2 ) or ( col = 0 ) then exit;
   //устанавливаем текущую ячейку грида ту, на которой кликнул юзер
   sg.Col := col;
   sg.Row := row;
   //объект TRect для определения размеров ячейки
   r := sg.CellRect( col, row );
   //устанавливаем ComboBox в ячейку
   SetWindowPos( cb.Handle, 0, r.left + sg.Left + 1, r.Top + sg.Top + 1,
                         r.Right-r.Left, r.Bottom-r.Top, SWP_NOZORDER );
   //делаем его видимым
   cb.Visible := true;
   //открываем
   cb.DroppedDown := true;

 end;

end;

procedure TForm1.cbCloseUp(Sender: TObject);
begin
 //на закрытие ComboBox записываем выбранное значение в ячейку
 sg.Cells[sg.Col,sg.Row] := cb.Items.Strings[cb.ItemIndex];
 //делаем его невидимым
 cb.Visible := false;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if ( Key = VK_ESCAPE ) then begin
   cb.OnCloseUp := nil;
   cb.DroppedDown := false;
   cb.Visible := false;
   cb.OnCloseUp := cbCloseUp;
   sg.Repaint;
 end;

end;



Добавлено @ 16:00
На мыло выслал проект с примером.

Это сообщение отредактировал(а) gray_k - 5.10.2004, 16:00


--------------------
С уважением.
Gray.
PM MAIL   Вверх
Jey_k
Дата 6.10.2004, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


WEB-командир
****


Профиль
Группа: Комодератор
Сообщений: 4149
Регистрация: 16.11.2003
Где: Москва

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



Ай спасибо!!! Ай молодца!!! +1


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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