Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
19 / 114 ツリー <前へ | 次へ>

〔897〕ACFinder 080923test版 kabe (08/09/23 19:28)

〔899〕Re:ACFinder 080923test版 Hidemi Oya (08/09/24 21:24)
〔900〕サンプル見っけ! Hidemi Oya (08/09/24 22:02)
〔918〕OOo: ファイルを作らずに Calc を開く Hidemi Oya (08/10/01 22:41)
〔919〕Re:OOo: ファイルを作らずに Calc を開く Hidemi Oya (08/10/02 0:49)
〔920〕Re:OOo: ファイルを作らずに Calc を開く Hidemi Oya (08/10/04 10:29)
〔921〕Re:OOo: ファイルを作らずに Calc を開く kabe (08/10/05 20:12)

〔899〕Re:ACFinder 080923test版
 Hidemi Oya WEB  (08/09/24 21:24)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

> ちょっと調べてみましたが、見あたりませんね。LoadComponentFromURL の URL に 'private:clipboard' とか、あるいはプロパティに InStream とかあれば良いんですが…。
 LoadComponentFromURL のプロパティに InputStream というのがあるので、この値として com::sun::star::io::XInputStream オブジェクトを指定してやれば、ストリームデータを渡せそうな感じです。が、XinputStream オブジェクトに値を設定する方法と、この場合の URL に何を指定すればよいのかが不明です(^_^;)。
 あとは、URL に file:///con を指定して、Desktop オブジェクトの標準入力にデータを渡すという方法もありそうなんですが、Desktop オブジェクトのプロセスハンドルの取得方法が不明のため、リダイレクトできません(^_^;)。
 ただ文字列データを渡すだけってのが、何でこんなに難しいのか…。

〔900〕サンプル見っけ!
 Hidemi Oya WEB  (08/09/24 22:02)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 OO Basic ですが、ストリームデータで LoadComponent するサンプルが下記にありました。暇なときに、Delphi で試してみます。
http://www.oooforum.org/forum/viewtopic.phtml?t=43637

〔918〕OOo: ファイルを作らずに Calc を開く
 Hidemi Oya WEB  (08/10/01 22:41)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 Pipe を使えば HTML ファイルを保存せずに Calc を開くことができそうですが、今のところ上手くいきません。Pump も併用しないとだめなようです。
 とりあえず OOo の一時ファイルを使って、HTML ファイルを保存せずに Calc を開けるようにはなりましたので、紹介しておきます。

var
OpenOffice, OpenDesktop, oStream, Params : Variant;
html: string;
begin
Screen.Cursor := crHourGlass;
try
OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
Params := VarArrayCreate([0, 2], varVariant);
Params[0] := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Params[0].Name := 'FilterName';
Params[0].Value := 'calc_HTML_WebQuery';
Params[1] := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Params[1].Name := 'DocumentTitle';
Params[1].Value := 'Title'; // ここにドキュメントのタイトルを記述
Params[2] := OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Params[2].Name := 'InputStream';
Params[2].Value := OpenOffice.createInstance('com.sun.star.io.TempFile');
// Params[2].Value := OpenOffice.createInstance('com.sun.star.io.Pipe');
oStream := OpenOffice.createInstance('com.sun.star.io.TextOutputStream');
oStream.setOutputStream(Params[2].Value);
oStream.setEncoding('Shift_JIS');
oStream.writeString(html); // ここに HTML が入った文字列を指定
oStream.closeOutput;
Params[2].Value.seek(0); // Pipe を使う場合はコメントアウトすること
OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
OpenDesktop.LoadComponentFromURL('private:stream', '_blank', 0, Params);
finally
Screen.Cursor := crDefault;
end;
end;

〔919〕Re:OOo: ファイルを作らずに Calc を開く
 Hidemi Oya WEB  (08/10/02 0:49)

引用なし
   補足です。

> とりあえず OOo の一時ファイルを使って、HTML ファイルを保存せずに Calc を開けるようにはなりましたので、紹介しておきます。
 一時ファイルは、OpenOffice が勝手に掃除してくれます。

〔920〕Re:OOo: ファイルを作らずに Calc を開く
 Hidemi Oya WEB  (08/10/04 10:29)

引用なし
   > Pipe を使えば HTML ファイルを保存せずに Calc を開くことができそうですが、今のところ上手くいきません。Pump も併用しないとだめなようです。
 Pump を併用してもダメでした。[#900] のサンプルは、Storage を使っているから大丈夫なのかな? しかし、このサンプル複雑すぎてよく分かりません(^_^;)。

 Pipe と TempFile は、ファイルを作るかどうかという内部動作に大きな違いはありますが、外部へのインターフェースとしては XSeekable があるかどうかの違いしかありません。で、Pipe の InputStream を TextInputStream にセットすると、Seek しなくてもちゃんと
 while not isEOS do StringList.Add(TextInputStream.readLine);
で Pipe の OutputStream に書き出した内容を読むことができます。ということは、TempFile と全く同じ方法で Pipe からもデータを読んでくれないとおかしいということになるんですが…。
 しかし、いろいろ試しても Pipe の InputStream を loadComponentFromUrl に渡しても内容が表示されることはありませんでした。

 ということで、[#900] のサンプルのようなややこしいことをするくらいなら、単純に TempFile を使うのが最も簡単ってことに落ち着きました。これでも、プログラム内でファイル名の管理をしたり、作成したファイルの後始末をする必要がないので、現在の方法よりはスッキリすると思います。

〔921〕Re:OOo: ファイルを作らずに Calc を開く
 kabe  (08/10/05 20:12)

引用なし
   >Hidemi Oyaさん

kabe です。

> とりあえず OOo の一時ファイルを使って、HTML ファイルを保存せずに Calc を開けるようにはなりましたので、紹介しておきます。

ありがとうございます。
これでうまくいきました。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
19 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.