Back
新着表示
タイトル
記事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を書き換えて、そのデータにアペンドしていく、 というやり方しかありません。 新たな関数を作ったとしても、そのような手続きになります。 ・・・とまぁ、このあたりはご存知かと思います。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: hdbの項目幅
: 401
: 2014/02/14(Fri) 19:41:41
: JA2BQX 太田
hdbの項目幅に付いてお願いします。 VB6は大分時代遅れになって来たので最近はVB2010にて作成するようにしています。 そこで、Hamlog50.dll その他でHamlog.hdbから直接、変更可能な項目の幅を取得・設定する関数はありましたでしょうか? (私の調べた範囲では無いように思います) 「HAMLOGW.INI」からセットされている変更可能な項目幅は取得出来ます。 また、Hamlog.hdbをバイナリーでオープンして項目幅を取得、及び設定する事は出来ますが Hamlog50.dll にてこれらが関数にて出来ると楽が出来るのですが。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: Default Printer の一時変更
: 400
: 2014/02/10(Mon) 23:58:47
: JP7CZE 川辺
> 「連続印刷」の場合は、プリンタにデータを吐き出した後、[OK]をクリ > ックしなければ、全部印刷してしまっても印刷済みマークは入りませんよ。 お~,そういう機能があったのですね. 「連続印刷」・・・どこにあるのか???やっと見つけました。チェックボックスの並びの上の真ん中ですね(^^; とりあえず,QSLカードを印刷できることだけで精一杯のままで使ってきて,意味もわからずに,見ないふりしてました(^^; 強制改行ができるようになったので,Directの宛先をRemark2に書いちゃおうかと思ってます...で,A4でラベル印刷できればなぁと. しっかり,印刷ダイアログのお勉強と,印刷関係のコマンド,変数関係の勉強をしなきゃと思っているところです。 ほんとに便利でおもしろいソフト,ありがとうございます.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
参照先
:
Re: Default Printer の一時変更
:
399
:
2014/02/10(Mon) 19:11:14
:
JG1MOU浜田
:
> で,あわてて止めて,印刷マークを元に戻して...コールサインでソートして印刷させているので,印刷済みのを範囲の中から目で追わないとダメなんですよね(^^; 「連続印刷」の場合は、プリンタにデータを吐き出した後、[OK]をクリ ックしなければ、全部印刷してしまっても印刷済みマークは入りませんよ。
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事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を開いて下さい”等のメッセージを出すか,太田さんの方法に変えるか... サジェッションありがとうございました.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事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)
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事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キーが押されていた;
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: XP sp4上の SetForegroundWindow と THW_ENTER
: 395
: 2014/02/08(Sat) 20:16:43
: JP7CZE 川辺
外部アプリケーションからHAMLOGにデータを渡せることを,つい最近知りました. そこで,>○ Turbo HAMLOG/Win とのデータのやりとりについて(Ver5.21以上) > WM_COPYDATA というウインドウメッセージを使って、あなたの作成するアプリケー >ションからTurbo HAMLOG/Winの入力ウインドウに文字列を送ったり、逆に入力ウイン >ドウの文字列を得ることができます。 ということで,サンプルプログラムをもとにVB6で作ってみました. HAMLOGにデータを渡すsub ルーチン(渡す文字列の引数はMessage)で, cds.dwData = 1 Or THW_ENTER Or THW_FOCUS 'コールサインに文字列を送ってデータを送信後ENTERキーを押し,フォーカスを移す。 Hwnd1 = FindWindow("TThwin", 0) If Hwnd1 < 1 Then ' ハムログが起動していない Exit Sub End If cbuff = Message ' コールサイン文字列を引数からコピー cds.cbData = Len(Message) cds.lpData = Message X = SendMessage(Hwnd1, WM_COPYDATA, hwnd, cds) データを送るのはうまくいくのですが, フォーカス・アクティブが Hamlog(の入力ウィンドウ)に移らず,当然前面に出てきません. いろいろネットで調べてみるとXP(以上?)では,何やら制限がありそう. そこで,直接, X = SetForegroundWindow(Hwnd1) を記述してみたところ,X の値は 0,すなわち不成功でした. さらに,おまじないをしてからでないとダメだという記述もあったのですが,もっとシンプルに,VB6の組み込みステートメントの AppActivate を使う方法がありました. Call AppActivate("Turbo HAMLOG", 0) 引数は,タイトルバーの文字列を渡す必要があるようです. なんと?この記述で,きちんと制御できるようになりました. なお,サンプルプログラム中の SendMessageの引数の定義ですが, Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long と,lParam の形式は,Longではなく,Anyでないとエラーになりました. あと,サンプルプログラム中, SendMessage(Hwnd1, WM_COPYDATA, hwnd, cds) は,関数なので, X = SendMessage(Hwnd1, WM_COPYDATA, hwnd, cds) と,戻り値を変数で受けないとエラーになりました. ちなみに,組み込んだプログラムは,HAMLOGを使い出した2年くらい前に,手書きでリストを取っていたのを電子化するのに,HAMLOGにコールサイン・メモというのがあるのも知らなかったこともあって,紙同様にタイムスタンプを付けてログファイルに記録する機能を付けたものです. テキストボックスそのものの単純なラインエディタの結果を,エンターが押された時に,大文字変換してテキストボックスに戻し,クリップボードにコピーして,リストボックスとタイムスタンプを付けてファイルに書き出すだけの単純なプログラムです.ミスコピーやミスタイプをチェックするためです. ハムログとのやり取りは,ALT+TABでハムログに切り替えて,ペースト,というものでした. 今回ハムログのAPIが使えることがわかって,API経由でフォーカスの移動+ペースト(+エンター/CTL+エンター)を自動化しようと思った訳です. ということで,無事できました. あと,Windowsの仕様なのか,CTL+Enterをテキストボックスで入力すると,KeyDownもKeyPressもKeyUpも,CTL+Enterとして渡ってしまうようですね. 私のプログラムでは,ノートパソコンのキーの位置関係から, Enterのみだとハムログにデータを渡さない, CTL+Enterでハムログにデータを渡してエンターを押したのと同等, Shit+Enterでハムログにデータを渡してCTL+エンターを押したのと同等, にしたかったのですが,どのタイミングで渡しても,CTL+Enterが働いてしまうので,仕方なくShift+Enterでエンターを押したのと同等にしています.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: Default Printer の一時変更
: 393
: 2014/02/08(Sat) 19:26:11
: JP7CZE 川辺
浜田さん,> アイディアを有難うございました。 速いですね,もう表示できるようになったんですね. せわしないオペレート中に使う機能ではないですが, やはりボタンを押してダイアログを開くより,気が楽です. ありがとうございました.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!
タイトル
記事No
投稿日
投稿者
: Re: Default Printer の一時変更
: 392
: 2014/02/08(Sat) 19:18:36
: JP7CZE 川辺
浜田さん,こんばんは.> プリンタ情報は、Win32-APIの、DEVMODE構造体の内容を読みだすと、 > 取得することができます。(ということを先日知りました。) 私は,VB3で書いた80万件くらいのデータを座標の中にプロットするプログラムを10年位前にVB6に移植した時,ドローソフトに読み込ませるのに,以前はDXFかPSで時前で出力していたのを,PDFプリンタに出力するようにした時,とりあえず出来るようにやっただけなので...m(__)m> 構造体メンバーの大半は数値で、また、プリンタ固有の設定方法があり > ますので、文字列で保存されているプリンタ名、用紙名をバルーンヒント > で表示させようと思います。 > アイディアを有難うございました。 了解です.参考にさせてもらいます. ありがとうございました.
このスレッドは管理者によって ロック されていますので、返信並びに編集は出来ません!