HAMLOG プログラム開発室


新着表示
タイトル
記事No
投稿日
投稿者

Win7 + VisualBasic2010で
405
2014/02/16(Sun) 20:57:39
JA2BQX 太田
お世話になります。 ここ数日手こずっていまして、
過去ログでは No.337 で「Windows8 + VisualBasic2010でHamlog.hdbを使う では」
上手く動作しているようなので私の環境の原因でしょうが、
「Win7 + VisualBasic2010」にてプラットフォームは(x86).NET Frameworkは3.5 で
THW2VBNET.dll が認識されないのですが何が悪いのかヒントを頂けませんか?

同じソースで
「WinXp + VisualBasic2010」にてプラットフォームは(x86).NET Frameworkは3.5 では動くのですが....。

If InitHamlogDLL() <> success Then  'ここでエラーが出る。
Exit Sub
End If
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Visual C++
404
2014/02/16(Sun) 12:20:31
JG1MOU浜田
Windows7 Pro 64bitマシンで Visual C++ 5.0がうまく動作しないので、
難儀してます。
そんな古いもん使うな!って言われればそれまでなんですが、ちょっと
したもの作るだけなので、最新版を買う気もありませんし。

やむなくVMware上のXPで動作させようと、調整中です。
単なる近況です。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: hdbの項目幅
403
2014/02/15(Sat) 05:16:38
JA2BQX 太田
浜田さん、ありがとうございます。

> HDBファイルのヘッダには、RMKS1******C****n
> といった感じで書かれてます。
> nはByte型で54が初期値で、Remarks1の幅です。

はい、これを読み込み、変更するときは新しい値をセットして..としています。

> 新たな関数を作ったとしても、そのような手続きになります。

そうでしたか、「新たな関数」があればもっと楽に対処できるのかと
横着な事を考えてみたものですから、失礼しました。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: hdbの項目幅
402
2014/02/14(Fri) 21:10:09
JG1MOU浜田
> そこで、Hamlog50.dll その他でHamlog.hdbから直接、変更可能な項目の幅を取得・設定する関数はありましたでしょうか?
> (私の調べた範囲では無いように思います)

VBの場合、私が書いた構造体の定義がかなりの手抜きなので、これでは
無理のようです。
CやPascalなら取得は可能です。

> また、Hamlog.hdbをバイナリーでオープンして項目幅を取得、及び設定する事は出来ますが
> Hamlog50.dll にてこれらが関数にて出来ると楽が出来るのですが。
>

Hamlog本体では、dbf_create()で項目幅の違うデータゼロのHDBを作成し、
元のQSOデータから1レコードずつコピー&アペンドしてます。
これをVB用に書くのはよくわかりません。

HDBファイルのヘッダには、RMKS1******C****n
といった感じで書かれてます。
nはByte型で54が初期値で、Remarks1の幅です。

データゼロの状態でnを書き換えて、そのデータにアペンドしていく、
というやり方しかありません。
新たな関数を作ったとしても、そのような手続きになります。

・・・とまぁ、このあたりはご存知かと思います。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

hdbの項目幅
401
2014/02/14(Fri) 19:41:41
JA2BQX 太田
hdbの項目幅に付いてお願いします。
VB6は大分時代遅れになって来たので最近はVB2010にて作成するようにしています。

そこで、Hamlog50.dll その他でHamlog.hdbから直接、変更可能な項目の幅を取得・設定する関数はありましたでしょうか?
(私の調べた範囲では無いように思います)

「HAMLOGW.INI」からセットされている変更可能な項目幅は取得出来ます。
また、Hamlog.hdbをバイナリーでオープンして項目幅を取得、及び設定する事は出来ますが
Hamlog50.dll にてこれらが関数にて出来ると楽が出来るのですが。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: Default Printer の一時変更
400
2014/02/10(Mon) 23:58:47
JP7CZE 川辺
> 「連続印刷」の場合は、プリンタにデータを吐き出した後、[OK]をクリ
> ックしなければ、全部印刷してしまっても印刷済みマークは入りませんよ。

