|
// *********************************************************
// 文字列オブジェクトにコピー
// 行の終わりには、改行コードを付加
// bSelect が true の場合は 選択した行のみコピーする
// bTitle が true の場合は、タイトルもコピーする
// nType
// 0 : タブ
// 1 : カンマ(CSV)
// 2 : \
// 3 : HTML テーブルタグ
// 100 : タブ区切りタイトルのみ
// 101 : カンマ区切りタイトルのみ
// 102 : 改行区切りタイトルのみ
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxListview::CopyString(
BOOL bSelect, BOOL bTitle, int nType, LboxString *LString )
{
DWORD nRows,nCols;
DWORD i;
int nSaveType;
nSaveType = nType;
// 通常文字列としてクリア
LString->SetChar( 0, 0 );
// ワーク用文字列オブジェクト
LboxString *LstrWork;
LstrWork = new LboxString();
// デリミタ
char delim[5][4];
lstrcpy( delim[0], "\t" );
lstrcpy( delim[1], "," );
lstrcpy( delim[2], "\\" );
lstrcpy( delim[4], "\n" );
nRows = LboxListview::Count();
nCols = LboxListview::ColumnCount();
// タイトル部分の作成
if ( nType == 3 ) {
// <TABLE>
LString->operator += ( szTag1 );
}
if ( bTitle ) {
if ( nType == 3 ) {
// <TR>
LString->operator += ( szTag2 );
}
switch( nSaveType ) {
case 100:
nType = 0;
break;
case 101:
nType = 1;
break;
case 102:
nType = 4;
break;
}
for( i = 0; i < nCols; i++ ) {
if ( nType == 3 ) {
// <TH>
LString->operator += ( szTag7 );
}
else {
if ( i != 0 ) {
LString->operator += ( delim[nType] );
}
}
LboxListview::GetColumnTitle(
i,
LstrWork
);
LString->operator += ( LstrWork );
if ( nType == 3 ) {
// </TH>
LString->operator += ( szTag8 );
}
}
if ( nType == 3 ) {
// </TR>
LString->operator += ( szTag3 );
}
if ( nSaveType >= 100 ) {
delete LstrWork;
return true;
}
LString->operator += ( "\n" );
}
// データ部分の作成
int nRow;
nRow = -1;
while( LboxListview::FindNextRow( &nRow ) ) {
// 選択行のみ
if ( bSelect ) {
if ( false == LboxListview::IsState(
nRow,
LVIS_SELECTED
) ) {
continue;
}
}
if ( nType == 3 ) {
// <TR>
LString->operator += ( szTag2 );
}
for( i = 0; i < nCols; i++ ) {
if ( nType == 3 ) {
// <TD>
LString->operator += ( szTag4 );
}
else {
if ( i != 0 ) {
LString->operator += ( delim[nType] );
}
}
LboxListview::GetColumnText(
i,
LstrWork
);
LString->operator += ( LstrWork );
if ( nType == 3 ) {
// </TD>
LString->operator += ( szTag5 );
}
}
if ( nType == 3 ) {
// </TR>
LString->operator += ( szTag3 );
}
LString->operator += ( "\n" );
}
if ( nType == 3 ) {
// </TABLE>
LString->operator += ( szTag6 );
LString->operator += ( "\n" );
}
delete LstrWork;
return true;
}
| |