음..
님과같이 입력되는 Key값을 가지고
원하는것을 얻을수 없을것입니다.
만약 몇글자 선택후에 특정문자를 입력하면..
선택된 문자들은 삭제되고 새로운 문자가 입력되겠죠..
--------------------------------------------------------
다음 방법은 어떨까 합니다.
매번 StringGrid의 수정중인 Text의 내용을 가져와 TEdit에 대입하는 방법으로 해봤습니다.
TStringGrid 및 대부분의 Grid에는 내부에 InplaceEdit 또는 그 비슷한 종류의 Control이 감춰져 있습니다.
Grid의 Cell을 수정할때 나타나서 입력을 받는 놈이 바로 이놈이죠
기본 Component인 TStringGrid는 TInplaceEdit 라는 클래스가 그놈이죠
외부에 open이 되어있지 않기 때문에 다음과 같은 방법으로 찾을수 있습니다.
방법1.
void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)
{
HWND h=FindWindowExA(StringGrid1->Handle,NULL,"TInplaceEdit","");
if(h)
{
char buf[256];
GetWindowTextA(h,buf,255);
Edit1->Text=buf;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1KeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
HWND h=FindWindowExA(StringGrid1->Handle,NULL,"TInplaceEdit","");
if(h)
{
char buf[256];
GetWindowTextA(h,buf,255);
Edit1->Text=buf;
}
}
//---------------------------------------------------------------------------
방법2.
기본 TStringGrid의 TInplaceEdit도 TCustomEdit를 상속받은 놈이기때문에..
Controls 프로퍼티를 통해 접근이 가능합니다.
void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)
{
if(StringGrid1->ControlCount>0)
{
TCustomEdit *edt=(TCustomEdit *)StringGrid1->Controls[0];
Edit1->Text=edt->Text;
}}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1KeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(StringGrid1->ControlCount>0)
{
TCustomEdit *edt=(TCustomEdit *)StringGrid1->Controls[0];
Edit1->Text=edt->Text;
}
}
//---------------------------------------------------------------------------
그럼..
궁금이 님이 쓰신 글 :
: OnKeyPress 속성에
:
: TextEdit->Text = TextEdit->Text + Key;
:
: 이렇게 했습니다.
:
: 위 처럼 하면 스트링 그리드에 아무것도 써있지 않을때는 잘 되는데..
:
: 스트링 그리드에 다른글씨가 써있는 상태에서 위처럼 하면 백스페이스도 안먹고 ( 이상한 문자가 써지네요 그리고 추가추가해서 써져요 )
:
: 스트링 그리드에 내가 선택한 행의 글씨를 똑같이 Edit 로 표현하고 싶으면 어찌해야하나요??