TWinContorl ClassとSetImeメソッドの関係???


山下  2007-01-12 01:42:39  No: 24458  IP: 192.*.*.*

TWinControlクラスのprotected SetImeメソッドは、ClassメソッドではないのにClassメッソド見たいな動作をするんでしょうか?
ご存知の方いらっしゃいましたら情報お願い致します。

編集 削除
山下  2007-01-12 12:27:24  No: 24459  IP: 192.*.*.*

すいません、質問の意図が見えにくくて.
以下に訂正
TWinControlクラスのprotected SetImeメソッドは、ClassメソッドではないのになぜClassメッソド見たいな動作をするんでしょうか?
ご存知の方いらっしゃいましたら情報お願い致します。

編集 削除
みえない  2007-01-12 13:35:41  No: 24460  IP: 192.*.*.*

「Classメッソド見たいな動作」とは具体的にどんな動作なの?

編集 削除
山下  2007-01-12 15:19:47  No: 24461  IP: 192.*.*.*

【classメソッド見たいな動作】= インスタンスを生成しなくても使える。

実際は、知らない間に何らかのobjectがTWinControlのインスタンスを生成していると思っているのですが・・・・

編集 削除
にしの  2007-01-12 16:40:46  No: 24462  IP: 192.*.*.*

procedure TForm1.FormCreate(Sender: TObject);
begin
  TWinControl.SetIme;
end;
としても、コンパイルエラーが発生して実行できません。
# Delphi7

どういうコードでクラスメソッドみたいな動きと判断したのでしょうか。

編集 削除
にしの  2007-01-12 16:42:40  No: 24463  IP: 192.*.*.*

追記。
procedure TForm1.FormCreate(Sender: TObject);
begin
  TForm1.SetIme;
end;
としても、
[エラー] uMain.pas(33): このメソッドの呼び方はクラスメソッドの場合に限られます
と出るため、SetImeはクラスメソッドとしては動いていないようです。

編集 削除
山下  2007-01-12 17:16:31  No: 24464  IP: 192.*.*.*

ご返信有難うございます。
下記ソースです。

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;

編集 削除
にしの  2007-01-12 17:30:59  No: 24465  IP: 192.*.*.*

このコードをみても、クラスメソッドのような動きは推測できませんね。

TfrmShiftMasterEditクラスはTFormクラスを継承しているかと思いますが、さらに継承元を追っていくとTWinControlにたどり着きます。
つまり、TfrmShiftMasterEditクラスは、TWinControlクラスの下位クラスです。

プロテクトメソッドは、ヘルプをみると
「そのクラスおよび下位クラスが定義されているユニットのコードからアクセスできる」
とかかれています。
TfrmShiftMasterEditクラスはTWinControlクラスの下位クラスなので、SetImeメソッドを呼び出すことができます。
このとき、すでにTfrmShiftMasterEditオブジェクトが生成されており、そのオブジェクトの持つsgdTimeOfStaticsSelectCellプロシージャが呼ばれているはずです。

編集 削除
山下  2007-01-12 17:45:43  No: 24466  IP: 192.*.*.*

にしのさん丁寧親切な情報ありがとうございした。
お元気で♪

編集 削除
Fusa  2007-01-15 14:36:05  No: 24467  IP: 192.*.*.*

蛇足だとは思いますが

frmShiftMasterEdit = TfrmShiftMasterEdit
だとすると、
山下さんのかかれておられるSetImeの部分は
frmShiftMasterEdit.SetImeになってますので
ふつうだと思いますよ。

クラスメソッドなら
TfrmShiftMasterEdit.SetImeと呼べますが
クラスメソッドじゃないので、呼べないかと。

Tの有無に要注意ですね。

編集 削除