Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, как подружить goEditing и goRowSelect 
:(
    Опции темы
nworm
Дата 14.4.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то у меня никак не получается, сделать чтобы у StringGrid одновременно было две опции (Options):
1. goEditing
2. goRowSelect
У меня получается, что если поставить goRowSelect=true, то ячейки больше не редактируются.
PM MAIL WWW   Вверх
artsb
Дата 14.4.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



goEditing оставьте, а строку руками закрашивайте.

Добавлено через 8 минут и 35 секунд
Вот пример:
Код

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
if(StringGrid1->Row == ARow)
{
  StringGrid1->Canvas->Brush->Color = clLime;
  StringGrid1->Canvas->FillRect(Rect);
}
else
{
  StringGrid1->Canvas->Brush->Color = StringGrid1->Color;
  StringGrid1->Canvas->FillRect(Rect);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
StringGrid1->Invalidate();
}
//---------------------------------------------------------------------------

Если у вас есть фиксированные строки/столбцы и они должны быть закрашены определённым цветом - делаете соответствующую проверку и закрашиваете их нужным цветом, либо вообще не закрашиваете.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
nworm
Дата 14.4.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, спасибо, проходит. Только много строк так не выбрать.
PM MAIL WWW   Вверх
Anikmar
Дата 15.4.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nworm @  14.4.2009,  22:43 Найти цитируемый пост)
Да, спасибо, проходит. Только много строк так не выбрать. 

ИМХО. Стандартный мультистрочный выбор с помощью Shift и Ctrl не удобен на больших списках. Утомительно. Лучше добавить колонку с CheckBox и отмечать строки при помощи галочек. Нагляднее, на мой взгляд. Естественно добавить 3 кнопки (или контекстным меню) - отметить все, убрать все, инверсировать выбор.
PM MAIL ICQ   Вверх
artsb
Дата 15.4.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nworm @  14.4.2009,  22:43 Найти цитируемый пост)
Только много строк так не выбрать. 

Тогда придётся изобретать велосипед... smile
Попробуйте как Anikmar советует.
Правда, с другой стороны, создавать сотню CheckBox'ов и не забыть потом их все удалить, тоже не очень весело. Да и как быть с индексами...
Я делал так:
Нарисовал две картинки наподобие CheckBox'а (только красивее). Нулевой столбец в StringGrid'e выделил под эти CheckBox'ы и хранил в его строках либо "1", либо "0" (в зависимости от состояния) и в зависимости от состояния рисовал ту или иную картинку. При клике по ячейке в нулевом столбце - изменял её значение.
Ещё надо DefaultDrawing = false. Но теперь надо будет всё рисовать руками. Зато, в этом случае, в ячейках можно делать многострочный текст.

Это сообщение отредактировал(а) artsb - 15.4.2009, 11:18


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
nworm
Дата 15.4.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Столбец с чекбоксами у меня сейчас есть (я переписал код из drkb на C++, всё нормально исчезает/появляется при изменении числа строк таблицы).

Там только нет мультистрочного выбора с помощью Shift и Ctrl  (типа MultiSelect в ListBox-e). Всё-таки с этим MultiSelect-ом удобнее (по сравнению с чекбоксами) выделять большие куски.
Но, с другой стороны, если MultiSelect-ную опцию делать в StringGrid-е, то при любом редактировании ячейки все выбранные строки сбиваются.
Вот интересно, можно ли как-нибудь комбинировать и мультиселект и редактирование?

Это сообщение отредактировал(а) nworm - 15.4.2009, 15:17
PM MAIL WWW   Вверх
Anikmar
Дата 15.4.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(artsb @  15.4.2009,  11:16 Найти цитируемый пост)
Попробуйте как Anikmar советует.
Правда, с другой стороны, создавать сотню CheckBox'ов и не забыть потом их все удалить, тоже не очень весело. Да и как быть с индексами...
Я делал так:
Нарисовал две картинки наподобие CheckBox'а (только красивее). Нулевой столбец в StringGrid'e выделил под эти CheckBox'ы и хранил в его строках либо "1", либо "0" (в зависимости от состояния) и в зависимости от состояния рисовал ту или иную картинку. При клике по ячейке в нулевом столбце - изменял её значение.
Ещё надо DefaultDrawing = false. Но теперь надо будет всё рисовать руками. Зато, в этом случае, в ячейках можно делать многострочный текст.

Ну сотня строк на экране не поместится по-любому, а на самом деле - вы правы, я же сам, сначала CheckBox ставил, а потом перешел к картинкам, так что лучше картинки.

Цитата(nworm @  15.4.2009,  15:15 Найти цитируемый пост)
Там только нет мультистрочного выбора с помощью Shift и Ctrl  (типа MultiSelect в ListBox-e). Всё-таки с этим MultiSelect-ом удобнее (по сравнению с чекбоксами) выделять большие куски.
Но, с другой стороны, если MultiSelect-ную опцию делать в StringGrid-е, то при любом редактировании ячейки все выбранные строки сбиваются.
Вот интересно, можно ли как-нибудь комбинировать и мультиселект и редактирование?

Тогда можно комбинировать мультиселеск с чек-боксами, при этом редактирование не собьет ранее выделенное. Если по шифту выделяете -   то можно добавить кнопку "Отметить выделенное". Мне кажется вполне подойдет.
PM MAIL ICQ   Вверх
artsb
Дата 15.4.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nworm @  15.4.2009,  15:15 Найти цитируемый пост)
Вот интересно, можно ли как-нибудь комбинировать и мультиселект и редактирование?

Опять таки, goEditing оставьте, а выбранные строки строки закрашивайте руками.
Например, можно создать ещё один столбец в самом конце (это якобы CheckBox'ы) и в OnCreate формы установить столбцу нулевую ширину и заполнить его нулями (т.е. отмеченных строк нет).
Далее придумываете сочетание мышь+клавиатура при котором нужно отметить строку и в обработчике StringGrid'а OnMouseDown (ну или Up) делаете проверку и устанавливаете значение соответствующей строки в "1".
Также придётся немного подправить функцию DrawCell: реализовать закраску выбранных строк определённым цветом.

ЗЫ извиняюсь, что нет кода, а только логика, просто уже лень писать, тестировать и т.д. smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
nworm
Дата 15.4.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вроде всё прояснилось. Теперь надо будет выбрать какой-нибудь вариант и реализовать.
PM MAIL WWW   Вверх
artsb
Дата 15.4.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Маленький совет: не пробуйте реализовать выбранный вариант в основном проекте. Сделайте отдельный и там тестируйте. Просто может получиться так, что в основном проекте всплывут ошибки никак не связанные с решаемой в данный момент задачей, а вы будете ломать голову, почему не работает.
Ну и собственно, удачи!


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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