2017-10-28
テーブルに編集機能をつけてみたよ!
なでしこ1 |
クリックした時、画像部分コピーで選択色を入れる代わりに、メモを開くようにしただけです。
デフォルトはオフですが、「編集はオン」とすると、有効になります。
アイテムの変更が確定するのは、別のセルにフォーカスが移った時です。
#----------------------------------------------------------------------- #「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を自動作成。 #-----------------------------------------------------------------------
どうかな~?
うまくいってると思うんだけど。
とりあえず、ちょっとワタシが使う分には大丈夫そう☆
トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20171028
リンク元
- 23 http://www.eznavi.net/bbs/index2.php?pagetop=326&only=one
- 6 http://nadesiko.g.hatena.ne.jp/
- 6 http://nadesiko.g.hatena.ne.jp/keyword/条件分岐
- 6 http://nadesiko.g.hatena.ne.jp/keyword/四角
- 5 https://nadesiko-users.info/@snowdrops89?max_id=99388067131724953
- 5 http://nadesiko.g.hatena.ne.jp/keyword/文字書体
- 4 https://www.google.co.jp/
- 4 https://www.eznavi.net/bbs/index2.php?pagetop=326&only=one
- 3 http://search.yahoo.co.jp/
- 3 http://nadesiko.g.hatena.ne.jp/keyword/マウス移動
変更箇所は結構少ないです。
(設定反映のために、一見、無駄に見える命令があるります。)
weyk.la.coocan.jp/files/tableU.zip
Unicode系の命令を調べている中で、表示サイズを調べる命令と、実際の表示する命令がいくつかあったので、うまく使えばGridのセルを表示するときに役立ちそうです(はみ出るときは「...」的なものを表示 とかもできるっぽい)
シカシ、いきなり「CSVの記述に誤りがあります」とか言われてしまったのでした。しくしく。
文字列を""でくくったらダメっぽい・・??
これまで文字コードのコトなんて気にして生きてこなかったので、Unicodeのこと自体があまり分かっていなかったり;
もうちょっとよくお試ししてみますです☆
ほんとは、CSV取得のUT8版かASCII版(SJISではだめ)があるとよいのですが
ありがとうございます、うまくいきました☆
本当は「UniUtil.nako」の中身をよく研究すると色々賢くなれそうな気がしているんですが、まだそこまで到達していません(^▽^;