Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/10/28 (土)

テーブルに編集機能をつけてみたよ!

| 17:43 | テーブルに編集機能をつけてみたよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - テーブルに編集機能をつけてみたよ! - 雪乃☆雫のなでしこ日和 テーブルに編集機能をつけてみたよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 クリックした時、画像部分コピーで選択色を入れる代わりに、メモ開くようにしただけです。

 デフォルトはオフですが、「編集はオン」とすると、有効になります。

 アイテムの変更が確定するのは、別のセルにフォーカスが移った時です。

#-----------------------------------------------------------------------
#「table_改.nako」
# 編集機能付きテーブル
#-----------------------------------------------------------------------
■テーブル改 +イメージ
 ・太{=2}
 ・線色{=$CCCCCC}
 ・背景色{=$FFFFFF}
 ・選択色{=$EEEEEE}
 ・文字色{=$000000}
 ・文字サイズ{=12}
 ・フォント{=「MS ゴシック」}

 ・左余白{=3}
 ・右余白{=10}
 ・上余白{=3}
 ・下余白{=5}
 ・最小セル幅{=30}
 ・編集{=オフ}

 ・列数
 ・行数
 ・アイテム ←アイテム設定 →アイテム取得
 ・アイテム_
 ・アイテム取得~それ=アイテム_。
 ・アイテム設定(S)~
  Sの変数型確認。
  もしそれが「配列」でなければ、アイテム_=SをCSV取得。
  違えば、アイテム_=S。
  アイテム_=アイテム_表行列交換。
  列数=アイテム_要素数。
  アイテム_=アイテム_表行列交換。
  行数=アイテム_要素数。

 ・標準カラー設定({数値=0}Vに)~
  Vで条件分岐
   0ならば文字色黒色。背景色=白色線色=$CCCCCC。選択色=$EEEEEE。
   1ならば文字色=白色線色=$808080。背景色=黒色。選択色=$808080。

 ・作る~
  オブジェクト=VCL_CREATE(自身, 名前, VCL_GUI_IMAGE)。
  テーブルイメージバックアップ画面をイメージとして作成。
  テーブルイメージバックアップ画面→可視=オフ。
  テーブルイメーフォーカス用画面をイメージとして作成。
  テーブルイメーフォーカス用画面→可視=オフ。
  テーブル編集用メモメモとして作成。
  テーブル編集用メモ→可視はオフ。
  テーブル編集用メモ→スクロールバー。

 ・選択行
 ・選択列
 ・マウス移動した時は~/*マウス位置設定するためのダミー定義*/
 ・クリックした時は~フォーカス選択。
