FlexView

Q12 32

選択した範囲のセルのデータを「Ctrl」キー + 「C」キー押下でクリップボードへコピーしたい 
[内容]
FlexView上のセルを範囲選択して「Ctrl」キー + 「C」キーでデータをコピーし、テキストファイル等へ貼り付けするにはどうすればよいか

A12 32
FlexItemクラスのClickedイベントで、選択された範囲のセルの処理を行い、「Ctrl」キー + 「C」キー押下時にセルのデータをコピーする処理は、FormクラスのKeyDownイベントと、RootクラスのCopyStringメソッドを利用する事で実装ができます。

以下サンプルでは、FlexView上のセルを「Shift」キーを押しながらクリックした範囲をデータコピー対象として背景色を変え、データをコピー用に生成する処理を行っています。
また、「Ctrl」キー + 「C」キーが押下された際に生成されたデータをCopyStringメソッドを利用してクリップボードへのコピー処理を行っています。

[サンプルコード1] ※記述ポイント抜粋
 FlexView FlexView1 {
  X = 44;
  Y = 117;
  Width = 292;
  Height = 245;

  FlexRecord FlexRecord1 {
    
   FlexLabel FlexLabel1 {
    Width = 60;
    Title ="商品";
   }
・・・・・・・・・・・(略)
  }
  
  /*
    行の指定
  */
  /* 前回選択位置 */
  Number bRow = 0;
  /* 選択開始位置 */
  Number sRow = 0;
  /* 選択終了位置 */
  Number eRow = 0;
  
  /*
    列の指定
  */
  /* 前回選択位置 */
  Number bCol = 0;
  /* 選択開始位置 */
  Number sCol = 0;
  /* 選択終了位置 */
  Number eCol = 0;

  Function OnClicked( e ) {
   var b_row = bRow;
   var a_row = e.row.Position;
   var b_col = bCol;
   var a_col = ColumnPosition;
   var row_obj;
   var cp_val;
   ^.cp_data = "";
   
   if( e.shiftKey ) {
    /* Shiftキーが押されていた場合、範囲選択 */

    /* 選択を解除 */
    for( var i = 0; i < RowCount; i++ ) {
     row_obj = GetRow( i );
     row_obj.FlexLabel1.BgColor = $STD;
     row_obj.FlexLabel2.BgColor = $STD;
     row_obj.FlexLabel3.BgColor = $STD;
     row_obj.FlexLabel4.BgColor = $STD;
     row_obj.FlexLabel5.BgColor = $STD;
    }

    /* 選択開始・終了位置を設定 */
    
    sCol = b_col < a_col ? b_col : a_col;
    eCol = b_col < a_col ? a_col : b_col;
    
    sRow = b_row < a_row ? b_row : a_row;
    eRow = b_row < a_row ? a_row : b_row;
    /* 選択 */
    for( var i = sRow; i <= eRow; i++ ) {
     row_obj = GetRow( i );
     cp_val = "";
   /* 選択されたセルの背景色を水色に変更し、コピー用のデータを生成 */
     for(var j = sCol; j <= eCol; j++) { 
      if( j == 0){
       row_obj.FlexLabel1.BgColor = ^.CursorLine;
       cp_val += row_obj.FlexLabel1.value;
      }
      if( j == 1){
       row_obj.FlexLabel2.BgColor = ^.CursorLine;
       if(cp_val != ""){
        cp_val += "\t";
       }
       cp_val += row_obj.FlexLabel2.value;
       
      }
   ・・・・・・・・・・・(略)
    }
   } else {
    /* クリック操作のみの場合、選択を解除 */
    for( var i = 0; i < RowCount; i++ ) {
     row_obj = GetRow( i );
     row_obj.FlexLabel1.BgColor = $STD;
     row_obj.FlexLabel2.BgColor = $STD;
     row_obj.FlexLabel3.BgColor = $STD;
     row_obj.FlexLabel4.BgColor = $STD;
     row_obj.FlexLabel5.BgColor = $STD;
    }
    
    switch (a_col) {
     case 0:
      ^.cp_data += e.row.FlexLabel1.value;
     break;
     case 1:
      ^.cp_data += e.row.FlexLabel2.value;
     break;
     case 2:
      ^.cp_data += e.row.FlexLabel3.value;
     break;
     case 3:
      ^.cp_data += e.row.FlexLabel4.value;
     break;
     case 4:
      ^.cp_data += e.row.FlexLabel5.value;
     break;
    }
    /* 始点のクリア */
    bRow = a_row; 
    sRow = bRow;
    eRow = bRow;
    bCol  = a_col;
    sCol = bCol;
    eCol = bCol;
   }
  }
 }
 
 Function OnKeyDown( e ) {
 /* 「Ctrl」キー + 「C」キー押下時 */
  if (e.CtrlKey == 1 && e.Key == "C") {
 /* クリップボードへコピー */
   //.CopyString(cp_data);
   //.MessageBox("クリップボードへコピーしました");
  }
 }

実際の挙動については、CRSファイル形式のサンプル
   「選択した範囲のセルのデータを「Ctrl」キー + 「C」キー押下で
    クリップボードへコピーしたい(Flx_032.zip)」

をご確認ください。

管理番号:Flx_032
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