お世話になります。
現在、関数を外部ファイル化し,外部でtmemoを更新しようと思い下記のようにしてみたのですが
コントロールによっては可能な物もありましたがtmemoでは更新されません。
外部経由でmainフォームのtmemoに内容を代入するには
どのような方法になりますでしょうか?
------------------------------------------------
implementation
uses outer_pas;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowM();
end;
------------------------------------------------
outer_pas.pas
------------------------------------------------
unit outer_pas;
interface
uses Dialogs,StdCtrls,Forms;
procedure ShowM();
implementation
procedure ShowM();
var
tm:tmemo;
frm1:tform;
begin
tm:= TMemo(frm1.FindComponent('memo1'));
showmessage(tm.text);
tm.text:='xxxxxxxxx';
end;
end.
ShowMのローカル変数frm1は初期化されないまま使われてますが、これが原因でエラーが発生してたりしませんか?
普通はShowMのパラメータとして対象のフォームを渡すと思います。
ShowMを
procedure ShowM(Form: TForm);
var
Memo: TMemo;
begin
Memo := Form.FindComponent('memo1') as TMemo;
Memo.Text := '...';
end;
としておいて、TForm1側では
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowM(Self);
end;
ってな感じで。あるいはMemo1そのものを渡すようにすればFindComponentもいりませんね。
procedure ShowM(Memo: TMemo);
begin
Memo.Text := '...';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowM(Memo1);
end;
あと『外部ファイル化』は『ユニット分割』『ユニットを分ける』という表現のほうが一般的ですね、
HFUKUSHI様、ありがとうございます。
無事目的の動作になりました。
>frm1は初期化されないまま使われてますが、これが原因でエラーが発生してたりしませんか?
初期化の際にselfを付けエラーになったり、advstringgridだと初期化なしでも代入できたりで
ベースが理解できていなかったので試行錯誤しまくりでした。
selfで投げる件、他にも活用できそうで助かりました。
いつもはTMemo(from1.FindComponent('memo1'));のような使い方しかしらなかったので
frm1にするとどこで認識するのかと思い。 謎だらけでした。
>あと『外部ファイル化』は『ユニット分割』『ユニットを分ける』という表現のほうが一般的ですね、
了解です。
フォームのある物をユニットと呼ぶと思っていました(^_^;)
今回はどうもありがとうございました。
ツイート | ![]() |