// ・ダブルクリックした時は~選択行&`,`&選択列と言う。

 ・セルX
 ・セルY
 ・セルW
 ・セルH
 ・セル編集フラグ{=0}
 ・フォーカス選択~
  セル内容変更。
  左位置=``。右位置=``。上位置=``。下位置=``。
  高列=高配列&改行&H。幅列=列幅配列。
  
  オン
   I=回数-1。左位置=幅列[0]。幅列の0を配列削除。
   (幅列[0]>マウスX)ならば、右位置=幅列[0]。抜ける。
  選択列=I。もし、選択列>列数-1ならば、選択列=列数-1。
  オン
   I=回数-1。上位置=高列[0]。高列の0を配列削除。
   (高列[0]>マウスY)ならば、下位置=高列[0]。抜ける。
  選択行=I。もし、選択行>行数-1ならば、選択行=行数-1。
  
  セルX=左位置+描補正位置。セルY=上位置+描補正位置。セルW=右位置-左位置-線太さ。セルH=下位置-上位置-線太さ。
  S=私→アイテム。S=S[私→選択行][私→選択列]。テーブル編集用メモ→テキストはS。
  テーブル編集用メモ文字サイズは私→文字サイズ。テーブル編集用メモ文字書体は私→フォント。
  テーブル編集用メモ→Xは私→セルX+私→X。テーブル編集用メモ→Yは私→セルY+私→Y。
  テーブル編集用メモ→Wは私→セルW。テーブル編集用メモ→Hは私→セルH。
  もし、編集=オンならば、テーブル編集用メモ→可視はオン。テーブル編集用メモ→注目。
  違えば、
    テーブルイメージバックアップ画面を私の0,0へ画像コピー。
    テーブルイメーフォーカス用画面のセルX,セルY,セルW,セルHを私のセルX,セルYへ画像部分コピー。
    描画処理反映。
  セル編集フラグ=1。

 ・セル内容変更~
  テーブル編集用メモ→可視はオフ。
  自身を私にグループ参照コピー。
  もし、セル編集フラグ=0でなければ、
    S=私→アイテム。S[私→選択行][私→選択列]はテーブル編集用メモ→テキスト。
    私→アイテム=S。自動作成。

 ・高配列
 ・描補正位置
 ・アイテム段数配列
 ・自動作成~
  もし線太さ%2=0ならば、描補正位置=(太/2)を切捨。
  違えば、描補正位置=(太/2)を切捨+1。
  システム設定変更。文字幅設定する。自身白色画面クリア。
  アイテム配列座標付情報作成する。
  HI=(線太さ/2)を切捨。
  //外枠を描く
  自身の(線太さ/2)を切捨,(線太さ/2)を切捨からW+1-(線太さ/2)を切捨,表下位置+1+(線太さ/2)を切捨へ四角。
  高配列=(線太さ/2)を切捨。最大出現数とは整数=0。
  アイテムを反復
   //行を描く。
   V=アイテム段数配列[回数-1]。
   (V+1)、HI=HI+文字高。
   HI=HI+(上余白+下余白)。
   もし回数行数ならば自身太-1,HIからW-線太さ+1,HIへ。
   HIを高配列配列追加。
  //列を描く。
  列幅配列反復
    (回数>1)かつ(回数<列数+1)ならば自身対象,0から対象,表下位置へ。
  
  アイテム描画する。
  バックアップ画面作成する。
  システム設定戻す。

 ・S_塗色
 ・S_太
 ・S_文字色
 ・S_線色
 ・S_文字サイズ
 ・S_文字書体
 ・システム設定変更~
  S_塗色=システム:塗色。S_太=システム:太。S_線色=システム:線色。S_文字色=システム:文字色。S_文字サイズ=システム:文字サイズ。S_文字書体=システム:文字書体。
  システム:塗色=背景色。システム:太=太。システム:線色線色。システム:文字色文字色。システム:文字サイズ文字サイズ。システム:文字書体=フォント。
 ・システム設定戻す~
  システム:塗色=S_塗色。システム:太=S_太。システム:線色=S_線色。システム:文字色=S_文字色。システム:文字サイズ=S_文字サイズ。システム:文字書体=S_文字書体。

 ・アイテム描画~
  自身を私にグループ参照コピー。X1とは整数。Y1とは整数。
  テーブルイメーフォーカス用画面を貴方にグループ参照コピー。
  貴方→サイズ=私→サイズ。貴方→画面クリア(私→選択色)。
  アイテム配列座標付情報を反復
   X1=対象[1]。Y1=対象[2]
   自身のX1,Y1へ対象[0]を文字表示。
   貴方のX1,Y1へ対象[0]を貴方:文字表示。

 ・アイテム配列座標付情報
 ・アイテム配列座標付情報作成~
  HI=(線太さ/2)を切捨。I=0。アイテム配列座標付情報=``。
  アイテムを反復
   対象反復
    アイテム配列座標付情報[I][0]=対象
    アイテム配列座標付情報[I][1]=(列幅配列[回数-1]+左余白)
    アイテム配列座標付情報[I][2]=(HI+上余白)。
    Iに1を直接足す。
   V=アイテム段数配列[回数-1]。
   (V+1)、HI=HI+文字高。
   HI=HI+(上余白+下余白)。

 ・バックアップ画面作成~
  自身を私にグループ参照コピー。
  テーブルイメージバックアップ画面→サイズ=私→サイズ。
  自身をテーブルイメージバックアップ画面の0,0へ画像コピー。

 ・文字高
 ・表下位置 //表の下の位置
 ・文字情報設定~
  アイテム段数配列。
  アイテムを反復
   最大出現数=0。
   対象反復
    V=対象で「{CHR(10)}」の出現回数。
    (最大出現数<V)ならば、最大出現数=V。
   最大出現数をアイテム段数配列配列追加。
  
  実行数とは整数=0。
  アイテム段数配列反復
   実行数=実行数+(対象+1)
  
  文字高=`字`の文字高さ取得。
  表下位置=(実行数×文字高)+行数*(上余白+下余白)。

 ・最大列幅
 ・列幅配列
 ・文字幅設定~
  文字幅表=``。最大列幅=``。列幅配列。
  文字情報設定。
  アイテムを反復
   I=回数-1。V=0。
   対象反復
    対象を「{CHR(10)}」で区切って反復
     もし、V<(対象文字幅取得)ならば、V=対象文字幅取得。
    もし、V<最小セル幅ならば、V=最小セル幅。
    文字幅表[I][回数-1]=V+左余白+右余白。
    V=0。
   文字幅表[I]の配列合計を最大列幅に配列追加。
  最大列幅=最大列幅の配列最大値。
  V=0。
  (線太さ/2)を切捨を列幅配列配列追加。
  (文字幅表の表列数)
   V=文字幅表の(回数-1)を表列取得配列最大値+太をVに直接足。
   Vを列幅配列配列追加。
  表サイズ設定する。

 ・サイズ
 ・表サイズ設定~W=列幅配列配列最大値+描補正位置。H=表下位置+太。サイズ[0][0]=0。サイズ[0][1]=0。サイズ[0][2]=W。サイズ[0][3]=表下位置。

