SSpread

Q1 33
SSpreadで作成した表上の選択したセルへコメントを登録したい
A1 33
任意のセルへのコメント登録は以下2つのパターンで実装が可能です。

(1)SSpread.CellTagプロパティとTextFrameクラスを利用する
(2)SSpread.CellNoteメソッドでセルの入力を行う
(1)SSpread.CellTagプロパティとTextFrameクラスを利用する
  メリット
  SSpread.FindCellTagメソッドでCellTagプロパティにセットされた
文字列の検索ができる
  コメントの文字列に関する設定(文字色、サイズ)や背景色を変えられる
  デメリット
  (2)の実装方法に比べ、コメントを表示する処理の制御をする必要がある
  [操作イメージ]
  右クリックで「コメントの追加/編集」ポップアップを表示
     図1
   
  表示のダイアログ内にコメントを入力する
     図2
   
  コメント入力したセル(背景色ピンクの箇所)から一度フォーカスを外し、フォーカスを当てなおすと入力したコメントが表示される
     図3
   
    [サンプルコード]

 Sspd50_033_01.crs
Form Form1 {
 ・・・
 SSpread SSpread1 {
  ・・・
  
  BackColorStyle = $BackColorStyleUnderGrid;
  
  /* LeaveCellイベントハンドラ処理判断フラグ */
  Number evflg;
  
  Function OnRClicked( e ) {
   
   /* popupMenuへ表示するメニュー設定 */
   var xml_txt = "<?xml version=\"1.0\" encoding=\"SHIFT_JIS\"?>
   <menudefine>
   <menuitem id=\"1\" title=\"コメントの追加/編集\" />
   </menudefine>";
   
   var domimpl = new xmlDOMImplementation;
   var dom = domimpl.parse(xml_txt);  
   
   /* XMLデータをpopupMenuへセット */
   var id = popupMenu(dom);
   if(id == 1){
    Col = e.Col;
    Row = e.Row;
    /* Dialogを出すとLeaveCellイベントが発生してしまうので
    フラグを立てる */
    evflg = 1;
    Get("Dialog1.crs");
    /* Dialogの表示位置を調整 */
    var ret = GetCellPos(e.Col, e.Row);
    Dialog1.X = //.X + this.X + ret.X + ret.Width + 5;
    Dialog1.Y = //.Y + this.Y + ret.Y + 45;
    Dialog1.Form1.StyleEdit1.Value = CellTag;
   }
  }
 
  /* アクティブセルを移動した場合 */
  Function OnLeaveCell( e ) {
   if(evflg == 0){
    Col = e.NewCol;
    Row = e.NewRow;
    
    if(BgColor == $FFCCFF){
     /* コメント表示 */
     ^.TextFrame1.Visible = $TRUE;
     /* コメント表示位置調整 */
     var ret = GetCellPos(e.NewCol, e.NewRow);
     ^.TextFrame1.X = this.X + ret.X + ret.Width + 5;
     ^.TextFrame1.Y = this.Y + ret.Y + 20;
     ^.TextFrame1.Value = CellTag;
    }else{
     ^.TextFrame1.Visible = $False;
    }
   }
  }
 }
 /* コメントを表示するTextFrame */
 TextFrame TextFrame1 {
  ・・・
  ScrollBarPosition = $NONE;
  Border = $TRUE;
  BgColor = $FFCCFF;
  Visible = $FALSE;
  TabIndex = 0;
 }
}
     Dialog1.crs
Dialog Dialog1 {
 ・・・
 Form Form1 {
  ・・・
  StyleEdit StyleEdit1 {
  ・・・
  }
		
  Function OnKeyDown( e ) {
    if(e.key == "ESCAPE"){
     ^.OnClose();
    }
   }
 }
 /* Dialogクローズ時の処理 */
 Function OnClose( e ) {
  //.DecideValue();
  ^.BgColor = $FFCCFF;
  ^.CellTag = Form1.StyleEdit1.Value;
  this.Delete();
  ^.evflg = 0;
 }

▲ページのトップへ

(2)SSpread.CellNoteメソッドでセルの入力を行う
  メリット
  (1)の実装方法と比較してコメント表示の処理を記述する必要がない
  デメリット
  コメントのフォントに関する設定(文字色、サイズ)や背景色の設定ができない
  [操作イメージ]
  右クリックで「コメントの追加/編集」ポップアップを表示
     図1
   
  表示のダイアログ内にコメントを入力する
     図2
   
  コメントを登録すると、対象セルの右上角に赤い三角印が表示される
     図3
   
    ※カーソルをずらすと下図のような三角印が見える
   
  赤い三角印にカーソルをあてると、設定したコメントが表示される
     図4
   
    [サンプルコード]
 Sspd50_033_02.crs
Form Form1 {
 ・・・
 SSpread SSpread1 {
  
  ToolTip = "右クリックするとコンテキストメニューが表示されます";
  X = 6;
  Y = 141;
  Width = 609;
  Height = 216;
  
  Function OnRClicked( e ) {
   
   /* popupMenuへ表示するメニュー設定 */
   var xml_txt = "<?xml version=\"1.0\" encoding=\"SHIFT_JIS\"?>
   <menudefine>
   <menuitem id=\"1\" title=\"コメントの追加/編集\" />
   </menudefine>";
   
   var domimpl = new xmlDOMImplementation;
   var dom = domimpl.parse(xml_txt);  
   
   /* XMLデータをpopupMenuへセット */
   var id = popupMenu(dom);
   if(id == 1){
    Col = e.Col;
    Row = e.Row;
    Get("Dialog2.crs");
    /* Dialogの表示位置を調整 */
    var ret = GetCellPos(e.Col, e.Row);
    Dialog2.X = //.X + this.X + ret.X + ret.Width + 5;
    Dialog2.Y = //.Y + this.Y + ret.Y + 45;
   }
  }
 }
}
    Dialog2.crs
Dialog Dialog2 {
・・・
 Form Form1 {
  StyleEdit StyleEdit1 {
 ・・・
  }
   Function OnKeyDown( e ) {
    if(e.key == "ESCAPE"){
     ^.OnClose();
    }
   }
 }
	
 /* Dialogクローズ時の処理 */
 Function OnClose( e ) {
  //.DecideValue();
  ^.CellNote = Form1.StyleEdit1.Value;
  this.Delete();
 }
}

▲ページのトップへ

実際の挙動については、CRSファイル形式のサンプル
  「SSpreadで作成した表上の選択したセルへコメントを登録したい(Sspd50_033.zip)」
をご確認ください。
管理番号:Sspd50_033
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser V・Biz/Designer V TIPS集 トップへ