//Copyright+LGPL //----------------------------------------------------------------------------------------------------------------------------------------------- // Copyright 2000-2013 Makoto Mori, Nobuyuki Oba //----------------------------------------------------------------------------------------------------------------------------------------------- // This file is part of MMVARI. // MMVARI is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License // as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. // MMVARI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. // You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see // . //----------------------------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------- #include #pragma hdrstop #include #include "MacroKey.h" #include "MacEdit.h" #include "ComLib.h" #include "InputWin.h" //--------------------------------------------------------------------- #pragma resource "*.dfm" //TMacroKeyDlg *MacroKeyDlg; MACKEY mackeycom[]={ {1, "<%TX>","送信に切り替え", "Switch to TX"}, {1, "<%RX>","受信に切り替え", "Switch to RX"}, {1, "<%TXRX>","送受の切り替え", "Turns over TX/RX"}, {1, "<%TXOFF>","送信の強制終了", "Abort TX (Switch to RX immediately)"}, {1, "<%AutoClear>","自動的に送信画面をクリア", "Clear TX window automatically"}, {1, "<%ClearTXW>","送信画面をクリア", "Clear TX window"}, {1, "<%ClearRXW>","受信画面をクリア", "Clear RX window"}, {1, "<%MyCall>","自局のコールサイン", "My callsign"}, {1, "<%HisCall>","相手局のコールサイン", "His/her callsign"}, {1, "<%HisName>","相手局の名前", "His/her name"}, {1, "<%DearName>","Dear xxx または xxxさん", "Dear xxx"}, {1, "<%HisRST>","相手局のRST", "His/her RST"}, {1, "<%MyRST>","自局の(伝えられた)RST", "My RST"}, {1, "<%FREQ>","運用周波数(例 7)", "Logging FREQ (e.g. 7)"}, {1, "<%BAND>","運用バンド(例 40m)", "Logging BAND (e.g. 40m)"}, {1, "<%HisQTH>","相手局のQTH", "His/her QTH"}, {1, "<%Note>","Note(備考)", "Note (Remarks)"}, {1, "<%UDATE>","日付(UTC)", "UTC date"}, {1, "<%UTIME>","時刻(UTC) hh:mm", "UTC time (hh:mm)"}, {1, "<%UTIMES>","時刻(UTC) hh:mm:ss", "UTC time (hh:mm:ss)"}, {1, "<%LDATE>","日付(Local)", "Local date"}, {1, "<%LTIME>","時刻(Local) hh:mm", "Local time (hh:mm)"}, {1, "<%LTIMES>","時刻(Local) hh:mm:ss", "Local time (hh:mm:ss)"}, {1, "<%PTIME>","1980/JAN/6 からの経過秒(UTC時刻)", "Passing time from 1980/JAN/6 (UTC)"}, {1, "<%LPTIME>","1980/JAN/6 からの経過秒(ローカル時刻)", "Passing time from 1980/JAN/6 (local time)"}, {1, "<%QPTIME>","QSO開始UTC時刻(1980/JAN/6 からの経過秒)", "QSO Starting time (passing time from 1980/JAN/6 (UTC)"}, {1, "<%VALTIME=year,<%PTIME>>","PTIMEを分解 (year/month/day/hour/minute/second..., PTIME)", "Takes the PTIME apart (year/month/day/hour/minute/second..., PTIME)"}, {1, "<%Capture>","コールサインの捕獲", "Capture callsign"}, {2, "<%HisGreetings=3>","自動挨拶(例 1-GA, 2-Good morning, 3-おはようございます)", NULL}, {3, "<%HisGreetings=2>","Auto Greetings (e.g. 1-GA, 2-Good morning)", NULL}, {1, "<%HisNR>","HisRSTのコンテストNR", "Only the contest number part of his/her RST"}, {1, "<%MyNR>","MyRSTのコンテストNR", "Only the contest number part of my RST"}, {1, "<%Entity=<%HisCall>>","エンティティコード", "Code of the entity"}, {1, "<%EntityName=<%HisCall>>","エンティティ名", "Name of the entity"}, {1, "<%Continent=<%HisCall>>","大陸コード", "Code of the continent"}, {1, "<%PLATFORM>","OSのプラットフォーム", "Platform of the OS"}, {1, "<%CodePage>","OSのコードページ", "Code page of the OS"}, {1, "<%LanguageID>","OSの言語ID", "Language ID of the OS"}, {1, "<%VER>","MMVARIのバージョン", "Program version of MMVARI"}, {1, "<%VERMINOR>","MMVARIのマイナーバージョン", "Program minor version of MMVARI"}, {1, "<%VARITYPE>","バリコード種別(VariSTD, VariJA, VariHL, ...)", "Type of the VARICODE(VariSTD, VariJA, VariHL, ...)"}, {1, "<%MODE>","現在のモード(変調方式)種別(GMSK, FSK, ...)", "Current type of the mode(GMSK, FSK, ...)"}, {1, "<%Level>","信号のS/Nレベル(dB)", "S/N level of the signals"}, {1, "<%PeakLevel>","信号のピークS/Nレベル(dB)", "Peak S/N level of the signals"}, {1, "<%AverageLevel>","信号の平均S/Nレベル(dB)", "Average S/N level of the signals"}, {1, "<%MetricMFSK>","mfsk信号のメトリックレベル", "Metric level in mfsk"}, {1, "<%MetricMFSK=even>","mfsk信号のビタビ別メトリックレベル(even/odd)", "Metric level of the viterbi in mfsk (even/odd)"}, {1, "<%SquelchLevel=3.0>","スケルチレベル(S/N=dB)の設定", "Set squelch level (S/N=dB)"}, {1, "<%CWID>","My callsignをCWで送信", "CWID of the MyCallsign"}, {1, "<%CWID= 73 :>","文字列をCWで送信 (AS @ SK : AR ; KN ] BT =)", "CWID of the strings (AS @ SK : AR ; KN ] BT =)"}, {1, "<%CWSpeed=20>","CW速度(10 - 60)を設定", "CWID speed (10-60)"}, {1, "<%MODE=GMSK>","モード(変調方式)の設定(GMSK, FSK, ...)", "Set the mode(GMSK, FSK, ...)"}, {1, "<%AutoNET>","自動的にNETをONにする", "Turns NET into ON automatically"}, {1, "<%NETON>","NETをONにする", "Turns NET into ON"}, {1, "<%NETOFF>","NETをOFFにする", "Turns NET into OFF"}, {1, "<%AFCON>","AFCをONにする", "Turns AFC into ON"}, {1, "<%AFCOFF>","AFCをOFFにする", "Turns AFC into OFF"}, {1, "<%ATCON>","ATCをONにする", "Turns ATC into ON"}, {1, "<%ATCOFF>","ATCをOFFにする", "Turns ATC into OFF"}, {1, "<%RxCarrier>","受信キャリア周波数(Hz)", "RX carrier FREQ(Hz)"}, {1, "<%TxCarrier>","送信キャリア周波数(Hz)", "TX carrier FREQ(Hz)"}, {1, "<%RxCarrier=1750>","受信キャリア周波数(Hz)を設定", "Set RX carrier FREQ(Hz)"}, {1, "<%TxCarrier=1750>","送信キャリア周波数(Hz)を設定", "Set TX carrier FREQ(Hz)"}, {1, "<%AFCFrequency>","AFC検出周波数(Hz)", "AFC FREQ(Hz)"}, {1, "<%MouseFrequency>","スペクトラム/ウォータフォールでのマウス周波数(Hz)", "Mouse frequency on Waterfall(Hz)"}, {1, "<%TONE>","シングルトーンを送信", "Transmit single tone"}, {1, "<%BPF=0>","BPF帯域幅(0-3)を設定", "Set BPF width (0-3)"}, {1, "<%BPFTaps=64,80,128,256>","BPFのタップ数を設定", "Set BPF taps"}, {1, "<%Notch=ONOFF>","ノッチフィルタのON/OFF (ON/OFF/ONOFF)", "Turns Notch into ON or OFF (ON/OFF/ONOFF)"}, {1, "<%Notch=1750>","ノッチフィルタの周波数(Hz)を設定", "Set Notch FREQ (Hz)"}, {1, "<%NotchTaps=128>","ノッチフィルタのタップ数を設定(16〜512)", "Set taps of the Notch filter (16-512)"}, {1, "<%NotchWidth=1>","ノッチフィルタの帯域を設定(1〜1000)", "Set width of the Notch filter (1-1000)"}, {1, "<%BAUD>","伝送ボーレート", "BaudRate"}, {1, "<%BAUD=31.25>","伝送ボーレート(20〜300)を設定", "Set BaudRate(20-300)"}, {1, "<%AFCWidth=50>","AFC吸い込み幅(Hz)を設定", "Set AFC FREQ width(Hz)"}, {1, "<%AFCLevel=12>","AFC吸い込みレベル(dB)を設定", "Set AFC sense level(dB)"}, {1, "<%ATCSpeed=0>","ATC応答速度(0-5)を設定", "Set ATC speed(0-5)"}, {1, "<%ATCLevel=15>","ATC検出レベル(dB)を設定", "Set ATC sense level(dB)"}, {1, "<%ATCPPM>","ATC値(ppm)", "ATC value (ppm)"}, {1, "<%PTT=COM1>","PTTポートを設定", "Set PTT port"}, {1, "<%COMFSK=ONOFF>","PTTポート FSKのON/OFF (ON/OFF/ONOFF)", "Turns FSK into ON or OFF (ON/OFF/ONOFF)"}, {1, "<%COMFSKINV=ONOFF>","PTTポート FSKの論理反転のON/OFF (ON/OFF/ONOFF)", "Turns inverting logic (FSK) into ON or OFF (ON/OFF/ONOFF)"}, {1, "<%Radio=COM2>","Radioポートを設定", "Set Radio port"}, {1, "<%RadioOut=\\$000000000F>","Radioポートにデータを出力", "Output data to the radio port"}, {1, "<%RadioCarrierKHz>","リグの補正キャリア周波数(KHz)", "Adjusted carrier FREQ(KHz) of the radio"}, {1, "<%RadioKHz>","リグのVFO周波数(KHz)", "VFO FREQ(KHz) of the radio"}, {1, "<%RadioKHz=YAESU-HF,14073.000>","リグのVFO周波数(KHz)の設定", "Set VFO FREQ(KHz) of the radio"}, {1, "<%RadioMode>","リグのモード", "Mode of the radio"}, {1, "<%RadioMode=CI-V,LSB>","リグのモードを設定", "Set Mode of the radio"}, {1, "<%PTTON>","PTTをONにする", "Turns PTT into ON"}, {1, "<%PTTOFF>","PTTをOFFにする", "Turns PTT into OFF"}, {1, "<%FFTScale>","FFTスケール(0-100dB, 1-60dB, 2-二乗振幅)", "FFT scale (0-100dB, 1-60dB, 2-Square amplitude)"}, {1, "<%FFTScale=2>","FFTスケールを設定", "Set FFT scale"}, {1, "<%FFTWidth=1000>","FFT表示幅(500/1000/2000/3000)", "Choose FFT width(500/1000/2000/3000)"}, {1, "<%SyncWidth=14>","Sync/Wave表示幅(4-24)", "Choose Sync/Waveform width(4-24)"}, {1, "<%ShowCH=1,ONOFF>","サブチャンネル(1-8)表示, ON/OFF/ONOFF", "Show sub-channel(1-8), ON/OFF/ONOFF"}, {1, "<%SetCHSpeed=1,31.25>","サブチャンネル(1-8)のボーレート設定, 15〜300", "Set speed to the sub-channel(1-8), 15-300"}, {1, "<%SetCHMode=1,GMSK>","サブチャンネル(1-8)のモード設定", "Set mode to the sub-channel(1-8)"}, {1, "<%ClearCHW=1>","サブチャンネル(1-8)の画面クリア", "Clear window of the sub-channel(1-8)"}, {1, "<%QSOON>","QSOの開始(ログに記録)", "Start QSO (logging)"}, {1, "<%QSOOFF>","QSOの終了(ログに記録)", "End of the QSO (logging)"}, {1, "<%FREQ=7>","ログの運用周波数を設定", "Set logging FREQ"}, {1, "<%BAND=40m>","ログの運用バンドを設定", "Set logging BAND"}, {1, "<%LogMODE=SSB>","ログの運用モードを設定(ヌル文字列で自動設定)", "Set logging MODE (null is auto)"}, {1, "<%HisCall=<%Capture>>","相手局のコールを設定", "Set his/her callsign"}, {1, "<%HisRST=599>","相手局のRSTを設定", "Set his/her RST"}, {1, "<%MyRST=599>","自局のRSTを設定", "Set my RST"}, {1, "<%Note=<%VARITYPE>>","Note(備考)に設定", "Set note (Remarks)"}, {1, "<%RefRXW>","受信画面の参照画面を開く", "Show RX window with the editor"}, {1, "<%EditFile=memo.txt, 0>","テキストファイル編集画面を開く(Name, ReadOnly)", "Open text editer(Name, ReadOnly)"}, {1, "<%SendFile=test.txt>","テキストファイルの送信", "Send file"}, {1, "<%EditMacro=2>","マクロボタン(1〜160)を編集", "Edit macro button (1-160)"}, {1, "<%EditMacro=OnStart>","イベントマクロを編集(Event名)", "Edit event macro (Name of the event)"}, {1, "<%EditMacro=AS(CW)>","AS(CW)マクロを編集(Event)", "Edit AS(CW) macro"}, {1, "<%EditMacro=MacroTxt.txt>","テキストファイルのマクロを編集", "Edit macro written in the text file"}, {1, "<%MacroText=MacroTxt.txt>","テキストファイルのマクロを実行", "Execute macro written in the text file"}, {1, "<%SaveMacro=Macros.mac>","全てのマクロをファイルに保存", "Save all Macros"}, {1, "<%LoadMacro=Macros.mac>","全てのマクロをファイルからロード", "Load all Macros"}, {1, "<%HEX2DEC=ABCD>","16進数を10進数に変換", "Convert decimal to HEX"}, {1, "<%CHAR=A>","文字コード(10進数)に変換", "Convert character code (decimal)"}, {1, "<%CHARX=A>","文字コード(16進数)に変換", "Convert character code (HEX)"}, {1, "<%CODE=82A0>","文字コード(16進数)で入力", "Input as the character code (HEX)"}, {1, "<%SP>","スペースを入力", "Input space"}, {1, "<%CR>","CRを入力", "Input CR"}, {1, "<%BS>","BSを入力", "Input BS"}, {1, "<%TAB>","TABを入力", "Input TAB"}, {1, "<%SkipCR>","マクロ文内の次のCR(改行)をスキップ", "Skip next CR(Enter) in the macro sentence"}, {1, "<%DisableCR>","マクロ文内のCR(改行)を無効にする", "Disable CR(Enter) in the macro sentence"}, {1, "<%EnableCR>","マクロ文内のCR(改行)を有効にする", "Enable CR(Enter) in the macro sentence"}, {1, "<%DisableTAB>","マクロ文内のTABを無効にする", "Disable TAB in the macro sentence"}, {1, "<%EnableTAB>","マクロ文内のTABを有効にする", "Enable TAB in the macro sentence"}, {1, "<%DisableSP>","マクロ文内のスペースを無効にする", "Disable SPACE in the macro sentence"}, {1, "<%EnableSP>","マクロ文内のスペースを有効にする", "Enable SPACE in the macro sentence"}, {1, "<%Skip$=3,<%HisCall>>","指定の文字数をスキップ(Ascii)", "Skip Ascii characters"}, {1, "<%MSkip$=3,<%Note>>","指定の文字数をスキップ(MBCS)", "Skip MBCS characters"}, {1, "<%Find$=xx,ABCxxVVV>","指定の文字列を検索", "Find string"}, {1, "<%StrLen=<%HisCall>>","文字列の長さ", "String length"}, {1, "<%MStrLen=<%Note>>","MBCS文字列の長さ", "MBSC string length"}, {1, "<%ONOFF=<%Cond=IsSQ>>","ON/OFFを得る", "Get ON/OFF"}, {1, "<%RepeatText=3,<%RepeatText=33,RY><%CR>>","マクロ文字列の繰り返し", "Repeating the macro string"}, {1, "<%IDLE>","アイドル信号を挿入", "Insert idle signals"}, {1, "<%DIDDLE=LTR>","RTTYのDIDDLEコードを設定(BLK/LTR)", "Set DIDDLE code in RTTY (BLK/LTR)"}, {1, "<%UOS=ON>","RTTYのUOSを設定(ON/OFF/ONOFF)", "Set UOS in RTTY (ON/OFF/ONOFF)"}, {1, "<%RTTYWaitC=0>","RTTYの文字ウエイトを設定(0-100)", "Set character wait in RTTY (0-100)"}, {1, "<%RTTYWaitD=0>","RTTYのDIDDLEウエイトを設定(0-100)", "Set DIDDLE wait in RTTY (0-100)"}, {1, "<%RTTYWordOut=ON>","RTTYのワード単位出力を設定(ON/OFF/ONOFF)", "Set word out in RTTY (ON/OFF/ONOFF)"}, {1, "<%RTTYDEM=FFT>","RTTYの復調器を設定(IIR/FFT)", "Set demodulator in RTTY (IIR/FFT)"}, {1, "<%TxShift=170.0>","RTTY/FSK-Wの送信シフト幅を設定(10-450)", "Set TX's shift width in RTTY/FSK-W (10-450)"}, {1, "<%RxShift=170.0>","RTTY/FSK-Wの受信シフト幅を設定(10-450)", "Set RX's shift width in RTTY/FSK-W (10-450)"}, {1, "<%ToUpper=<%HisName>>","アッパーケース(大文字)に変換", "Convert to upper case"}, {1, "<%ToLower=<%HisCall> de <%MyCall>>","ロワーケース(小文字)に変換", "Convert to lower case"}, {1, "<%IME=ON>","IMEを制御する (ON/OFF/ONOFF)", "Control IME (ON/OFF/ONOFF)"}, {1, "<%RepeatTX=3000>","繰り返し送信の受信時間(ms)を設定", "Repeating TX mode (=RX times(ms))"}, {1, "<%Repeat=10000>","マクロの繰り返し(ms)を設定", "Repeating the macro (ms)"}, {1, "<%OnTimer=<%WaterMsg=4,<%AFCFrequency>Hz>>","OnTimerマクロを設定", "Set OnTimer macro"}, {1, "<%OnTimerInterval=1000>","OnTimerマクロの時間間隔(ms)を設定", "Set time interval(ms) of OnTimer macro"}, {1, "<%Page=1>","送信画面ページを切り替え (1〜4)", "Choose TXW-page (1-4)"}, {1, "<%AutoReturn>","自動的に送信画面ページを戻す", "Return TXW-page automatically"}, {1, "<%MoveTop>","カーソルを先頭に移動", "Move cursor to the TOP"}, {1, "<%MoveEnd>","カーソルを最後に移動", "Move cursor to the END"}, {1, "<%ResetScroll>","受信画面のスクロール状態を解除", "Reset scroll in the RX window"}, {1, "<%PopupTXW>","送信画面のポップアップメニューを開く", "Open Popup menu"}, {1, "<%DupeText>","1つ前の行と同じ内容を挿入", "Create dupe text"}, {1, "<%SeekNext>","ボタンページを次へ", "Seek to the next Button page"}, {1, "<%SeekPrev>","ボタンページを前へ", "Seek to the previous Button page"}, {1, "<%SeekTop>","ボタンページを先頭へ", "Seek to the top Button page"}, {1, "<%DigitalLevel=16384>","デジタル出力レベルを設定(1024 - 32768)", "Set digital output level (1024 - 32768)"}, {1, "<%OutputVolume>","出力ボリューム調整画面を開く", "Open output volume"}, {1, "<%InputVolume>","入力ボリューム調整画面を開く", "Open input volume"}, {1, "<%Setup>","設定画面を開く", "Open Setup window"}, {1, "<%SetupLog>","ログ設定画面を開く", "Open Setup logging window"}, {1, "<%SetupRadio>","リグコントロール設定画面を開く", "Open Setup radio command window"}, {1, "<%Calibration>","クロック較正画面を開く", "Open calibration window"}, {1, "<%BaseClock>","ベースクロック値(Hz)", "Base clock(Hz)"}, {1, "<%Clock>","RXクロック値(Hz)", "RX clock(Hz)"}, {1, "<%Clock=11025.00>","RXクロック値を設定", "Set RX clock"}, {1, "<%TxOffset>","TXオフセット値(Hz)", "TX offset clock(Hz)"}, {1, "<%TxOffset=0.00>","TXオフセット値を設定", "Set TX offset clock"}, {1, "<%DemodulatorClock>","復調器クロック値(Hz)", "Demodulator clock(Hz)"}, {1, "<%FFTClock>","FFTクロック値(Hz)", "FFT clock(Hz)"}, {1, "<%FFTSize>","FFTのサイズ(点数)", "FFT size(points)"}, {1, "<%WaterNoise>","ウォータフォールの検出ノイズレベル(dB)", "Sense noise level (dB) in WaterFall"}, {1, "<%WaterNoise=35,65>","ウォータフォールのノイズレベル範囲(dB)を設定", "Set noise level range (dB) in WaterFall"}, {1, "<%WaterLevels>","ウォータフォールのレベル配分", "Levels in WaterFall"}, {1, "<%WaterLevels=10,60,134,192,220,240>","ウォータフォールのレベル配分を設定", "Set levels in WaterFall"}, {1, "<%WaterColors>","ウォータフォールの配色", "Colors in WaterFall"}, {1, "<%WaterColors=0,FF0000,FFFFFF,FF,FFFF00,FF0000,FFFF00,FFFF,80FF,FF,FF,FF>","ウォータフォールの配色を設定", "Set colors in WaterFall"}, {1, "<%SpectrumColors>","スペクトラムの配色", "Colors in Spectrum"}, {1, "<%SpectrumColors=0,FF00,FFFFFF,808080,FFFF00,FF0000>","スペクトラムの配色を設定", "Set colors in Spectrum"}, {1, "<%RxColors>","受信画面の配色", "Colors in RX window"}, {1, "<%RxColors=FFFFFF,0,FF0000,FF,E0E0E0>","受信画面の配色を設定", "Set colors in RX window"}, {1, "<%TxColors>","送信画面の配色", "Colors in TX window"}, {1, "<%TxColors=FFFFFF,0,FF0000,FF,FFFFFF>","送信画面の配色を設定", "Set colors in TX window"}, {1, "<%SoundName>","入力サウンドの名前", "Name of the input sound device"}, {1, "<%SoundOutName>","出力サウンドの名前", "Name of the output sound device"}, {1, "<%SoundDevice=MONO,-1>","サウンドCH(MONO/LEFT/RIGHT)とデバイスIDの設定", "Set CH.(MONO/LEFT/RIGHT) es device ID of the sound"}, {1, "<%Suspend>","サスペンドにする", "Suspend MMVARI"}, {1, "<%Resume>","サスペンドを解除する", "Resume MMVARI"}, {1, "<%Wait=1000>","指定時間(ms)ウエイトする", "Wait the time (ms)"}, {1, "<%Execute=notepad.exe <%Folder>memo.txt>","プログラムの実行", "Execute other program"}, {1, "<%Shell=<%Folder>emmvari.txt>","シェルでドキュメントを開く", "Open document by Shell32"}, {1, "<%Exit>","MMVARIを終了する", "Exit MMVARI"}, {1, "<%ShutDown>","Windowsをシャットダウンする", "Shut down Windows"}, {1, "<%YesNo=String>","Yes/Noのメッセージボックス(Yes=6,No=7)", "Show Yes/No message(Yes=6,No=7)"}, {1, "<%YesNoCancel=String>","Yes/No/Cancelのメッセージボックス(Yes=6,No=7,Cancel=2)", "Show Yes/No/Cancel message(Yes=6,No=7,Cancel=2)"}, {1, "<%OkCancel=String>","Ok/Cancelのメッセージボックス(Ok=1,Cancel=2)", "Show Ok/Cancel message(Ok=1,Cancel=2)"}, {1, "<%Error=Macro ERROR>","エラーメッセージを表示", "Show error message"}, {1, "<%Warning=Macro WARNING>","警告メッセージを表示", "Show warning message"}, {1, "<%Message=Macro message>","メッセージを表示", "Show message"}, {1, "<%WaterMsg=4,Metric=<%MetricMFSK>><%Repeat=1000>","ウォータフォールにメッセージを表示(位置=0-4)", "Show message in the WaterFall (Pos. 0-4)"}, {1, "<%RxStatus=Status>","受信画面にステータスを表示", "Show status in the RX window"}, {1, "<%TableCount=AAA,BBB,CCC>","テーブルの項目数を得る", "Get count of the table"}, {1, "<%TableStr=1,AAA,BBB,CCC>","テーブルの文字列を得る", "Get string of the table"}, {1, "<%Table=<%BAUD>,20.0,31.25,45.0>","テーブルのインデクッスを得る", "Get index of the table"}, {1, "<%Menu=A,B,C,D>","メニューの表示(Input$に入る)", "Show menu (Put into Input$)"}, {1, "<%MenuB=\x22<%Table=<%BAUD>,20.0,31.25,45.45,62.5>\x22,20.0,31.25,45.45,62.5>","マーク付きメニューの表示(Input$に入る)", "Show menu with mark (Put into Input$)"}, {1, "<%Menu>","メニューインデックス", "menu index"}, {1, "<%Input=Input strings>","文字列の入力", "Input strings"}, {1, "<%Input$>","入力された文字列", "The strings which was entered"}, {1, "<%Click$>","受信画面でクリックした文字列", "The strings which was clicked in the RX window"}, {1, "<%CLICK$>","受信画面でクリックした文字列(大文字)", "The strings (upper case) which was clicked in the RX window"}, {1, "<%vvv>","テストメッセージ(英語)", "test message"}, {2, "<%VVV>","テストメッセージ(日本語)", "test message"}, {1, "<%KeyStroke=41>","キー(VK code)を押して離す", "Down and up the keyboard (VK code)"}, {1, "<%KeyDown=12><%KeyStroke=<%CHARX=V>><%KeyUp=12>","キー(VK code)を押す(Shift=10,Ctrl=11,Alt=12)", "Down the keyboard(VK code, Shift=10,Ctrl=11,Alt=12)"}, {1, "<%KeyUp=12>","キー(VK code)を離す(Shift=10,Ctrl=11,Alt=12)", "Up the keyboard(VK code, Shift=10,Ctrl=11,Alt=12)"}, {1, "<%DoMacro=2>","マクロボタン(1〜160)を実行", "Execute macro button (1-160)"}, {1, "<%DoEvent=OnMode>","イベントマクロを実行", "Execute event macro"}, {1, "<%Events>","イベントのリスト", "List of the events"}, {1, "<%ButtonName=1,Clear>","マクロボタン(1〜160)の名前を設定", "Set name of the button (1-160)"}, {1, "<%ButtonContents=1,<%ClearTXW>>","マクロボタン(1〜160)の内容を設定", "Set contents of the button (1-160)"}, {1, "<%PlayBack=ON>","サウンドプレーバックボタン機能の設定(ON/OFF/ONOFF)", "Set Sound Playback function (ON/OFF/ONOFF)"}, {1, "<%PlayBack=10>","サウンドプレーバック(0〜60秒)を実行", "Execute Sound Playback (0-60s)"}, {1, "<%PlayBackSpeed=5>","サウンドプレーバックの速度(1〜20)を設定", "Set speed of the Sound Playback (1-20)"}, {1, "<%PlayBackButtons=60,30,15>","サウンドプレーバックボタンの時間を設定", "Set time of the Sound Playback buttons"}, {1, "<%PlaySound=sound.mmv>","サウンドファイルの再生", "Sound playing from the file"}, {1, "<%PlaySound>","サウンドファイルの再生ダイアログを表示する", "Show sound playing dialog"}, {1, "<%RecordSound=sound.mmv>","サウンドファイルの録音", "Sound recording to the file"}, {1, "<%RecordSound>","サウンドファイルの録音ダイアログを表示する", "Show sound recording dialog"}, {1, "<%QuickRecordSound>","サウンドファイルの録音", "Sound recording (filename = Time stamp)"}, {1, "<%StopPlayRecord>","サウンド再生/録音の停止", "Close recording or playing"}, {1, "<%SoundTime>","再生/録音時間(秒)", "Time (sec) of sound (playing or recording)"}, {1, "<%Slider=CW speed,<%CWSpeed>,10,60,1,10>","スライダーを表示(タイトル,値,Min,Max,ステップ,目盛の数) Input$に入る", "Show slider (Title,Value,Min,Max,Step,Scale) Put into Input$"}, {1, "<%FileDialog=Text file,Text Files(*.txt)|*.txt|,Default,txt,>","ファイル選択ダイアログを表示(Input$に入る)", "Show choose file dialog box (Put into Input$)"}, {1, "<%CPUBENCHMARK>","CPUベンチマーク値 (us)", "The values of CPU-benchmark (us)"}, {1, "<%RANDOM=<%PTIME>>","乱数の種の初期化", "Initialization of a random seed"}, {1, "<%RANDOM>","乱数(0〜32767)", "A random values (0 - 32767)"}, {1, "<%String=Name>","#defineで定義した文字列を展開", "Defined strings by #define"}, {1, "<%CallProc=Name>","プロシジャーを実行", "Execute the procedure"}, {1, "<%DebugProc=Name>","<%CallProc=...>のデバッグ版", "Debug version of <%CallProc=...>"}, {1, "<%Format=%.3f,<%BAUD>>","書式変換(C言語)指定で展開 (書式文字列,式)", "Convert format (C Language) string"}, {1, "<%Inv=<%Cond=IsSQ>>","論理を反転", "Invert logic"}, {1, "<%Floor=<%BAUD>>","小数点以下を切り捨て", "Returns the largest integer that is not greater than the argument"}, {1, "<%Log=10>","自然対数を計算", "Calculates logarithms"}, {1, "<%Exp=2.302585092994046>","指数関数 e の x 乗を計算", "Calculates the exponential"}, {1, "<%Sqrt=10>","平方根を計算", "Calculates the square root"}, {1, "<%Pow=10,2>","x の y 乗を計算", "Calculates x raised to the power of y"}, {1, "<%Sin=0.5>","sin(x)を計算", "Calculates the sin(x)"}, {1, "<%Cos=0.5>","cos(x)を計算", "Calculates the cos(x)"}, {1, "<%Tan=0.5>","tan(x)を計算", "Calculates the tan(x)"}, {1, "<%ArcTan=0.5>","arc-tan(x)を計算", "Calculates the arc-tan(x)"}, {1, "<%Cond=IsSQ>","条件命令のテスト結果(0-FALSE, 1-TRUE)", "Test result of condition command (0-FALSE, 1-TRUE)"}, {1, "<%ListSpeed=15.625,31.25,62.5,93.75,125.0,250.0>","Speedボックスのリストを設定", "Set list of Speed box"}, {1, "<%ListCarrier=500,800,1000,1200,1500,1750,2000,2210>","Carrierボックスのリストを設定", "Set list of Carrier box"}, {1, "<%ListRST=599,579,559,449,339>","RSTボックスのリストを設定", "Set list of RST box"}, {1, "<%ListLogFreq=1.8,3.5,7,10,14,18,21,24,28,50,144,430,1200>","ログ周波数ボックスのリストを設定", "Set list of Log-FREQ box"}, {1, "<%SetCaptureLimit>","文字列捕獲の検索範囲を設定", "Set the limit of the capturing range"}, {1, "<%ClearCaptureLimit>","文字列捕獲の検索範囲をクリア", "Clear the limit of the capturing range"}, {1, "<%Font>","受信画面のフォントパラメータ(Name, Size, Charset)", "Font parameters of the RX window (Name, Size, Charset)"}, {1, "<%Font=,14,>","受信/送信画面のフォントを設定(=Name, Size, Charset)", "Sets font into the TX/RX window (=Name, Size, Charset)"}, {1, "<%SetFocus>","送信画面にキーボードフォーカスを設定する", "Sets keyboard focus to the TX window"}, {1, "<%Folder>","MMVARIのフォルダ", "MMVARI's folder"}, {1, "<%AddMenu=E&X,Caption&1,OnCaption1Click>","拡張メニューの追加 (=Name,Caption,Procedure,Arg...)", "Add extension menu (=Name,Caption,Procedure,Arg...)"}, {1, "<%InsertMenu=&H,&P,Caption&1, OnCaption1Click>","拡張メニューの挿入 (=Name,InsPos,Caption,Procedure,Arg...)", "Insert extension menu (=Name,InsPos,Caption,Procedure,Arg...)"}, {1, "<%ShowMenu=&F, ONOFF>","メニューの表示 (=Name...,ON/OFF/ONOFF)", "Show the menu (=Name...,ON/OFF/ONOFF)"}, {1, "<%EnableMenu=&F, ONOFF>","メニューの許可 (=Name...,ON/OFF/ONOFF)", "Enable the menu (=Name...,ON/OFF/ONOFF)"}, {1, "<%ShortCut=&V, &C, &1, Ctrl+1>","メニューにショートカットを設定 (=Name...,Key)", "Set menu short cut (=Name...,Key)"}, {1, "<%CheckMenu=&H, &P, ONOFF>","メニューにチェックの付ける (=Name...,ON/OFF/ONOFF)", "Set menu check (=Name...,ON/OFF/ONOFF)"}, {1, "<%DeleteMenu=&X>","メニューを削除 (=Name...)", "Delete menu (=Name...)"}, {1, "<%DoMenu=&V,&C,&1>","メニューを実行 (=Name...)", "Execute the menu (=Name...)"}, {1, "<%DoButton=FFT>","ボタンをクリックする", "Click the button"}, {1, "<%ShowHTML=home>","HTML/ウェーブサイトを表示", "Show html or Web site"}, {1, "<%SendMessage=PSKGNRFUNC,0,1>","ウインドウメッセージの送信 (=Name, wParam, lParam)", "Send window message (=Name, wParam, lParam)"}, // {1, "<%SendMessage=this,16,0,0>","ウインドウメッセージの送信 (this, uMsg, wParam, lParam)", "Send window message (this, uMsg, wParam, lParam)"}, // {1, "<%CallDLL=QRZ.DLL,FuncName,<%HisCall>>","DLLファンクションの呼び出し", "Call the function in the DLL"}, {1, "<%Memory>","メモリ状態(Load[%],Total[MB],Free[MB])", "Memory status(Load[%],Total[MB],Free[MB])"}, {1, "<%BuffSize=4096>","マクロバッファの最小のサイズを設定(512-65536)", "Set minimum buffer size for Macro function (512-65536)"}, {1, "<%EOF>","定義の終了", "End of the macro"}, {0, NULL, NULL}, }; #if AN(mackeycom) >= MACLISTMAX #error macro key over follow #endif MACKEY condcom[]={ {1, "IsCall","Callに文字が存在する時", "Letters exists in the Call-box"}, {1, "IsName","Nameに文字が存在する時", "Letters exists in the Name-box"}, {1, "IsHisRST","Hisに文字が存在する時", "Letters exists in the His-box"}, {1, "IsMyRST","Myに文字が存在する時", "Letters exists in the My-box"}, {1, "IsQTH","QTHに文字が存在する時", "Letters exists in the QTH-box"}, {1, "IsNote","Noteに文字が存在する時", "Letters exists in the Note-box"}, {1, "IsLocal","同じエンティティの時", "Same entity (country)"}, {1, "IsQSO","QSOボタンを押している時", "QSO button down"}, {1, "IsDupe","重複QSOの場合", "Is dupe QSO?"}, {1, "IsAFC","AFCがONの時", "Is AFC ON?"}, {1, "IsNET","NETがONの時", "Is NET ON?"}, {1, "IsTX","送信中の時", "Is transmitting?"}, {1, "IsPTT","PTTがONの時", "Is PTT ON?"}, {1, "IsSQ","スケルチが開いている時", "Is Squelch open?"}, {1, "IsTone","シングルトーン送信中の時", "Is single tone transmitting?"}, {1, "IsTXEmpty","未送信文字が存在しない時", "Letters do not exist in the TX window"}, {1, "IsRXScroll","受信画面がスクロール中の時", "Is RX window scrolling?"}, {1, "IsRepeat","マクロが繰り返し中の時", "Is the macro repeating?"}, {1, "IsIME","IMEがONの時", "Is IME ON?"}, {1, "IsPlaying","サウンド再生中の時", "Is sound playing?"}, {1, "IsFileSending","ファイル送信中の時", "Is file sending?"}, {1, "IsRecording","サウンド録音中の時", "Is sound recording?"}, {1, "IsFile(test.txt)","ファイルが存在する時", "File exists"}, {1, "IsDefined(Name)","文字列変数が存在する時", "Variable strings exists"}, {1, "IsMBCS(<%HisName>)","文字列にMBCSが含まれる時", "Is string including MBCS?"}, {1, "IsAlpha(<%MyNR>)","文字列がアルファベットの時", "Is string alphabet?"}, {1, "IsNumber(<%MyNR>)","文字列が数字の時", "Is string number?"}, {1, "IsUOS","RTTYのUOSがONの時", "Is UOS active in RTTY?"}, {1, "IsRadioLSB","RigがLSBモードの時", "Is LSB of the radio?"}, {1, "IsCaptureText(CQ)","受信テキストに文字列が存在する時", "Does string exist in the received text?"}, {1, "IsOnTimer","OnTimerマクロを実行中の時", "Is OnTimer executing?"}, {1, "IsIdle","アイドル状態の時", "Is idle?"}, {1, "IsEnglish","英語モードの時", "Is English mode running?"}, {1, "IsMfskCenter","mfskが中心周波数合わせの時", "Is center FREQ handling in mfsk?"}, {1, "IsMfskMetricSq","mfskがメトリックスケルチの時", "Is squelch metric in mfsk?"}, {1, "Is1stCR","送信開始時に自動でCR/LF出力する時", "Is CR/LF sending automatically at the beginning?"}, {1, "IsPlayBack","サウンドプレーバック機能がONの時", "Is sound play back enabled?"}, {1, "IsCodeMM","MMVARIコード(VariJA, VariHL,...)の時", "Is MMVARI code (VariJA, VariHL,...)?"}, {1, "IsCall(<%CLICK$>)","文字列がコールサインの時", "Is the strings call sign?"}, {1, "IsRST(<%CLICK$>)","文字列がRSTの時", "Is the strings RST?"}, {1, "IsMenu(&H, &U)","メニューが存在する時", "Menu exists?"}, {1, "IsMenuEnabled(&H, &U)","メニューが許可されている時", "Is the menu enabled?"}, {1, "IsMenuChecked(&H, &U)","メニューがチェックされている時", "Is the menu checked?"}, {1, "IsMenuVisible(&H, &U)","メニューが表示されている時", "Is the menu visible?"}, {1, "IsButton(QSO)","ボタンが存在する時", "Button exists?"}, {1, "IsButtonEnabled(QSO)","ボタンが許可されている時", "Is the button enabled?"}, {1, "IsButtonDown(QSO)","ボタンが押されている時", "Is the button down?"}, {1, "ValFreq>=144","ログ周波数の比較", "Compare logging FREQ"}, {1, "ValBaud==31.25","伝送速度(Bps)の比較", "Compare speed (baudrate)"}, {1, "ValCarrierRX<1500","受信キャリア周波数の比較", "Compare RX carrier FREQ"}, {1, "ValCarrierTX<1500","送信キャリア周波数の比較", "Compare TX carrier FREQ"}, {1, "ValPage!=1","送信画面ページの比較", "Compare TX window page"}, {1, "ValTimeLocal<1200","時刻(Local)の比較", "Compare Local time"}, {1, "ValTimeUTC>=0900","時刻(UTC)の比較", "Compare UTC time"}, {1, "ValDateLocal>=0801","日付(Local)の比較", "Compare Local date"}, {1, "ValDateUTC<0401","日付(UTC)の比較", "Compare UTC date"}, {1, "ValScope","スコープの状態を比較(FFT=0, WF=1, SYNC=2)", "Compare condition of the scope (FFT=0, WF=1, SYNC=2)"}, {1, "ValMacro(<%VER>)>="VERNO,"マクロ展開文字列の数値を比較", "Compare value of the Macro"}, {1, "ValMenu","選択された<%Menu=...>のインデックス番号を比較", "Compare value of the selected <%Menu=...> index"}, {1, "StrCall==JA3QRZ","コールサインの比較", "Compare his callsign"}, {1, "StrMode==GMSK","モードの比較", "Compare current Mode"}, {1, "StrBand==40m","ログ周波数(バンド)の比較", "Compare logging BAND"}, {1, "StrHisRST==599","HisRSTの比較", "Compare HisRST"}, {1, "StrMyRST==599","MyRSTの比較", "Compare MyRST"}, {1, "StrNote==???","Noteの比較", "Compare Note"}, {1, "StrEntity==JA","エンティティの比較", "Compare the entity of his callsign"}, {1, "StrContinent==AS","大陸の比較", "Compare the continent of his callsign"}, {1, "StrVARITYPE==JA","VARICODE種別(JA/HL/BV/BY/STD)の比較", "Compare type of the VARICODE(JA/HL/BV/BY/STD)"}, {1, "StrPLATFORM==XP","Windowsプラットフォーム(95/98/98SE/ME/NT/2000/XP)の比較", "Compare platform of the Windows(95/98/98SE/ME/NT/2000/XP)"}, {1, "StrMacro(<%VER>)=="VERNO,"マクロ展開文字列の比較", "Compare strings of the Macro"}, {1, "#else","残りのすべてで真", "Rest of all"}, {1, "#endif","条件ブロックを終了", "Exit condition block"}, {1, "#macro <%TX>","マクロコマンドをパス1で実行", "Execute macro at the pass 1"}, {1, "#proc Name","プロシジャーの登録 (Name, Dummy...)", "Register procedure (Name, Dummy...)"}, {1, "#endp","プロシジャーの登録の終了", "End of the procedure"}, {1, "#repeat 3","#repeat 〜 #endpまでを繰り返し", "Repeat the block #repeat to #endp"}, {1, "#define Name Strings","文字列を名前変数に定義", "Define variable strings to the name"}, {1, "#DEFINE Name Strings","文字列を名前変数に定義(INIフィアルに保存)", "Define variable strings to the name (Save to INI file)"}, {1, "#DELETE Name", "名前変数またはプロシジャーを削除", "Delete variable string or procedure"}, {1, "#DELETEALL", "すべての名前変数を削除", "Delete all variable strings and procedures"}, {1, "#exit","マクロ文の終了(パス1で終了)", "Exit macro at the pass 1"}, {1, "#comment","コメント行", "Comment line"}, {0, NULL, NULL}, }; static int g_Pos[2]={0,0}; static int g_TopPos[2]={0,0}; static POINT g_xySave;//={0,0}; //--------------------------------------------------------------------- __fastcall TMacroKeyDlg::TMacroKeyDlg(TComponent* AOwner) : TForm(AOwner) { g_xySave.x = 0; g_xySave.y = 0; m_pDlg = NULL; FormStyle = ((TForm *)AOwner)->FormStyle; Font->Name = ((TForm *)AOwner)->Font->Name; Font->Charset = ((TForm *)AOwner)->Font->Charset; if( sys.m_MsgEng ){ // Caption = "Choose macro"; CancelBtn->Caption = "Close"; SBIns->Caption = "Insert"; SBSpace->Caption = "Space"; SBCR->Caption = "Enter"; SBUndo->Caption = "Undo"; SBFind->Caption = "Find"; SBPrint->Caption = "Print"; SBIns->Hint = "Insert current command"; SBSpace->Hint = "Insert 'Space'"; SBCR->Hint = "Insert 'Enter'"; SBUndo->Hint = "Cancel of the operation"; SBFind->Hint = "Find strings"; SBPrint->Hint = "Print the list (Right click for create file)"; Grid->Hint = "Insert command for double click (Sort - click the title)"; } OnWave(); m_Type = 0; m_fSort = FALSE; m_fSortType = 0; m_fDisDblClick = FALSE; } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::FormDestroy(TObject *Sender) { g_xySave.x = Left; g_xySave.y = Top; g_Pos[m_Type] = Grid->Row; g_TopPos[m_Type] = Grid->TopRow; } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::UpdateUI(int row) { int r = row - 1; if( r >= 0 ){ SBIns->Enabled = TRUE; } else { SBIns->Enabled = FALSE; } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::UpdateUndo(BOOL undo) { SBUndo->Enabled = undo; } //--------------------------------------------------------------------- int __fastcall TMacroKeyDlg::AddMacKey(MACKEY *mp, int n) { for( ; mp->r; mp++){ if( (mp->r == 2) && sys.m_MsgEng ) continue; if( (mp->r == 3) && !sys.m_MsgEng ) continue; mackey[n] = *mp; n++; } return n; } //--------------------------------------------------------------------- void __fastcall TMacroKeyDlg::Execute(int x, int y, TMacEditDlg *pDlg, int type) { m_fSort = FALSE; m_Type = type; Grid->RowCount = AddMacKey(type ? condcom : mackeycom, 0) + 1; if( (g_Pos[type] > 0) && (g_Pos[type] < Grid->RowCount) ){ Grid->Row = g_Pos[type]; Grid->TopRow = g_TopPos[type]; } UpdateUI(Grid->Row); if( type ){ Caption = sys.m_MsgEng ? "Choose Condition command (pass 1 command)" : "条件命令(パス1命令)の選択"; } else { Caption = sys.m_MsgEng ? "Choose Macro command (pass 2 command)" : "マクロコマンド(パス2命令)の選択"; } SBSpace->Enabled = !type; SBCR->Enabled = !type; #if DEBUG char bf[256]; sprintf(bf, "%s (Commands=%u/%u)", Caption.c_str(), Grid->RowCount-1, MACLISTMAX); Caption = bf; #endif m_pDlg = pDlg; if( (x >= 0) && (y >= 0) ){ if( g_xySave.x && g_xySave.y ){ Left = g_xySave.x; Top = g_xySave.y; } else { Left = x; Top = y; } } Visible = TRUE; OnWave(); Grid->SetFocus(); } //--------------------------------------------------------------------- LPCSTR __fastcall TMacroKeyDlg::GetComment(const MACKEY *mp) { LPCSTR pCom; if( sys.m_MsgEng ){ pCom = mp->pEng; if( pCom == NULL ){ pCom = mp->pJpn; } } else { pCom = mp->pJpn; } return pCom; } //--------------------------------------------------------------------- void __fastcall TMacroKeyDlg::GridDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { char bf[256]; Grid->Canvas->Font->Height = -12; Grid->Canvas->FillRect(Rect); int X = Rect.Left + 4; int Y = Rect.Top + 2; if( Row ){ Row--; bf[0] = 0; switch(Col){ case 0: OnWave(); strcpy(bf, mackey[Row].pKey); break; case 1: strcpy(bf, GetComment(&mackey[Row])); break; } Grid->Canvas->TextRect(Rect, X, Y, bf); } else { // タイトル LPCSTR _tt[]={ "Commands","Comments", }; Grid->Canvas->TextRect(Rect, X, Y, _tt[Col]); } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::GridSelectCell(TObject *Sender, int Col, int Row, bool &CanSelect) { UpdateUI(Row); } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::CancelBtnClick(TObject *Sender) { g_Pos[m_Type] = Grid->Row; g_TopPos[m_Type] = Grid->TopRow; Visible = FALSE; } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBInsClick(TObject *Sender) { if( m_pDlg ){ if( Grid->Row ){ LPCSTR p = mackey[Grid->Row - 1].pKey; if( m_Type ){ char bf[256]; sprintf(bf, (*p == '#') ? "%s\r" : "#if %s\r", p); p = bf; } m_pDlg->OnInsertText(p); } } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBSpaceClick(TObject *Sender) { if( m_pDlg ){ m_pDlg->OnInsertText(" "); } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBCRClick(TObject *Sender) { if( m_pDlg ){ m_pDlg->OnInsertText("\r"); } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBUndoClick(TObject *Sender) { if( m_pDlg ){ m_pDlg->Undo(); } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::GridMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if( Y < Grid->DefaultRowHeight ){ if( Button == mbLeft ){ int type = (X <= Grid->ColWidths[0]) ? 0 : 1; if( type == m_fSortType ){ m_fSort = m_fSort ? FALSE : TRUE; } else { m_fSort = TRUE; } m_fSortType = type; Sort(m_fSort, type); Grid->Invalidate(); m_fDisDblClick = TRUE; } } else { m_fDisDblClick = FALSE; } } //--------------------------------------------------------------------------- static int _USERENTRY _cmpK(const void *s, const void *t) { const MACKEY *sp = (const MACKEY *)s; const MACKEY *tp = (const MACKEY *)t; return strcmpi(sp->pKey, tp->pKey); } //--------------------------------------------------------------------------- static int _USERENTRY _cmpC(const void *s, const void *t) { const MACKEY *sp = (const MACKEY *)s; const MACKEY *tp = (const MACKEY *)t; LPCSTR pComS, pComT; if( sys.m_MsgEng ){ pComS = sp->pEng; if( pComS == NULL ) pComS = sp->pJpn; pComT = tp->pEng; if( pComT == NULL ) pComT = tp->pJpn; } else { pComS = sp->pJpn; pComT = tp->pJpn; } return strcmpi(pComS, pComT); } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::Sort(BOOL fSort, int type) { if( fSort ){ qsort(mackey, Grid->RowCount - 1, sizeof(MACKEY), type ? _cmpC : _cmpK); } else { AddMacKey(m_Type ? condcom : mackeycom, 0); } } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::GridDblClick(TObject *Sender) { if( m_fDisDblClick ){ m_fDisDblClick = FALSE; return; } SBInsClick(NULL); } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::FormKeyPress(TObject *Sender, char &Key) { if( isalpha(Key) ){ int c = toupper(Key); if( !m_fSort || m_fSortType ){ m_fSort = TRUE; m_fSortType = 0; Sort(m_fSort, m_fSortType); } MACKEY *mp = mackey; LPCSTR p; for( int i = 0; i < Grid->RowCount - 1; i++, mp++ ){ p = mp->pKey; if( p ){ if( *p == '<' ) p++; if( *p == '%' ) p++; if( toupper(*p) == c ){ int top = i; if( top < 1 ) top = 1; Grid->TopRow = top; Grid->Row = i + 1; break; } } } Grid->Invalidate(); } } //--------------------------------------------------------------------------- static BOOL __fastcall jstrstr(LPCSTR s, LPCSTR p) { CMBCS *pM = &MainVARI->m_RxSet[0].m_MBCS; int l = strlen(p); for( ; *s; s++ ){ if( !strnicmp(s, p, l) ) return TRUE; if( pM->IsLead(BYTE(*s)) ) s++; if( !*s ) break; } return FALSE; } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBFindClick(TObject *Sender) { AnsiString as; if( InputMB("MMVARI", sys.m_MsgEng ? "Find string" : "検索文字列", as) ){ if( as.IsEmpty() ) return; MACKEY mac[MACLISTMAX]; memset(mac, 0, sizeof(mac)); int N = 0; MACKEY *wp = mac; MACKEY *mp = mackey; LPCSTR p; int i; for( i = 0; i < Grid->RowCount - 1; i++, mp++ ){ p = mp->pKey; if( p ){ if( jstrstr(p, as.c_str()) ){ memcpy(wp, mp, sizeof(MACKEY)), wp++; N++; } else { p = GetComment(mp); if( p && jstrstr(p, as.c_str()) ){ memcpy(wp, mp, sizeof(MACKEY)), wp++; N++; } } } } mp = mackey; for( i = 0; i < Grid->RowCount - 1; i++, mp++ ){ BOOL f = FALSE; MACKEY *rp = mac; for( int j = 0; j < N; j++, rp++ ){ if( !memcmp(rp, mp, sizeof(MACKEY)) ){ f = TRUE; break; } } if( !f ){ memcpy(wp, mp, sizeof(MACKEY)), wp++; N++; } } memcpy(mackey, mac, sizeof(mackey)); m_fSort = FALSE; Grid->TopRow = 1; Grid->Row = 1; Grid->Invalidate(); } } //--------------------------------------------------------------------------- // リストの印刷 void __fastcall TMacroKeyDlg::SBPrintClick(TObject *Sender) { CWaitCursor w; #if 1 // 設定ダイアログ TPrinterSetupDialog *pBox = new TPrinterSetupDialog(this); #else // 印刷ダイアログ TPrintDialog *pBox = new TPrintDialog(this); pBox->Options.Clear(); #endif OnWave(); if( pBox->Execute() ){ OnWave(); char bf[512]; Printer()->Title = VERTTL2; Printer()->BeginDoc(); int kcount = Grid->RowCount - 1; // 項目の数 int pyw = Printer()->PageHeight; // 用紙の縦幅 int pxw = Printer()->PageWidth; // 用紙の横幅 int xoff = pxw * 5 / 100; // 左右のマージン int yoff = pyw * 5 / 100; // 上下のマージン int yw = pyw - (yoff*2); // 印刷領域の縦幅 int xw = pxw - (xoff*2); // 印刷領域の横幅 int pline; if( yw > xw ){ // 縦長 pline = 50; } else { // 横長 pline = 25; } int lyw = yw / (pline + 2); // 1行あたりのピクセル数 yw = lyw * (pline + 2); TCanvas *pCanvas = Printer()->Canvas; pCanvas->Font->Name = Font->Name; pCanvas->Font->Charset = Font->Charset; pCanvas->Font->Height = -(lyw * 8 / 10); pCanvas->Font->Color = clBlack; pCanvas->Pen->Color = clBlack; int pagemax = (kcount + pline - 1) / pline; // ページの数 TRect rc; // 表の枠の範囲 rc.Left = xoff; rc.Top = yoff; rc.Right = rc.Left + xw; rc.Bottom = rc.Top + yw; int xt = (lyw * 1) / 10; // 文字のオフセット int yt = (lyw * 1) / 10; // 文字のオフセット if( !xt ) xt++; if( !yt ) yt++; int xp = ((rc.Right - rc.Left) * 4 / 10); // 垂直分割線の位置 const MACKEY *mp = mackey; int n = 0; for( int i = 1; i <= pagemax; i++ ){ OnWave(); int y = rc.Top; for( int j = 0; j < (pline+2); j++, y += lyw ){ switch(j){ case 0: // タイトルの描画 sprintf(bf, "%s - " VERTTL2, m_Type ? "Conditions" : "Macros"); pCanvas->TextOut(rc.Left, y, bf); sprintf(bf, "%u/%u", i, pagemax); pCanvas->TextOut(rc.Right - pCanvas->TextWidth(bf), y, bf); break; case 1: // 項目名の描画 pCanvas->TextOut(rc.Left+xt, y+yt, sys.m_MsgEng ? "Commands" : "コマンド"); pCanvas->TextOut(rc.Left+xp+xt, y+yt, sys.m_MsgEng ? "Comments" : "機能/動作"); break; default: // 各項目の描画 if( n < kcount ){ pCanvas->TextOut(rc.Left + xt, y+yt, mp->pKey); pCanvas->TextOut(rc.Left + xp + xt, y+yt, GetComment(mp)); n++; mp++; } break; } pCanvas->MoveTo(rc.Left, y+lyw); pCanvas->LineTo(rc.Right, y+lyw); } y = rc.Top + lyw; pCanvas->MoveTo(rc.Left, y); pCanvas->LineTo(rc.Right, y); pCanvas->LineTo(rc.Right, rc.Bottom); pCanvas->LineTo(rc.Left, rc.Bottom); pCanvas->LineTo(rc.Left, y); pCanvas->MoveTo(rc.Left + xp, y); pCanvas->LineTo(rc.Left + xp, rc.Bottom); if( i < pagemax ) Printer()->NewPage(); } Printer()->EndDoc(); OnWave(); } delete pBox; } //--------------------------------------------------------------------------- void __fastcall TMacroKeyDlg::SBPrintMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if( Button == mbRight ){ TSaveDialog *pBox = new TSaveDialog(this); pBox->Options << ofOverwritePrompt; pBox->Options << ofNoReadOnlyReturn; if( sys.m_MsgEng ){ pBox->Title = "Create list file"; pBox->Filter = "Text Files(*.txt)|*.txt|"; } else { pBox->Title = "一覧表ファイルを作成"; pBox->Filter = "テキストファイル(*.txt)|*.txt|"; } pBox->FileName = "Temp"; pBox->DefaultExt = "txt"; pBox->InitialDir = sys.m_TextDir; OnWave(); if( pBox->Execute() == TRUE ){ OnWave(); FILE *fp = fopen(AnsiString(pBox->FileName).c_str(), "wt"); //JA7UDE 0428 if( fp ){ const MACKEY *mp = mackey; for( int i = 1; i < Grid->RowCount; i++, mp++ ){ fprintf(fp, "%d\t%s\t%s\n", i, mp->pKey, GetComment(mp)); } fclose(fp); } } delete pBox; } } //---------------------------------------------------------------------------