TWinControlクラスのprotected SetImeメソッドは、ClassメソッドではないのにClassメッソド見たいな動作をするんでしょうか?
ご存知の方いらっしゃいましたら情報お願い致します。
すいません、質問の意図が見えにくくて.
以下に訂正
TWinControlクラスのprotected SetImeメソッドは、ClassメソッドではないのになぜClassメッソド見たいな動作をするんでしょうか?
ご存知の方いらっしゃいましたら情報お願い致します。
「Classメッソド見たいな動作」とは具体的にどんな動作なの?
【classメソッド見たいな動作】= インスタンスを生成しなくても使える。
実際は、知らない間に何らかのobjectがTWinControlのインスタンスを生成していると思っているのですが・・・・
procedure TForm1.FormCreate(Sender: TObject);
begin
TWinControl.SetIme;
end;
としても、コンパイルエラーが発生して実行できません。
# Delphi7
どういうコードでクラスメソッドみたいな動きと判断したのでしょうか。
追記。
procedure TForm1.FormCreate(Sender: TObject);
begin
TForm1.SetIme;
end;
としても、
[エラー] uMain.pas(33): このメソッドの呼び方はクラスメソッドの場合に限られます
と出るため、SetImeはクラスメソッドとしては動いていないようです。
ご返信有難うございます。
下記ソースです。
procedure TfrmShiftMasterEdit.sgdTimeOfStaticsSelectCell(Sender: TObject;
ACol, ARow: Integer; var CanSelect: Boolean);
begin
if ACol = 1 then
begin
***************************************************************
ImeMode := imDisable; ←の部分です。
SetIme;
***************************************************************
end else
begin
with sgdTimeOfStatics do
begin
if (Cells[0,Row] <> '') and (Cells[1,Row] = '')then
begin
if (ARow <> Row) then
begin
MessageDlg('値を入力してください。',mtWarning,[mbOK],0);
CanSelect := false;
end;
end;
end;
end;
end;
このコードをみても、クラスメソッドのような動きは推測できませんね。
TfrmShiftMasterEditクラスはTFormクラスを継承しているかと思いますが、さらに継承元を追っていくとTWinControlにたどり着きます。
つまり、TfrmShiftMasterEditクラスは、TWinControlクラスの下位クラスです。
プロテクトメソッドは、ヘルプをみると
「そのクラスおよび下位クラスが定義されているユニットのコードからアクセスできる」
とかかれています。
TfrmShiftMasterEditクラスはTWinControlクラスの下位クラスなので、SetImeメソッドを呼び出すことができます。
このとき、すでにTfrmShiftMasterEditオブジェクトが生成されており、そのオブジェクトの持つsgdTimeOfStaticsSelectCellプロシージャが呼ばれているはずです。
にしのさん丁寧親切な情報ありがとうございした。
お元気で♪
蛇足だとは思いますが
frmShiftMasterEdit = TfrmShiftMasterEdit
だとすると、
山下さんのかかれておられるSetImeの部分は
frmShiftMasterEdit.SetImeになってますので
ふつうだと思いますよ。
クラスメソッドなら
TfrmShiftMasterEdit.SetImeと呼べますが
クラスメソッドじゃないので、呼べないかと。
Tの有無に要注意ですね。
ツイート | ![]() |