TBUTTONをクリックしたら、DBGRID CELLクリックをしたときに実行される方法を探しています。ただし、DBGRIDのCELLをクリックしてもその処理は実行されないようにしたいと思ってます。SENDERを使用する方法ですと、DBGRID CELL CLICK処理が発生しないように制御できないので、なにかいいアイデアは・方法はありますか(DELPHI5です)?
>DELPHI5です
>SENDERを使用する方法ですと、DBGRID CELL CLICK処理が発生しないように制御できないので
私の持っているDelphi5のDBGridのOnCellClickイベントにはSenderがありません.
また,
>DBGRID CELLクリックをしたときに実行される方法を探しています。
>ただし、DBGRIDのCELLをクリックしてもその処理は実行されないようにしたいと思ってます。
(改行位置変更しました)
というのはよく意味が理解できませんので,
当方で勝手にこんな動作が希望なのではないかと推測してテストしてみました.
動作確認環境は,
Windows XP(SP3) + Delphi5(UP1) Pro + BDE paradox
つまり
(1) ボタンをクリックした時に,DBGridのOnCellClickを実行したい
(2) この時,マウスでDBGridをクリックした時とは別の動作を実行したい
(3) 開発環境は,Window XP(SP3) + Delphi5(UP1) Pro
データベーはDelphi付属のParadoxで,BDEを使用.
どんな方法があるでしょうか.
という質問に対する方法のひとつです.
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if Column = nil then begin
ShowMessage('セルはクリックされないけど呼ばれたよ');
end else begin
ShowMessage('セルがクリックされたよ');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid1CellClick(nil);
end;
Mr.XRAYさんありがとうございます。
私が言いたかったことは、BUTTON1をクリックしたときに,DBGridCellClickのプロシージャーに書いた内容を実行することです。なので、まずDBGRIDに自分のしたい実行内容のコードを書き、それをBUTTON1をクリックしたに発生させます。しかしながら、単純にDBGRIDに書くだけだと、DBGRIDのCELLをクリックしたときにも、同様の処理が実行されてしまうので、その処理の実行を回避する方法をさがしていました。
このnilというのは、どのようなことを指しているのですか?調べたのですが、はっきりと理解できませんでした。
>私が言いたかったことは、(以下略)
ということは,私の推測は違っていたということですね.
残念でした.
>このnilというのは、どのようなことを指しているのですか?
さて,困りました.それこそ「どうすれば」理解していただけるか説明を考えておきます.
Mr.XRAYさん、すみません。Mr.XRAYの私の質問への解釈はあっています。私の表現の仕方がわるかったので、改めてあのように書きました。ただ、正確に伝わっていたかどうかは、nilの部分を理解しないとわからない状態です。
BUTTON1をクリックしたときに実行したい処理を具体的に書いた方が分かりやすいと思うよ。
その処理にはColumnの値が必要なの?
>このnilというのは、どのようなことを指しているのですか?
と言われても困ってしまうんです.実は.
OnCellClickイベントには引数が1つあります.
ですから,これを呼び出す時には,引数を与える必要があります.
これはどんな関数,メソッドも原則的にはそうです.
ただし,関数やメソッドの作成方法によっては,引数の全てまたは一部を省略するようにもできます.
この場合省略はできません.
それで,nilと言う定数を与えているだけです.
イベントもメソッドの一種です.
もちろん, TColumnと認識可能な引数であれば何でもいいわけですが,
オブジェクト型(Tが付いている型)の場合これが区別するには一番簡単でしょう.
と,こんな説明で理解していただけるかは不安ですが.
DBGrid何とかの質問文同様,nilのどの部分,どのようなことが分からないのか
私には理解できなかったので,これで勘弁してください.
>イベントもメソッドの一種です.
これが役に立つかどうかも不安ですが.参考までに
イベントは特殊なメソッドということですね.
http://mrxray.on.coocan.jp/Others/A_UltraIntro01.htm#07
こんなこと?
var
SaveColumn: TColumn;
procedure TForm3.Button1Click(Sender: TObject);
begin
if Assigned(SaveColumn) = True then
begin
end;
end;
procedure TForm3.DBGrid1CellClick(Column: TColumn);
begin
SaveColumn := Column;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
SaveColumn := nil;
end;
KHE00221さん,こんにちは.
>こんなこと?
な〜るほど.さすがですね.
参考になります.これは使えます.
>参考になります.これは使えます.
今,質問の文章とコードを見比べてみたら,間違いないでしょう.
これなら,処理を1つにまとめることができます.
まったくついていけないけど、
セルクリックのイベントでコードを書くけど、実はイベントで実行したくないんだよね〜
って話にしか読めないのは、読解力不足かしら?
> BGRIDのCELLをクリックしたときにも、同様の処理が実行されてしまうので、その処理の実行を回避
procedure TForm3.FormCreate(Sender: TObject);
begin
DBGrid1.OnCellClick := nil;
end;
セルクリック時とボタンクリック時を分けたいのであれば、
procedure MyCellClick(ButtonClock: Boolean; Column: TColumn);
begin
if ButtonClock then
//ボタンクリックでの処理
else
//DBGridのセルクリックでの処理
end;
のような関数を作ってしまえばいいだけのような気もする。
助かりました。ありがとうございます。
ツイート | ![]() |