Asher |
Отправлено: 09.06.2003, 15:51 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Сделал себе таблицу
CODE |
sgdInPut = new TStringGrid(this);//
sgdInPut->Options << goEditing;//Разрешить редактирование
sgdInPut->Options << goAlwaysShowEditor;//Режим редактирования постоянно
|
При вводе данных в ячейке проверяю значение и перебрасываю фокус в одну из следующих ячеек
CODE |
TGridRect GRect; //Регион выделенных ячеек
GRect.Top = Row; //Требуемая строка
GRect.Bottom = Row; //
GRect.Left = Col; //Требуемый столбец
GRect.Right = Col; //
sgdInPut->Selection = GRect; //Установить выделение
|
Но фокус ввода не передается, т.е. требуемая ячейка в clWindow не перекрашивается и курсор ввода не появляется. Установка EditorMode в true дела не меняет(естественно при отключенном goAlwaysShowEditor). А просто нажатие на Enter прекрасно переводит таблицу в EditorMode.
Ваши предложения/рекоментации, как все-таки программно выбирать ячейку для ввода ?
|
|
Admin |
Отправлено: 09.06.2003, 16:36 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Наверное не привели весь код
Вот так все работает:
CODE |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TStringGrid* sgdInPut;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
sgdInPut = new TStringGrid(Form1);
sgdInPut->Parent = Form1;
sgdInPut->Options << goEditing;
sgdInPut->Options << goAlwaysShowEditor;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TGridRect GRect;
GRect.Top = Edit1->Text.ToInt();
GRect.Bottom = Edit1->Text.ToInt();
GRect.Left = Edit2->Text.ToInt();
GRect.Right = Edit2->Text.ToInt();
sgdInPut->Selection = GRect;
}
//---------------------------------------------------------------------------
|
Отредактировано Admin — 9 Jun 2003, 16:36
|
|
Asher |
Отправлено: 09.06.2003, 16:57 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Да, есть еще
CODE |
sgdInPut->DefaultDrawing = false;//
sgdInPut->OnDrawCell = sgdInPutDrawCell;//
|
но я думал что это к делу отношения не имеет, т.к. при переходе в режим редактирования по Enter или F2 для ячейки ввода все прекрасно отрисовывается и без меня, с моей sgdInPutDrawCell
|
|
Asher |
Отправлено: 11.06.2003, 10:01 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Убрал
CODE |
sgdInPut->DefaultDrawing = false;//
sgdInPut->OnDrawCell = sgdInPutDrawCell;//
|
выделение появилось, но соответственно пропала вся раскраска по типам вводимых данных и блокированных ячеек.
Осталось подумать что лучше оставить: раскраску или автовыделение ячейки ввода
|
|