C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63347] Re:스트링 그리드 에 입력되는 키보드값을 똑같이 Edit 에 써주도록 하려면...
장성호 [nasilso] 1225 읽음    2010-12-24 15:19
음..

님과같이 입력되는 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 로 표현하고 싶으면 어찌해야하나요??

+ -

관련 글 리스트
63339 스트링 그리드 에 입력되는 키보드값을 똑같이 Edit 에 써주도록 하려면... 궁금이 923 2010/12/23
63349     스트링그리드의 OnSetEditText 이벤트를 처리해주시면 됩니다. 심성현 1073 2010/12/24
63347     Re:스트링 그리드 에 입력되는 키보드값을 똑같이 Edit 에 써주도록 하려면... 장성호 1225 2010/12/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.