忍者ブログ

ひっそり開発室

Webメインでフリーのシステム開発をやっています。 思いつくままに書いていますので 間違い等はおもむろに突っ込んでもらえれば助かります。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

はじめての InnoSetup

VBの依頼が来たんですが、
ひょんなことからインストーラーもお願いしますとか、
普通にインストーラー作るの面倒だし、
InnoSetupを使ってさらっと作ろうという方向で考えていたのだけれど・・・

案の定、お客さんの要望がどんどん膨らんでいって、
デフォルトのテンプレートだけじゃとても対応できないという。
1.シリアルの入力画面
2.ライセンスコードの入力画面
3.シリアル+ライセンスの組み合わせのチェック
4.入力されたシリアル+ライセンスの保存
5.他、画面の文言の調整

InnoSetupについては完全に初心者なもので
Inno Setup 日本語デベロッパーズ
Inno Setup Help
等のページを見ながらで
最初はほんとよくわからん状態。
日本語デベロッパーズだけじゃ
まったく情報が足らなくて理解できなかったのだけれど、
ひとまず InnoSetup Help の Setup Script Sections が大事でした。
それぞれのセクションを簡単に説明すると
----
[Setup] 基本設定
[Tasks] セットアップ時にショートカット等を作成する設定
[Files] インストールするファイルの設定
[Languages] セットアップ表示言語の設定
[Messages] セットアップ画面のメッセージ文字列の設定
[Registry] セットアップでレジストリに入力する設定
[Run] セットアップ後プログラムを実行する設定
[Code] セットアップ時に動作するプログラム設定
----
4は[Registry]で保存する形にしてしまえば解決かしら。
5も[Messages]で対応ができそう。
1-3は設定だけでは厳しそうなので
[Code]セクションで対応するしかないようです。

当初、シリアルとライセンスコードは
ランダムの英数字だけという認識でいたのですが、
シリアルはハイフンで2つに分けたものにして、
ライセンスはハイフンで4つにわけて入力させたいとか。
それだけならともかく、1のボックスで
ハイフンも一緒に入力する形でいいのかと聞いてみたらNGで
ハイフンをボックスの中に設置するか
ハイフンで区切るところでボックスを分けてほしいみたいな。
InnoSetupでできることもろくに把握してないのに無茶振りだわー

[Code]セクションはPascalでコーディングできます。
むかーしむかーしあるところでDelphiなんてさわっていたのが、
今頃役に立つとかなかなかの驚き。

しかしながら、日本語のサイトでInnoSetupをどんだけ探そうが
サンプルコードなんて出てこない始末。
仕方ないからHelpと英語サイトのサンプルを見ながら組み立て
サンプルを見てすぐわかったのは
----
TInputQueryWizardPage テキストボックス
TInputOptionWizardPage ラジオボタン
TInputDirWizardPage ディレクトリ選択ボックス
TInputFileWizardPage ファイル選択ボックス

上記のクラスでインストーラー画面のページに
それぞれ入力欄を表示することができるようになっている模様
ただし、テキストボックス・ラジオボタン等を
組み合わせて表示することは無理なので、
さらにカスタムしたいなら TWizardPage クラスを利用して、
自分でインストーラページを作成する必要があるようだ。

とりあえず、ある程度できそうなところまでは理解して、
ほっとしたところで・・・・え・・・・?
サンプルソースが見たいって?
今度気が向いたら載せます。
PR

MBFPDF 1.0b 文字列の幅が合わない

印刷用のPDFのために位置を制御しながら出力するプログラム。
PDF出力モジュールの部分で
お客さんから文字によっては重なったりしちゃうのがとても困ると・・・。
まぁそりゃー困るよねぇ。

ライブラリの関数を利用していて、
そっちに文字幅はお任せにしてたんだけど、
どうしてもうまくいかないので、
仕方なくライブラリを直接修正。

mbfpdf.php (元のソース)

[1バイト]ずつ判定してるので
マルチバイト文字が入った際に問題が起きることがある模様。
なので、マルチバイトが入る前提で処理を行って、
[1文字]ずつ判定していくように修正。

mbfpdf.php (修正後のソース)

こんな感じでどうだろうか。

VisualStudio2015(VB.Net) + SQLite

VB.Netでデータを入力した後、印刷するアプリを作成というお話が入って、
入力されたデータを蓄積して解析したいとか。

CSVでいいのかなーと聞いてみたら、
できればなんかのDBがいいなーとか
1台だけなら無償で使えるMSSQLをちょろっと入れて連動するんだけど
複数台で使うらしく、
それもセットアップはインストーラで設定しておしまいくらいのレベルがいいとか
DBインストールしなくていいものを考えてたら、
SQLiteかAccessが使えそうな感じ
今回はとりあえずSQLite

ツール→NuGet パッケージ マネージャー→ソリューションのNuGetパッケージの管理
で、右上の検索ボックスで [SQLite] を検索して
System.Data.SQLite を選択してインストール

とりあえずこんな感じ
2016/07/27追記
ちゃんとUsing使いましょ。

Excel-VBA

久々に思い出したように書いてみる。

完全に社外のExcel-VBAを解析・調整する仕事が飛んできて、
見てみたら恐ろしいくらいひどいソースコードだった・・・orz

・変数が日本語
・関数やプロシージャまで日本語
・段組に統一性が全く無し(if もループもどこまでだかわかりにくい)
・メインコードが700行(すぱげってぃ!)
・ほぼPublic変数で処理(Local変数と同じ名前のもあったり)

なんで、こんなものが回ってきたのかというと、
「できる」プログラマさんがいなくなってしまって
書き換えなきゃいけないとかで・・・
よくあるお話だけど、できるレベルの感覚がだいぶおかしい気しかしない。

解析を進めていると、
複数のワークブック・ワークシートを見に行っていて、
頻繁にいろんなBook/SheetをActivateをして
RangeやらCellやらWorkSheetを省略して書いているので
データ自体はどこを参照しているのかぱっと見で理解しにくいという。

たくさんWorkSheetを扱っていても
こんな感じでちゃんとWorkSheetを変数で扱って
明示してかけばわかりやすいですよっと。


テキストファイル処理

複数のCSVテキストを取り込んで、
ひとつのCSVを作成したい。

プログラムの作業自体は簡単な話なんだけど、
データサイズが50万件300MのCSVで、
そのIDでつながってるサブデータを1つのテキストファイルとして出したいとか
一昔前にExcel-VBAとかで手軽につくったら
えらい処理時間がかかるようなサイズだなと。

内容はファイルの入出力と
中身のテキストのコンバートなんで
簡単だけどExcel-VBAで作ったらやっぱ時間かかるんだろうな
ってわけで検証してみました。

プログラムの中身は
テキストファイルを読み出して
そのまま1行ずつ出力していくだけのコピープログラム
CとExcel-VBAで比較

テキストファイルは17万行 19Mbyte
CPU Intel-i7 2600 / 3.4GHz
メモリ 8.00G

Excel-VBA 1.176sec
C 0.235secs

実際に処理とかいろいろ入れたら
どれくらいかかるのかしら。

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

プロフィール

waggy
PHP / JavaScript を中心にプログラム開発を行っています。
お客様のご要望次第で Access Delphi等も触ることがあります。

最新コメント