0

名前と数値を含むフォームにListViewがあり、MSWord文書に文書の表に埋め込まれたデータを印刷する必要があります。すべて英語の文字でうまく動作しますが、東ヨーロッパやロシアの文字を送信しようとすると、ドキュメントに「?」と表示されます。いくつかの「ごみ」があります。また、私はそれらの文字をアプリケーションからアプリケーションに戻すことができません。Delphi 7を使用してMSWord 2003からローカル文字を読み書きする方法は?

私の質問は以下のとおりです。

  1. Word文書に"ЉЊĐŠŽČ"のような文字を送信するためにどのように?
  2. これらの文字をMSWordからアプリケーションに戻すにはどうすればいいですか?要するに

、コードは次のようになります。

word := CreateOleObject('Word.Application'); 
word.Visible := true; 
doc := word.documents.Open(ExtractFilePath(Application.ExeName) + '\tpl.doc'); 

table := word.ActiveDocument.Tables.Item(1); 
table.Cell(1,2).Range.Text := 'MY TEXT'; 

word.ActiveDocument.Close; 
word.Quit; 
word := UnAssigned; 
doc := UnAssigned; 
table := UnAssigned; 

私は、フォントのnamesizecolorプロパティを変更することができますが、charsetプロパティでそれを行うことはできません。

誰か?


ソフトウェアインストール:この問題は、あなたがしているという事実から来ている

  • のWindows XP Professionalの
  • のMicrosoft Word 2003の
  • デルファイ7のEnterprise Edition

答えて

4

レターバインドを使用してOLEオートメーション経由でWordを呼び出すだから、Range.Text

は7

最初のソリューションは、Delphi 2009以降を使用することができデルファイの下で、WideStringに(ユニコード)コンテンツを期待する方法が、プレーンなASCIIテキストとして知られていません。新しいタイプはそのようなUnicode割り当てを透過的にしました。デルファイ7、下の

何WideStringのに型キャスト強制について:このように、

table.Cell(1,2).Range.Text := WideString('MY TEXT'); 

をまたは一時的な変数を使用して:

var tmp: WideString; 

    tmp := 'ЉЊĐŠŽČ' 
    table.Cell(1,2).Range.Text := tmp; 

別の可能性は、遅延バインディングではない使用することができしかし、IDEの "Project"メニューから "Microsoft Wordオブジェクトライブラリ"をインポートして、OfficeのOLEインターフェイスを直接宣言します。

あなたは例えば、インポートされたインタフェース内の型をは、widestringています:

Range = interface(IDispatch) 
    ['{0002095E-0000-0000-C000-000000000046}'] 
    function Get_Text: WideString; safecall; 
    procedure Set_Text(const prop: WideString); safecall; 
    (...) 
    property Text: WideString read Get_Text write Set_Text; 

だから、あなたは、ANSIとのすべての問題は、任意のより多くの文字セットはありません。

+0

まあ、興味深いですが、WideStringについて考えたことはありませんが... line 'tmp:= 'ЉЊĐŠČ';' .pasファイルに保存できません( "ЉЊĐ"は "?"、 "ŠŽ"はOK、 "Č "は" C( ")になります。私は貯蓄を試みました。あなたの努力に感謝します – Wh1T3h4Ck5

+0

このような定数について、Delphi 7 IDEは現在のシステムコードページAFAIKのみを使用しています。あなたのシステムの現在のコードページはそれらの文字を扱うことができます。そのような定数の場合は、#$ 005f#$ 20A1構文などでUnicode文字を手元に変換する必要があります。プログラムの起動時にロードしてください。 –

+0

まったく!ありがとう、たくさんの男! – Wh1T3h4Ck5

関連する問題