掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DBGridを編集時にデータを移動させなくするには (ID:30453)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
真琴:「質問のヒト、アタシと同じ名前だね、やっぱ、女の子かなぁ」 春子:「そうよ、ひらがなで"まこと"だからネ、オトコなら漢字で"誠"や"允"とか書くンじゃない?」 海都:「いや、それだけじゃ、性別は断定できないと思うよ、それが本名とも限らないし…」 真琴:「あっ、そっか…そうよネ」 広海:「皆、そんなコト、どうでもイイと思うけど…、本題を忘れてンじゃないの」 真琴:「…だよネ^^ゞ、それで、別の方法って、マウスやキー操作の制御ってことかなぁ」 春子:「質問の"編集している間"というのは、"InplaceEditにフォーカスがある時"でしょ?」 海都:「そう、その時だけは、レコード移動するようなキーやマウス操作を無効にすればOK」 真琴:「でも、カイトさん、たしか…、DBEdit1.InplaceEditorとか書いても、エラーになっちゃうよね?」 海都:「うん、InplaceEditorプロパティは、Protectされてるからね、だから、こうする…」 type TDBGrid = class(DBGrids.TDBGrid) private OrgWndProc: TWndMethod; procedure NewWndProc(var Msg: TMessage); public constructor Create(AOwner: TComponent); override; end; type TForm1 = class(TForm) DBGrid1: TDBGrid; ..... procedure DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure DBGrid1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); private ..... implementation {$R *.DFM} function IpEditFocused: Boolean; begin result := Assigned(Form1.DBGrid1.InplaceEditor) and Form1.DBGrid1.InplaceEditor.Focused; end; {TDBGrid} constructor TDBGrid.Create(AOwner: TComponent); begin inherited Create(AOwner); OrgWndProc := WindowProc; WindowProc := NewWndProc; OnKeyDown := Form1.DBGrid1KeyDown; OnMouseWheel := Form1.DBGrid1MouseWheel; end; procedure TDBGrid.NewWndProc(var Msg: TMessage); begin case Msg.Msg of WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN: if IpEditFocused then exit; end; OrgWndProc(Msg); end; {TForm1} procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT: if IpEditFocused then Key := 0; end; end; procedure TForm1.DBGrid1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin if IpEditFocused then Handled := True; end; ........... 真琴:「あれっ? "DBGrid1.InplaceEditor"がナンでコンパイルエラーにならないの?」 春子:「最初に"TDBGrid = class(DBGrids.TDBGrid)"ってクラス宣言してあるからよネ?カイトさん」 海都:「そういうコト…、他にもイロイロやり方はあるけど、コレがラクな方法だと思う」 真琴:「そぅゆうコトなの…、うン、これで Enterで入力確定したらレコード移動で自動POSTも出来るし、大丈夫みたい」 広海:「あの…、マコトも、皆も、一つ忘れてるンじゃないのかな?」 真琴:「えッ?ナニを?」 広海:「コレ、コレ…、マウスの右ボタンのダブルクリック」 海都:「あっ、そうか…、WM_RBUTTONDBLCLKと、あとWM_MBUTTONDBLCLKのメッセージも無効にしとかなくちゃ」 春子:「ヒロミくんも、タマにはサエルよね」 広海:「タマには?…あぁ…その言葉、オレ傷ついたァ」 春子:「ン?またぁ…、そんなキャラじゃないでしょ?ヒロミくん」 広海:「あぁ、ダメだぁ、しばらく立ち直れない…だ・か・ら…、今夜の食事当番、代わりにヨロシク」
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.