0

入力に応じてRichEditコンポーネントを埋めるプロシージャを作成しました。

procedure LoadCPData(ResName: String);
begin
  ResName := AnsiLowercase(ResName) + '_data';
  rs := TResourceStream.Create(hInstance, ResName, RT_RCDATA);
  try
    rs.Position := 0;
    info.reMeta.Lines.LoadFromStream(rs);
  finally
    rs.Free;
  end;
end;

注:上記の手順は、.pasFunctionsという外部ファイルに保存されています。

フォームでプロシージャを呼び出すと、RichEditは空のままになります。ただし、そのコードブロックをフォーム自体に配置すると、RichEditコンポーネントは期待どおりに問題なくデータを入力します。caseこれで、上記のコードブロックをフォーム自体に配置できましたが、ステートメントでプロシージャを複数回使用する予定です。

手順を機能させるには、何を含める必要がありますか?

よろしくお願いします!

4

1 に答える 1

1

埋め込み OLE オブジェクトをサポートできるように、TJvRichEdit代わりにコントロールを使用します。TRichEditこれは と非常によく似た動作をするはずTRichEditです。

procedure SetRTFData(RTFControl: TRichEdit; FileName: string);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile(FileName);
    ms.Position := 0;
    RTFControl.StreamFormat := sfRichText;
    RTFControl.Lines.LoadFromStream(ms);
    ms.Clear;

    RTFControl.Invalidate;

    // Invalidate only works if the control is visible.  If it is not visible, then the
    // content won't render -- so you have to send the paint message to the control
    // yourself.  This is only needed if you want to 'save' the content after loading
    // it, which won't work unless it has been successfully rendered at least once.
    RTFControl.Perform(WM_PAINT, 0, 0);
  finally
    FreeAndNil(ms);
  end;
end;

これは別のルーチンから採用したため、使用する方法とまったく同じではありません。データベースからコンテンツをストリーミングするため、ファイルから読み取ることはありません。ただし、文字列をメモリ ストリームに書き込んで RTF コントロールに読み込むので、これは本質的に同じことを行います。

于 2012-10-05T02:45:02.620 に答える