StringGridで複数のセルを同時に動かしたい


mook  2015-04-10 19:51:42  No: 47199

教えて頂きたいことがあります。

クリックしてセルを選択した時に一行の複数のセルを同時に動かしたいのですが
いろいろなやり方を試してみた結果以下のような方法で対応できることは分かりましたが
この方法ではセルを編集モードにしていますので(文字入力は制限)
文字を入力する操作を行うと一旦セルが窪んだ状態になります。(文字は入りません)

これは好ましくないのとそもそも編集モードは本来不要(文字入力は不可)なのですが
機能を実現するために仕方なく利用しているもので
出来れば編集モード無しで一行の複数のセルを同時に動かす方法があればと思っています。

編集モード無しでも一応複数のセルを動かすことは出来ますが
少し時間がずれて動くので使い物にはなりません。

何か方法がありましたらよろしくお願いします。

尚、StringGridはフォームに配置しまして
以下のようなソース(抜粋)で動作を確認しています。
(環境はOS:Win8.1 / Delphi6)

procedure TForm1.FormShow(Sender: TObject);
begin
  with StringGrid1 do begin
    FixedCols := 1 ;
    FixedRows := 1 ;
    ColCount  := 2 ;
    RowCount  := 10 ;
    Options   := Options + [goEditing];        // 注    編集モード
       〜略〜
  end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  SRect: TGridRect;
begin
  SRect  := TStringGrid(sender).Selection ;
  if (Acol>=1) and (ARow=SRect.Top) then begin    // 複数セル
     with TStringGrid(sender).Canvas do begin
       Brush.Color := clAqua ;
       Brush.Style := bsSolid ;
       FillRect(Rect);
       Font.Color := clBlack ;
       TextOut(Rect.Left + 2, Rect.Top + 2, TStringGrid(sender).Cells[ACol, ARow]);
     end;
  end;
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  TStringGrid(sender).Refresh;            // 注
end;

// 以下のキー処理でグリッドを編集できないように制限
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := #0;
end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=VK_UP) or (Key=VK_DOWN) or (Key=VK_RETURN) or (Key=VK_PRIOR) or (Key=VK_NEXT) or (Key=VK_HOME) or (Key=VK_END) then
     exit;
  Key := 0;
end;


igy  2015-04-10 21:39:30  No: 47200

> 一行の複数のセルを同時に動かす

の意味がちょっとわからないのですが、

> 以下のようなソース(抜粋)で動作を確認しています。

とありますが、そのソースでは、その"一行の複数のセルを同時に動かす"
の処理は、どこに記載されていますか?


tor  2015-04-10 22:23:45  No: 47201

コードを見ると、今選択されているセルと同じ行全部を同じ色で塗りたいんですかね……提示されたコードでは、実質ア列しかないので効果が分からないですが。
でもその目的だったら、マのメモを有効にして、後はマトテイベントの中でヲサヲサモヲサヲサモヲサヲサ〜ヲサと判定すれば済むんじゃないでしょうか?
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッーエッアーィ金ゥ アエコウオコアク  書込者ノト:ロ 」 「 ン

さん、レスありがとうございます。

ご回答の内容が正に欲しい内容でした。

ヲサモヲサヲサモヲサヲサ〜ヲサこれは組み込んでいませんが
マのメモでばっちりでした。

私の方で付加していましたヲサヤモヌィゥョメヲサヲサも不要のようです。

助かりました、ありがとうございました。

さん、レスありがとうございます。
先にさんの内容で既に解決してしまいましたが一応...

ヲサヲサヲサ一行の複数のセルを同時に動かす
ヲサの意味がちょっとわからないのですが、

特に変わった事では無くそのままの意味で
複数のセルを時間をずらしてとかではなく同時に動かす(色を変える)と言う意味です。

もしかしてセルを物理的?に移動するとかの誤解?があったかも知れませんが...

ちょっと説明がし難いですが...
例えば、メスア〜アーの範囲で、テスアとテスイが背景色ス白色であったとして
メスイでテスアかテスイをクリックしたらメスイのテスアとテスイの色が同時に水色になり
メスウでテスアかテスイをクリックしたらメスウのテスアとテスイの色が同時に水色に変わると言った感じですが
これで分かって頂けるでしょうか?

セルが動くのではなくクリックでセルの色が変わってそれが同時に動く(変わる)と言う事です。
表現で誤解をされたかもしれませんね、申し訳ありません。

ヲサヲサヲサ以下のようなソース(抜粋)で動作を確認しています。
ヲサとありますが、そのソースでは、その「一行の複数のセルを同時に動かす「
ヲサの処理は、どこに記載されていますか?

モヌアトテに処理を定義しており
モヌアテで表示更新しています。
一応このソースはほぼそのままで動くのですが
先ほどのマのメモを設定しましたら全面解決しました。

お騒がせしました。
ありがとうございました。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアオッーエッアーィ金ゥ アエコウカコアケ  書込者ノト:ロ 」 「 ン
モコ 

解決のチェックを忘れていました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加