お~,そういう機能があったのですね.
「連続印刷」・・・どこにあるのか???やっと見つけました。チェックボックスの並びの上の真ん中ですね(^^;

とりあえず,QSLカードを印刷できることだけで精一杯のままで使ってきて,意味もわからずに,見ないふりしてました(^^;

強制改行ができるようになったので,Directの宛先をRemark2に書いちゃおうかと思ってます...で,A4でラベル印刷できればなぁと.
しっかり,印刷ダイアログのお勉強と,印刷関係のコマンド,変数関係の勉強をしなきゃと思っているところです。

ほんとに便利でおもしろいソフト,ありがとうございます.
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: Default Printer の一時変更
399
2014/02/10(Mon) 19:11:14
JG1MOU浜田

> で,あわてて止めて,印刷マークを元に戻して...コールサインでソートして印刷させているので,印刷済みのを範囲の中から目で追わないとダメなんですよね(^^;

「連続印刷」の場合は、プリンタにデータを吐き出した後、[OK]をクリ
ックしなければ、全部印刷してしまっても印刷済みマークは入りませんよ。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: XP sp4上の SetForegroundWindow と THW_ENTER
398
2014/02/09(Sun) 16:29:05
JP7CZE 川辺
太田さん,初めまして.

> HAMLOGにから自作アプリケーションにデータを渡すことも出来ます。
> Hamlogからコールサインを受け取りEntity解析をしてHamlogに、そのEntityのCodeを送る...や
> WKD/CFM状況を表示するなどの自作ソフトで利用させていただいていました。

なるほど,逆も出来るのですね.Hamlogから取得して,何らかに変換して,Hamlogに戻すことが出来るのですね.

> こちらではサンプルの記述で上手く動作しています。
> 下記に一部を抜粋します。
>
> Module1 の中に記述

> Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal wnd As Long, _
> ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As COPYDATASTRUCT) As Long

正しくは,ByRef lParam As COPYDATASTRUCT ですか.
私の場合は,Iparam As Any で動作しちゃいました.

> cmmd = 15 Or THW_ENTER Or THW_FOCUS
> cds.dwData = cmmd
> cds.cbData = LenB(Trim(cbuff)) / 2 ' 文字列の長さ
> cds.lpData = cbuff
> hHwnd2 = SendMessage(HamloghWnd, WM_COPYDATA, DX_chk_hwnd, cds)

ここまでは,THW_FOCUSを除いて,うまくいったのですが...

> lRet = SetWindowPos(hHwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)

なるほど,こういう手もあるのですね.

それと,ウィンドウのハンドルですが,使用する関数の直近の値を使わないとダメなんですね?
私の場合,SendMessageの後,SetForegroundWindow でやろうとしましたが,対象のウィンドウのハンドルを,最初に取得した,Hwnd1 = FindWindow("TThwin", 0)の値を使っていました.しかし,今やってみたところ,ハンドルを戻り値にしてやっても,うまくいきませんでした(SetForegroundWindow の戻り値が0).

それで,
Call AppActivate("Turbo HAMLOG", 0)
にしてみたら,うまくいったわけです.
うまくいったと思ったら,対象ウィンドウが最小化されている状態ではエラーになることがわかりました.最小化を含め,ハムログが起動されていなければ一連の操作には続かない(最初のハンドルの取得で無ければお終い)わけで,AppActivateで使うのなら,エラー割り込みで,エラーコードと合せて,”最小化されているHamlogを開いて下さい”等のメッセージを出すか,太田さんの方法に変えるか...

サジェッションありがとうございました.
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: XP sp4上の SetForegroundWindow と THW_ENTER
397
2014/02/09(Sun) 08:31:55
JA2BQX 太田
こんにちは。

> 外部アプリケーションからHAMLOGにデータを渡せることを,つい最近知りました.

この逆の
HAMLOGにから自作アプリケーションにデータを渡すことも出来ます。
Hamlogからコールサインを受け取りEntity解析をしてHamlogに、そのEntityのCodeを送る...や
WKD/CFM状況を表示するなどの自作ソフトで利用させていただいていました。


> cds.dwData = 1 Or THW_ENTER Or THW_FOCUS 'コールサインに文字列を送ってデータを送信後ENTERキーを押し,フォーカスを移す。
> データを送るのはうまくいくのですが,
> フォーカス・アクティブが Hamlog(の入力ウィンドウ)に移らず,当然前面に出てきません.

こちらではサンプルの記述で上手く動作しています。
下記に一部を抜粋します。

Module1 の中に記述

Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As String
End Type

Public Const THW_ENTER = &H10000 ' データ送信後、ENTERキーを押したのと同じ
Public Const THW_FOCUS = &H20000 ' データ送信後、編集ボックスにフォーカス
Public Const THW_SAVEBOX_ON = &H40000 ' データ保存時、確認MessageBox表示あり
Public Const THW_SAVEBOX_OFF = &H80000 ' データ保存時、確認MessageBox表示なし
Public Const THW_APPLIhWnd = &H100000 ' メインウインドウのハンドルを返す

Public Const WM_COPYDATA = &H4A
Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal wnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As COPYDATASTRUCT) As Long



送るコマンドにて
cmmd = 15 Or THW_ENTER Or THW_FOCUS
cds.dwData = cmmd
cds.cbData = LenB(Trim(cbuff)) / 2 ' 文字列の長さ
cds.lpData = cbuff
hHwnd2 = SendMessage(HamloghWnd, WM_COPYDATA, DX_chk_hwnd, cds)

lRet = SetWindowPos(hHwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: XP sp4上の SetForegroundWindow と THW_ENTER
396
2014/02/08(Sat) 23:02:36
JG1MOU浜田
WM_COPYDATAでVB製のアプリにデータを渡す方法は、私もよくわからない
ところがあります。Basicは苦手でして・・・。
JA2BQX太田さんが詳しいかも。

> CTL+Enterでハムログにデータを渡してエンターを押したのと同等,
> Shit+Enterでハムログにデータを渡してCTL+エンターを押したのと同等,

キーが押されたときのイベントハンドラの中でこんなようなこと使ってます。(C言語で書いた場合)

if (GetKeyState(VK_CONTROL) & 0x8000)
Ctrlキーが押されていた;

if (GetKeyState(VK_SHIFT) & 0x8000)
Shiftキーが押されていた;
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop