OLE制御(OpenOffice Calc vs. Ms Excel)

Microsoft Office(Excel)のライセンスが、ややこしいので、
OpenOffice(Calc)を検討。
※ライセンス問題については、後述

***

安牌を取るなら、既に出来上がっているExcelで良かったんだけど、
テストは?、ということ、これからの部分。

なので、Calcが登場するチャンスはまだあったわけで、

Excelで出来たことを、Calcで
どのように処理するか、を、まとめました。

OLE


Excelは、Delphiにコンポーネントがあるのと、
デモプログラムなんかで、割りとカンタンにOLE制御可。

Calcの唯一の資料は、
http://edn.embarcadero.com/jp/article/40857/images/40857/b5.pdf

Excel OLEでも同じだが、CalcをOLE制御するにあたり、
それ以降は、他の言語の解説を流用して、記述するしかない。
(言語毎の書き方が違うだけで、基本同じ)

非表示(パラメーターを指定して、ファイル読み込む)

保存せずに終了(変更していない、ことにする)

とか。

ExcelをCalcに移植


Calcは、

セルの指定が違う(左Excel/右Calc)
_設定!B1 >> _設定.B1

など、
一部変更が必要だったり、対応していない機能があるものの、

xlsのほとんど読み込める。

マクロは、ほとんど書き直す必要があるみたいだけど、
今回、マクロは多用していないが、

困ったことは、
Excelだとテキストボックスに「=B1」などと、
他のセルの値を指定できるのに対し、

Calsは出来ない・・・

テキストボックスをOLEで制御するしかないか?と、
いろいろ探したけど、見つからず。
途中で、テキストボックスの値を別のテキストボックスに書き出すサンプルを発見。

http://oooug.jp/faq/index.php?faq%2F5%2F20

ここに、デモがあったので、
DLして必要箇所を移植してみたけど、どうも動かず、

わかったことは、

フォーム・テキストボックスと
テキストボックスと、2種類ある!

デモでは、前者を使い、
Excelからの移植では、後者を使っていた。

 

プロパティーでセルの値を指定できたので、まず、1つ解決。

次に、印刷に反映できるか?、
だったけど、これも問題なく、基本的な移植が完了した!

そして残すは、

耐久テストだけ!

***

MsOfficeと、OpenOfficeのライセンス


ライセンス単位で、2つのPCにインストール出来るので、
3万円だとしても、1台あたり、半値で2台使える!

わけではなく、

ライセンス上、二人が使うことは出来ない。

※あくまで、サブ機にも入れていいよ、程度で、

2台に入れるのに、6万円は高いだろうという、配慮

 

多くの人が、無視して、二人で使っているだろうけど、
流石に、お客さんに推し進めることは出来ないため、

お客さんが、正当にお金を払ってくれればいいのですが、

どうせ、印刷するだけなので、
無駄でもあり、負担にもなります。

ということで、今回、ビジネスでも利用可能な

無料のOpenOfficeに移植した次第です。

参考 > OpenOfficeのライセンスについて

http://forest.watch.impress.co.jp/docs/serial/moritalk/536026.html

今回使ったのは、Apache OpenOfficeなので、Apache Licenseになり、
LibreOfficeは、GNU Lesser General Public Licenseとなり、

※共に、同じOpenOfficeの派生系

開発レベルでいうと、
いろいろと問題があるけど、

個人・団体利用、商用・非商用に関係なく
無償利用が許可されている。

が、寄付をさせて頂く予定。

http://www.openoffice.org/ja/

-

WEBカメラの動画を反転させる@Delphi

通常、WEBカメラの画像は、鏡と同じではなく、
右に手を振れば、画面上は、反対に手が動く、左右逆の表示になっているが、
なんとか、これを、鏡と同じ用に表示させるための試行錯誤。

途中断念して、

ミラー表示機能があるカメラを買おうかと思うぐらい・・・

***

まず、思いついたのが、
Directshowを使っているので、そのFilter Pluginを使う方法。

これを、GraphEditなるツールで、加工するっぽい

DL&取説 >> http://homepage2.nifty.com/sophia0/freesoft/GraphEdit/

 

でも、肝心のフィルターが、インストール出来ない・・・

上記に書いてあるとおり、

> regsvr32 proppage.dll

と、dllを登録したが、
うまくいかず、インストールの仕方を探した始末w

http://www.independence-sys.com/weblog/item/159

「モジュールが見つかりません」と出て、先に勧めなかったが、
うちのPCが64bitなのもあって、Windows > System32だけではなく、
Windows > SysWOW64にも、コピーが必要らしく、
これで、DLL(フィルター)の登録が出来た。(.axという拡張子であることが、多い)

***

しかし、そのフィルターがどこを探しても見つからない・・・

再起動も、何回もし、1つ1つ見ていったけど、
素通りしてしまったのか??

もう諦めかけていたところ、directshow 以下に発見した「VideoRotate.ax」

 

でも、

Delphi 上でも、GraphEditでも、
使い方がまったくわからない・・・

 

***

諦めて、別の方法を探すことにしたら、偶然見つけた、サンプル
ありがたいことに、ソース付きのデモがあり、

中身を見てみると、至ってシンプル!!

 

というか、一番やりたくなかった、

DirectShowのフィルターを使わない手法ww

だが、
この際、疲れたので、そんなことは言っていられず、
コードを拝借することにした。

概略 >
Direct9を使いVideoソースをキャプチャーし、PaintBox.Canvasに描画している

Demo03_MainForm / TForm1.OnNewVideoFrame イベントより

たった、これだけ・・・

嫌になる・・・

 

今回、タイマーで、カメラの画像をキャプチャーし、
その中のバーコードを読み取るコードがあり、
そこに、埋め込むことにしたため、

0.1秒毎の描画なので、ちょっとカクカクだけど、仕方ない。

DSPackにあるTVideoWindowから、
以下のリンク1. のTStillCameraでbmpにキャプチャーし、
カメラの画像を引き伸ばしてから、反転させ、
TPaintBoxに描画。

 

ブサイクだけど、誰も見ない処理なので、これで我慢することに。
ホントは、もっとかっこよく決めたかったんだけど、
それも、誰も見れないので・・・(笑

 

その他、DirectShow関連リンク

  1. http://ht-deko.com/ft1112.html
  2. http://ht-deko.com/tech062.html
  3. http://www.geocities.jp/wanko_70k/DSPack_1.html
    (2で紹介されたページ)
  4. http://www.vwlowen.co.uk/directshow/page01.htm
  5. http://delphivn.blogspot.jp/2008/01/programming-directshow-in-delphi.html
    (3で紹介されたページ)

 

-