Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, в яейках StringGrida нужен MaskEdit 
V
    Опции темы
Aline
Дата 3.7.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем привет!

Такая проблемка: в ячейку StringGrid'a мне надо вводить фоматированный текст (время, типа: hh:mm:ss.ms). Через Objects подцепила MaskEdit:

            for (int i = 1; i<=StringGrid1->RowCount; ++i){
    strMaskEdt = new TMaskEdit(StringGrid1);
    strMaskEdt->Parent = StringGrid1;
    strMaskEdt->Name = "StrGrEdtMask" + IntToStr(i);
    strMaskEdt->Left = StringGrid1->CellRect(0,i).left;
    strMaskEdt->Top = StringGrid1->CellRect(0,i).top;
    strMaskEdt->Width = StringGrid1->CellRect(0,i).Width();
    strMaskEdt->Height = StringGrid1->CellRect(0,i).Height();
    strMaskEdt->EditMask = "!90:00:00.00000>;1;_";
    strMaskEdt->Text = "00:00:00.00000";
    StringGrid1->Objects[0][i]= strMaskEdt;
             }

Всё замечательно, но вот когда ввожу данные в столбец времени и делаю потом скролинг, то текст обнуляется, т.е. устанавлявается  "00:00:00.00000". Как можно перекинуть текст связанного с ячейкой MaskEdit в саму ячейку? В какой момент это надо сделать? Например, я бы сделала на событие OnScroll, но его я не нашла у StrinGrid'a. Может кто-нибудь посоветует что-нибудь дельное. Буду очень признательна :-)
PM MAIL   Вверх
040375
Дата 3.7.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробуй сделать "перетаскивание" данных в OnDrawCell 
PM MAIL   Вверх
Aline
Дата 3.7.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



040375
пробовала, там в отображении ерунда получается
Хотя, может и неправильно делала...
Он тогда постоянно перерисовывает и картинка дергается 
PM MAIL   Вверх
040375
Дата 3.7.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да и вообще, зачем в каждой строке создавать для ввода такой элемент, нельзя ли его создавать только в момент
выделения ячейки, а затем удалять - копируя строку в саму ячейку. А то как то громоздко ... 
PM MAIL   Вверх
_hunter
Дата 3.7.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



перекидывать нужно в OnChange edit' а 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Aline
Дата 3.7.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



_hunter
попробовала сделать обработку OnChange:
void __fastcall TDiscretForm::FormShow(TObject *Sender)
{
  for (int i = 1; i<=StringGrid1->RowCount; ++i){
    strMaskEdt = new TMaskEdit(StringGrid1);
    strMaskEdt->Parent = StringGrid1;
    strMaskEdt->Name = "StrGrEdtMask" + IntToStr(i);
    strMaskEdt->Left = StringGrid1->CellRect(0,i).left;
    strMaskEdt->Top = StringGrid1->CellRect(0,i).top;
    strMaskEdt->Width = StringGrid1->CellRect(0,i).Width();
    strMaskEdt->Height = StringGrid1->CellRect(0,i).Height();
    strMaskEdt->EditMask = "!90:00:00.00000>;1;_";
    strMaskEdt->Tag = i;
    strMaskEdt->OnChange = MskEdtChange;
    strMaskEdt->Text = "00:00:00.00000";
    StringGrid1->Objects[0][i]= strMaskEdt;
  }
}
//---------------------------------------------------------------------------

void __fastcall TDiscretForm::MskEdtChange(TObject *Sender)
{
  int iNumButton=((TMaskEdit*)Sender)->Tag;
  StringGrid1->Cells[0][iNumButton] = ((TMaskEdit*)Sender)->Text;
}


но почему-то в MskEdtChange даже не попадает, при установки там точки останова 
PM MAIL   Вверх
Aline
Дата 4.7.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



всё решается гораздо проще: MaskEdit мне нужен был для того, чтобы пользователь мог вводить данные только в определенном формате. Эта проблема решилась гораздо проще, без использования объектов 

если кому интересно:

void __fastcall TDiscretForm::StringGrid1GetEditMask(TObject *Sender, int ACol,
      int ARow, AnsiString &Value)
{
  if (ACol == 0)
    Value =  "!90:00:00.00000>;1;_";
}

всё остальное совершенно не нужно

Всем спасибо :-) 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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