C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
StringGrid, Как сделать "продвинутую" таблицу
ZDV
Отправлено: 20.12.2005, 10:56


Ученик-кочегар

Группа: Участник
Сообщений: 19



Привет всем.

Помогите советом, а лучше кодом:
Как мне в ячейку компонента TStringGrid поместить другой компонент,
ну к примеру TComboBox?

Заранее спасибо smile.gif
gvg
Отправлено: 20.12.2005, 11:29


Машинист паровоза

Группа: Участник
Сообщений: 222



Было это уже, поищите на форуме. Но, полагаю, проще использовать сторонний компонент.
Лена
Отправлено: 20.12.2005, 11:34


Мастер участка

Группа: Участник
Сообщений: 501



Компонет AdvStringGrid.
http://www.tmssoftware.com/advgrid2.htm
Gal
Отправлено: 20.12.2005, 11:36


Станционный диспетчер

Группа: Участник
Сообщений: 124



Покажу на примере TEdit
Двойной click
CODE

static int Row; // глоиальная переменная определяемая
void __fastcall TMainForm::StringGridDrawCell(TObject *Sender, int ACol,
     int ARow, TRect &Rect, TGridDrawState State)
{
     if (State.Contains(cdsSelected))
      {
         Row = ARow;
      }
 
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::StringGridDblClick(TObject *Sender)
{
 if  (Col == 1) // Первая колонка
  {
    TRect  myRect;

    TEdit   *Edit = new TEdit(this);
    myRect = StringGrid->CellRect(Col, Row);

    Edit->Parent = StringGrid;
    Edit->Top    = myRect.Top;
    Edit->Left   = myRect.Left;
    Edit->Height = myRect.Bottom — myRect.Top;
    Edit->Width  = myRect.Right  - myRect.Left;
    Edit->Font->Style = TFontStyles()<< fsBold;
    Edit->Text        = StringGrid->Cells[Col][Row];
    Edit->SetFocus();

     Edit->OnExit    = EditExit; // событие при покидании поля Edit
   }
}

//---------------------------------------------------------------------------
void __fastcall TMainForm::EditExit(TObject *Sender)
{
 String EditStr = ((TEdit*)Sender)->Text.Trim();
 if(!EditStr.IsEmpty())
  {
   EditStr[1] = String(EditStr[1]).UpperCase()[1]; // Первуб букву в верхний регистр
  }
 StringGrid->Cells[Col][Row] = EditStr;

 delete((TEdit*)Sender);
}


вроде бы понятно объяснил

Вернуться в Вопросы программирования в C++Builder