他クラスのプロシージャを呼び出すには

解決


ががが  2005-06-06 16:36:15  No: 15410  IP: 192.*.*.*

delphiでスレッド内からTForm内のプロシージャ
を呼び出したいんですが
プロシージャをTForm1内でPublic指定するだけじゃ
呼び出せないのでしょうか?
どなたか回答お願いします。
type
  TForm1 = class(TForm)
  private
  public
    procedure FileCheck;
  end;

  TClientThread = class(TThread)
   private
   public
     procedure Execute; override;
   end;

Procedure TForm1.FileCheck;
begin
  ShowMessage('Test');
end;
end.

Procedure TClientThread.Execute;
begin
  FileCheck;
end;
end.

編集 削除
メラトニン  2005-06-06 20:39:47  No: 15411  IP: 192.*.*.*

Form1.FileCheck;
でいけるはずです。
ただし、スレッドセーフかどうかは分かりません。

編集 削除
ががが  2005-06-07 09:52:47  No: 15412  IP: 192.*.*.*

メラトニンさん
回答ありがとうございます。

スレッドセーフかどうかは調べてみます。
ありがとうございました。

編集 削除
ん?  2005-06-07 11:38:48  No: 15413  IP: 192.*.*.*

D5のHelpより一部抜粋
> VCL コンポーネントあるいはフォームにアクセスするメソッドの呼び出しはメイン VCL スレッド内からのみ行うか,
> Synchronize メソッドは,Method で指定されたメソッドをメイン VCL スレッドの元で実行することにより,スレッド間の衝突を回避します。

「VCLコンポーネントあるいは、フォームにアクセスする場合、Synchronize メソッドを使ってスレッド間の衝突を回避しましょう」と読み取れます。

なお、当方で、Threadから直接、Form.Memo1.Lines.Add(〜〜)のように記述した場合、ときどき謎のエラーが発生しました(内容までは記憶になし)。

編集 削除
ががが  2005-06-07 11:53:23  No: 15414  IP: 192.*.*.*

ん?さん
レスありがとうございます。
Synchronizeメソッドですか。
知りませんでした。
ヘルプで調べてみます。
ありがとうございます。

編集 削除