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


山下  2007-01-12 10:42:39  No: 24458

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


山下  2007-01-12 21:27:24  No: 24459

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


みえない  2007-01-12 22:35:41  No: 24460

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


山下  2007-01-13 00:19:47  No: 24461

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

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


にしの  2007-01-13 01:40:46  No: 24462

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

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


にしの  2007-01-13 01:42:40  No: 24463

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


山下  2007-01-13 02:16:31  No: 24464

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

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-13 02:30:59  No: 24465

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

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

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


山下  2007-01-13 02:45:43  No: 24466

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


Fusa  2007-01-15 23:36:05  No: 24467

蛇足だとは思いますが

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

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

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


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

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






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