HamingBird System construction
Multi-document interface について
MicrosoftのWordではMulti-document interfaceで新しい文章や参照したい文章を同一の環境下で管理する方法としてMulti-document interface
(MDI)を提唱しています。
このアプリでは本来の用途と異なる使い方をしています。
MDIのメイン部分をAppleのIOS等で使っているデリゲートとして
各機能のFormはMDIのMain Formで管理し2重起動の抑制
Form間でのDataのやりとりでインスタンス化されていないFromへ渡さないようにMain Formへ問い合わせする形で実装しています。
インスタンス化されたオブジェクトのハンドルはMain Formに
登録されます。
各FormのClose ButtonはMainFormのForm Destroyを起動します
たまにFormを閉じようとしてNILLポインターを参照して
Errorを発生させることがあるのですが今の所打つ手がありません。
例えば、Log Viewerのみある場面でLog Viewerを閉じようとしてありもしないDetail Viewerを閉じようとしてErrorとなる場合があります。
その場合はDetail Viewerを起動すると正常に閉じることが出来ます。
Delphiの問題かも知れません。
SQLite Data Base Ver3.x
HamingBirdではDataBase EngineにSQLiteを採用しています。
コンパクトで高速なのが特徴ですが弱点もあります。
1・Open中は他のアプリで使用できない
2・誤って2重に開こうとしてFileがロックされることがある
(ファイルをコピーするとLockは解除される)
3・数値と文字列の扱いが曖昧
文字列として”0123”を入力しても参照すると”123”になってしまう
対策として#を先頭に付けて文字列として扱っています。
(0123 → #0123のように)
SQLite DataBase Format
HamingBirdのDataBase Record Format をSQLから切り出し・・・
FDQuery1.SQL.Text := 'CREATE TABLE QSOLog'
+ ' ('
+ ' ID INTEGER PRIMARY KEY,'
+ ' "DATETIME" DOUBLE,' // 2023/04/15 15:10:30 → 20230415151030
+ ' "CALL" WIDESTRING,'
+ ' "NAME" WIDESTRING,'
+ ' "FRQ" WIDESTRING,'
+ ' "FRQD" DOUBLE,' // 433,140MHz → 433140000
+ ' "MODE" WIDESTRING,'
+ ' "RX_RS" WIDESTRING,'
+ ' "TX_RS" WIDESTRING,'
+ ' "QSO_DAY" WIDESTRING,'
+ ' "QSO_TIME" WIDESTRING,'
+ ' "MY_QTH" WIDESTRING,'
+ ' "YOU_QTH" WIDESTRING,'
+ ' "MY_GL" WIDESTRING,'
+ ' "YOU_GL" WIDESTRING,'
+ ' "MY_JCC" WIDESTRING,'
+ ' "YOU_JCC" WIDESTRING,'
+ ' "TRANSCEIVER" WIDESTRING,'
+ ' "ANTENNA" WIDESTRING,'
+ ' "POWER" WIDESTRING,'
+ ' "MESSAGE1" WIDESTRING,'
+ ' "MESSAGE2" WIDESTRING,'
+ ' "MESSAGE3" WIDESTRING,'
+ ' "FLG0" WIDESTRING,' // JARL Status Flag (W,S,X・・・)
+ ' "FLG1" WIDESTRING,' // eQSL Status Flag
+ ' "FLG2" WIDESTRING,' // hQSL Status Flag
+ ' "FLG3" WIDESTRING,' // mQSL Status Flag
+ ' "FLG4" WIDESTRING,'
+ ' "FLG5" WIDESTRING,'
+ ' "FLG6" WIDESTRING,'
+ ' "FLG7" WIDESTRING,'
+ ' "FLG8" WIDESTRING,'
+ ' "FLG9" WIDESTRING,' // Heading Color (0:Normal、1:Blue、2:SkyBlue、3:Green、・・・)
+ ' "NOTE" TEXT'
+ ')';
NOTE
DelphiのSourceです。主だったItemはWIDESTRINGにしています。
一部、DATETIME、DFRQはDOUBLEの構造ですが
これは並び順をソートする際に簡単にする目的です。
データ入力時に内部で変換しています。
SQLiteのDataの拡張子は”.db3”で任意のフォルダーに置くことが出来ます。
iPhoneやTabletで共有出来るようにiCloudに置いてもアクセス出来ました
計画中ですがiPhoneやAndroidでLogを確認するアプリを考えています。
セキュリティーは甘いです。
Paswordとか掛かっていません。
要するに、見られて困る様な内容は載せないって考え方です。
補助系ファイル(アプリで使用するファイル)
起動フォルダーの直下にあるファイルで場所の変更は出来ません。
基本的にテキストファイルなのでText Editorで編集することが出来ます。
自分の環境や用途に合わせて内容を修正してください。
ファイル内容の不備はアプリがクラッシュします 注意してください
メモ帳でも編集可能です。
Log Detail Viewer Edit について
自身で使ってるアンテナや無線機、場所は同じ内容を繰り返し入力することになるので、項目入力支援のFileがあります。項目で右クリックすると表示するPopupMneuから選択すると項目に書き込まれます。
それぞれのファイルは自身の環境に合わせ書き換えてください。
この機能は項目でクリックするとファイル読み込んでPopupMneuを拡張する仕組みです。
ファイルが大きくなるとPopupMenuの起動が遅くなります。
RigList.txt:Transceiverの項目用で普段使う無線機を登録します。
AntennaList.txt:Antennaの項目用で使用するアンテナの種類や品番を登録します。
ModeList.txt:Modeの項用で入力の補助用途です。
QTHList.txt:移動運用の場所や常置場所を登録します。JCC番号とグリッドロケータ番号も登録できます。
Assistant Band Plan について
Band Planの描画は”BandPlan.xmlを読み込んで描画します。19バンド分に対応していますので
起動に少々時間が掛かるのはこのためです。
1ページが1Bandに対応したTag付きのPage Control画面です。
将来バンドプランが変更になった場合、BandPlan.xmlを書き換える事で対応可能な構造です。
xml FileはText Editorでもメモ帳でも編集可能なText Fileです。
ファイルの構造は
<HEADER>・・</HEADER>:表示には使用していません。(ファイルの表札のような・・・)
<BAND>・・</BAND>:BandのPageの宣言でこの範囲に詳細の項目を記載し1ページになります。
<TITLE>・・</TITLE>:Page Tagのタイトルになります。
<TOP>・・</TOP>:Pageの先頭に記載される見出し
<FRQ>・・<.FRQ>:バンドの周波数範囲で、”先頭周波数,末端周波数”で表示します。
<UNIT>・・</UNIT>:周波数の単位でHz、kHz、MHzを指定します。
<AREA>・・</AREA>:この範囲にバンドプランを記述します。
<1>・・</1>:周波数指示(先頭周波数,末端周波数)とバンド用途(1から17まで用途番号があります)
<S1>・・</S1>:割付用途の番号の前に”S”を付けると2重割付の表記になります。(段を下げて表示)
<COMMENT>・・</COMMENT>:バンドのコメントを記載します。
周波数指示のバンド用途番号は”WaveTypeList.txt”に定義されていて起動時に読み込まれます。
<WaveTypeList.txt>の内容と用途番号(左側の番号はファイルに記載なし)
1・狭帯域の全電波形式(1)
2・狭帯域の全電波形式(2)
3・狭帯域の全電波形式(3)
4・CW
5・CW.狭帯域データ
6・衛星
7・レピータ
8・EME
9・全電波形式
10・全電波形式(実験、研究用)
11・VOIP
12・広帯域の電話、電信、画像
13・広帯域データ
14・ビーコン
15・ATV・高速データ
16・アシスト
17・CW.狭領域の電話、電信、画像
(行番号と割り付け用途番号が紐付けられています)
バンド用途番号ごとの色は”WaveTypeColorList.txt”で定義しています。
<WaveTypeColorList.txt>の内容は16進数のカラーコードになっています。
$00F5F0FF
$00DCF8FF
$00D7EBFA
$00FFF8F0
$00FAE6E6
$00E0FFFF
$00ADDEFF
$00FFFFF0
$00CDFAFF
$0000D7FF
$002FFFAD
$0090EE90
$008CE6F0
$00AACD66
$009AFA00
$00FFFFE0
$00EE82EE
LavenderBlush
CornSilk
AliceBlue
GhostWhite
Lavender
LightYellow
NavajoWhite
Azure
LemonChiffon
Gold
GreenYellow
LightGreen
Khaki
MediumAquamarine
MediumSpringGreen
LightCyan
Violet
BandPlan.xml 50MHz(6mB)の例
<BAND>
<TITLE>50MHz</TITLE>
<TOP>6mb 50.00MHz 〜 54.00MHz</TOP>
<FRQ>50.00,54.00</FRQ>
<UNIT>MHz</UNIT>
<AREA>
<4>50.00,50.07</4>
<3>50.07,51.00</3>
<9>51.00,52.90</9>
<10>52.90,54.00</10>
<S8>50.0,50.30</S8>
</AREA>
<COMMENT>
50.01MHzビーコン
50.10MHz非常通信周波数
51.00MHz呼出し周波数・非常通信周波数
51.30MHzデジタル呼出し周波数・非常通信周波数
50.00MHz〜50.07MHzは月面反射通信を行うに限り
占有周波数3KHz以下を使用することが出来る
(3):占有周波数帯が3KHz以下(A3Eを除く)
**国内交信で利用される周波数**
CW:50.150MHz〜50.200MHz
SSB:50.180MHz〜50.230MHz
FM:51.00MHz〜51.12MHz
**デジタル通信**
狭帯域デジタルで運用できる範囲:50.070MHz〜51.00MHz
JT65:50.276MHz(国内交信,海外交信)
FT4:50.318MHz(国内交信,海外交信)
FT8:50.313MHz(国内交信,海外交信)
</COMMENT>
</BAND>
解説・・
バンドの始まり
Tagに表示されるタイトル文字列
ページのはじめに表示される見出し文字列
バンドの周波数範囲 50.00〜54.00
周波数の単位(表示用)
バンド表示エリアの始まり
周波数範囲 50.00〜50.07 用途番号は4
周波数範囲 50.07〜51.00 用途番号は3
周波数範囲 50.07〜52.90 用途番号は9
周波数範囲 52.90〜54.00 用途番号は10
周波数範囲 50.00〜50.30 用途番号は8(2重割付)
ハンドエリアの終わり
コメント欄の始まり
コメント文
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
コメントの終わり
バンドの終わり
Assistant JCC/JCG について
“JCC_List.csv”を読み込んでStringListを生成します。
JCC/JCG Viewerの左のリストは最初から固定で都道府県名が最初から入力されていています。
最初に”都道府県名”を選択すると選択文字列からJCC_List.csvの中から同じ都道府県名から都市名を都市名選択に書き出します。
この時、都市名と紐付けしてJCC_List.csvの行番号を記憶します。
その後 都市名を選択すると紐付けされたJCC_List.csvの行番号からJCC番号を
Search resultsに書き出します。
逆にJCC/JCG番号から都市名を導く処理は
JCC_List.csvからJCC/JCG番号がマッチする行番号を導き出して
その都道府県名から都市名選択リストを生成し該当する名前にマークします。
Assistant PK Award について
基本構造はJCC/JCGと同じですが都市名の配下にPKスポットがあるので
一段処理が多くなります。
“pklist.csv”を読み込んでStringListを生成します。
JCC/JCG Viewerの左のリストは最初から固定で都道府県名が最初から入力されていています。
最初に”都道府県名”を選択すると選択文字列からpklist.csvの中から同じ都道府県名の都市名を都市名選択に書き出します。
ローカル選択から選択された都市名で配下のPKスポットリストを生成します。
この時、PKスポットと紐付けしてpklist.csvの行番号を記憶します。
その後 PKスポット名を選択すると紐付けされたpklist.csvの行番号からPK番号を
PK番号検査の番号欄に書き出します。
逆にPK番号から都市名、PKスポットを導く処理は
JCC_List.csvからPKスポット番号がマッチする行番号を導き出して
その都道府県名から都市名選択リスト、PKスポットを生成し該当する名前にマークします。