|
코딩없이 바로 구현되는 StringGrid는 모르겠습니다.
TStringGrid에서 지원하는지도 모르겠구요
그렇지만 KeyPress이벤트를 이용해 간단히 구현할수 있습니다.
샘플코드에서 sg1 , sg2 는 TStringGrid 입니다.
//---------------------------------------------------------------------------
void __fastcall TForm1::sg1KeyPress(TObject *Sender, char &Key) // 클립보드에 복사
{
if(Key==0x03)
{
TStringList *sl=new TStringList;
TGridRect gc=sg1->Selection;
String str;
for(int h=gc.Top;h<=gc.Bottom;h++)
{
str="";
for(int i=gc.Left;i<=gc.Right;i++)
{
str=str+sg1->Cells[i][h]+"\t";
}
sl->Add(str);
}
Clipboard()->SetTextBuf(sl->Text.c_str());
delete sl;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sg2KeyPress(TObject *Sender, char &Key) // 클립보드에 가져와서 붙여넣기
{
if(Key==0x16)
{
if(!Clipboard()->HasFormat(CF_TEXT ))return;
String str=Clipboard()->AsText;
TStringList *sl=new TStringList;
sl->Text=str;
TGridRect gc=sg2->Selection;
TStringList *sd=new TStringList;
for(int h=0;h<sl->Count;h++)
{
sd->Delimiter='\t';
sd->DelimitedText=sl->Strings[h];
for(int i=0;i<sd->Count;i++)
{
sg2->Cells[gc.Left+i][gc.Top+h]=sd->Strings[i];
}
}
delete sl;
delete sd;
}
}
//---------------------------------------------------------------------------
클립보드에 복사가 되면 당연히 excel에 붙여넣기에는 문제가 없습니다.
또한 Excel에서 복사한것도 클립보드에 들어가게 되므로
클립보드에서 가져와서 grid에 붙여넣기도 문제없구요
다른 모든 윈도우 프로그램 text는 copy paste가 됩니다.
깡이 님이 쓰신 글 :
: 안녕하세요.
: 처음 C++빌더를 프로젝트로 접하면서 맨땅에 해딩하고 있습니다. ^^;;
: 도와주세요~~~~ ㅜ.ㅜ 급급!!!!
:
: 질문!!
:
: stringGrid 의 데이터를 윈도우에서 사용 하듯이
: 마우스로 정해서(셀을 긁어서...) CTRL + C, CTRL + V (stringGrid <-> StringGrid, StringGrid <-> Excel)
: 을 사용하고자 합니다.
: 현재 제가 가지고 있는 프로젝트에는 위의 기능이 가능한 그리드를 보면
: 코드로서 막거나, 이벤트 처리해준 내용이 없습니다.
: (2개의 그리드 중 1개의 그리드는 위의 기능 가능, 1개의 그리드는 불가능 상태)
:
: 혹시 프로퍼티 조정으로 가능한가요?!
: window key 가 가능한 그리드의 속성을 일치하게 전부 맞추어줘봐도...똑같이 이루어 지지 않는군요.
: 어떤 옵션을 주어야 가능한지 모르겠습니다.
:
: 2번 질문. 그리드 생성 한 후에..
: 필드명을 입력하고자 합니다.
: 그리드에 하드하게 박아주는것 같던데... 어떤 메뉴를 통해서인가요.
:
: 너무나 초보적인 질문인지는 모르겠습니다만...
: 시간을 너무 지체하기보단 고수님들의 조언을 얻고자 합니다.
: 감사합니다. ㅜ.ㅜ
|