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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1073] [Controls] Clipboard를 이용한 StringGrid의 Copy & Paste
장성호 [nasilso] 11115 읽음    2012-02-15 12:25
StringGrid에서 복사 붙여넣기 관련된 질문이 종종 오라와서

Clipboard를 이용해 한번 만들어 보았습니다.

충분히 테스트 해본것은 아니니 문제점이 있으면 댓글 달아주시고
수정해서 쓰세요

복사 붙여넣기 함수
#include "Clipbrd.hpp"

//----------------------------------------------------------------------
// StringGrid의 선택된 Cell의 내용을 CR과 Tab으로 구분해 Clipboard 에 복사
//----------------------------------------------------------------------
void __fastcall CopyGridToClipboard(TStringGrid *Grid)
{
	TGridRect sRec=Grid->Selection;
	TStringList *sLst=new TStringList;
	String s;
	for(int iRow=sRec.Top;iRow<=sRec.Bottom;iRow++)
	{
		s="";
		for(int iCol=sRec.Left ; iCol < sRec.Right ; iCol++)
		{
			s=s+Grid->Cells[iCol][iRow]+'\t';
		}
		s=s+Grid->Cells[sRec.Right][iRow];
		sLst->Add(s);
	}
	Clipboard()->AsText=sLst->Text;
	delete sLst;
}
//---------------------------------------------------------------------
// CR과 Tab으로 구분된 Clipboard.Text를 StringGrid에 붙여넣기
//---------------------------------------------------------------------
void __fastcall PasteClipboardToGrid(TStringGrid *Grid)
{
	String str=Clipboard()->AsText;
	if(str=="")return;
	TStringList *sLowLst=new TStringList;
	TStringList *sCols=new TStringList;

	TGridRect sRec=Grid->Selection;

	sLowLst->Text=str;

	sCols->StrictDelimiter=true;
	sCols->Delimiter='\t';

	for(int i=0;iCount;i++)
	{
		if( (sRec.Top+i)>=Grid->RowCount)break;
		String sRowStr=sLowLst->Strings[i];
		sCols->DelimitedText=sRowStr;
		for(int c=0;cCount;c++)
		{
			if( (sRec.Left+c)>=Grid->ColCount)break;
			Grid->Cells[sRec.Left+c][sRec.Top+i]=sCols->Strings[c];
		}
	}

	delete  sLowLst;
	delete  sCols;
}



사용방법은?
다음과 같이 쓰시면 될듯합니다.

void __fastcall TForm6::StringGrid1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
	if(Shift.Contains(ssCtrl))
	{
		if( Key=='C' || Key=='c')
		{
			CopyGridToClipboard((TStringGrid *)Sender);
		}
		else if(Key=='V' || Key=='v')
		{
			PasteClipboardToGrid((TStringGrid *)Sender);
		}
	}
}



추신:
  copy해서 Excel에 붙여넣기 해도 잘 됩니다.

그럼...

+ -

관련 글 리스트
1073 [Controls] Clipboard를 이용한 StringGrid의 Copy & Paste 장성호 11115 2012/02/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.