#-----------------------------------------------------------------------
# 以下はテスト
#!「table_改.nako」を取り込む。
ファイル名=「{デスクトップ}Book1.csvもし、ファイル名の存在はいならば、データはファイル名を開く違えば、データ=「1,2,3
A,B,"C""D""E"
"いろはにほへと{~}ちりぬるを","わかよ,たれ","つねならむ"」

Tとはテーブル改。
これについて
  編集はオン。
  アイテムはデータ。

母艦について
 クリックした時は~
  Tのセル内容変更。
  Tを自動作成。
 閉じた時は~
  Tのアイテムをファイル名に保存。

Tを自動作成。
#-----------------------------------------------------------------------

 どうかな~?

 うまくいってると思うんだけど。

 とりあえず、ちょっとワタシが使う分には大丈夫そう

通りすがり通りすがり2017/10/31 21:04Unicode系の命令をまとめたnakoファイルを用意して、UTF8用のものを作ってみました。
変更箇所は結構少ないです。
(設定反映のために、一見、無駄に見える命令があるります。)

weyk.la.coocan.jp/files/tableU.zip

Unicode系の命令を調べている中で、表示サイズを調べる命令と、実際の表示する命令がいくつかあったので、うまく使えばGridのセルを表示するときに役立ちそうです(はみ出るときは「...」的なものを表示 とかもできるっぽい)

雪乃☆雫雪乃☆雫2017/11/02 00:43いつもながら、さすがですね~!(@_@)
シカシ、いきなり「CSVの記述に誤りがあります」とか言われてしまったのでした。しくしく。
文字列を""でくくったらダメっぽい・・??
これまで文字コードのコトなんて気にして生きてこなかったので、Unicodeのこと自体があまり分かっていなかったり;
もうちょっとよくお試ししてみますです☆

通りすがり通りすがり2017/11/03 18:35初期データ(UTF8の二次元配列のデータ)の生成だけうまくゆかないようなので、1項目づつUTF8に変換するようにしてみました。
ほんとは、CSV取得のUT8版かASCII版(SJISではだめ)があるとよいのですが

雪乃☆雫雪乃☆雫2017/11/06 15:30遅くなりましてスミマセン;
ありがとうございます、うまくいきました☆
本当は「UniUtil.nako」の中身をよく研究すると色々賢くなれそうな気がしているんですが、まだそこまで到達していません(^▽^;

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20171028