#struct code #strict #include #noprompt '************************************************** ' ' モールス符号化ソフト 2.0.0.0 ' ' (c)2003 Orios(Isao Mori),All right reserved. '************************************************** '======================================== ' エラー発生時の設定 '======================================== On Error Goto *ErrorHappen '======================================== ' 変数の宣言 '======================================== Dim NewFile As Long Dim FileOpen As Long Dim FileSave As Long Dim FileRewrite As Long Dim FileTxtSave As Long Dim FileWavSave As Long Dim PrgEnd As Long Dim Undo As Long Dim Cut As Long Dim Copy As Long Dim Paste As Long Dim Delete As Long Dim Search As Long Dim Substitute As Long Dim Option As Long Dim Help As Long Dim Version As Long Dim PrintOut As Long Dim TxtLong As Long Dim TxtUnit As Integer Dim SoundLong As Double Dim SoundUnit As Integer Dim SoundPitch As Double Dim LastText$ As String Dim Code$(49) As String Dim IniPos$ As String Dim IniData$ As String Dim hMainWnd As Long Dim hEditWnd As Long Dim hFileMenu As Long Dim hEditMenu As Long Dim hHelpMenu As Long Dim hMenu As Long Dim lpofn As OPENFILENAME Dim FLAG1 As Integer Dim OpenFileName$ As String Dim Text$ As String Dim hThisWnd As Long Dim Message As Long Dim wParam As Long Dim lParam As Long Dim EditWidth As Long Dim EditHeight As Long Dim MaxBytes As Long Dim UserAns As Long Dim Clip1$ As String Dim FLAG3 As Long Dim NowFileName$ As String Dim Check$ As String Dim WavData$ As String Dim J As Long Dim Letter As Byte Dim I As Long Dim WavSize As Long Dim WavHeader$ As String Dim DataSize As Long Dim NowTextLong As Long Dim TxtData$ As String Dim hSearchWnd As Long Dim hSBack As Long Dim hLabel1 As Long Dim hSearchWord As Long Dim hGoSearch As Long Dim SWPoint As Long Dim SearchedString$ As String Dim SearchWord$ As String Dim hSubstituteWnd As Long Dim hSBBack As Long Dim hSubstitutedWord As Long Dim hSubstituteWord As Long Dim hGoNextSearch As Long Dim hGoSubstitute As Long Dim hAllSubstitute As Long Dim SubstitutedString$ As String Dim SubstituteWord$ As String Dim SubstitutedWord$ As String Dim hOptionWnd As Long Dim hOBack As Long Dim hGroup1 As Long Dim hGroup2 As Long Dim hTLimit As Long Dim hTUnit As Long Dim hLabel2 As Long Dim SLong As Long Dim SUnit As Long Dim hLabel4 As Long Dim hSPitch As Long Dim hLabel5 As Long Dim hOKButton As Long Dim hCancelButton As Long Dim NTxtLong$ As String Dim NSoundLong$ As String Dim NSoundPitch$ As String Dim hVersionWnd As Long Dim hVBack As Long Dim hLabel3 As Long Dim hErrorWnd As Long Dim PrintThing$ As String Dim hPrintSet As Long Dim PaperSize As Long Dim hHeight As Long Dim hWidth As Long Dim LimitW As Long Dim LimitH As Long Dim LineCount As Long Dim CutPoint As Long Dim OneLine$ As String Dim PrintLine$ As String Dim FileMenu As Long Dim EditMenu As Long Dim HelpMenu As Long Dim CanUndo As Integer Dim Bunsho$ As String Dim hSLong As Long Dim hSUnit As Long Dim NewIniData$ As String Dim hWarning As Long Dim hBackGround As Long Dim hPaperSize As Long Dim hLabel6 As Long Dim PaperHeight$ As String Dim PaperWidth$ As String Dim hFile As Long Dim HowRead As Long Dim Plus As Integer Dim hCapLitCheck As Long Dim Checked As Long Dim Changed1 As Byte Dim Changed2 As Byte Dim Changed As Byte Dim hNotice As Long Dim FileName$ As String Dim ChooseAll As Long Dim MorseOption As Long Dim SetFont As Long Dim hOptionMenu As Long Dim lpcf As CHOOSEFONT Dim LogFont As LOGFONT Dim hFont As Long Dim FontName As String Dim hDC As Long '======================================== ' IDの設定 '======================================== NewFile=1001 FileOpen=1002 FileSave=1003 FileRewrite=1004 FileTxtSave=1005 FileWavSave=1006 PrgEnd=1007 Undo=1008 Cut=1009 Copy=1010 Paste=1011 Delete=1012 Search=1013 Substitute=1014 Option=1015 Help=1016 Version=1017 PrintOut=1018 ChooseAll=1019 MorseOption=1020 SetFont=1021 '======================================== ' 変数の初期設定 '======================================== TxtLong=256 TxtUnit=0 SoundLong=0.1 SoundUnit=0 SoundPitch=400 LastText$="" FLAG1=0 lpofn.lStructSize=76 lpofn.hwndOwner=hMainWnd lpofn.lpstrFilter="テキストファイル(*.txt)"+Chr$(0)+"*.txt"+Chr$(0)+"全てのファイル(*.*)"+Chr$(0)+"*.*"+Chr$(0)+Chr$(0) lpofn.nFilterIndex=1 lpofn.lpstrFile=String$(MAX_PATH,Chr$(0)) lpofn.nMaxFile=260 lpofn.lpstrFileTitle=String$(MAX_PATH,Chr$(0)) lpofn.nMaxFileTitle=260 lpofn.Flags=OFN_HIDEREADONLY lpofn.lpstrDefExt="txt" LogFont.lfHeight=0 LogFont.lfWidth=0 LogFont.lfEscapement=0 LogFont.lfOrientation=0 LogFont.lfWeight=0 LogFont.lfItalic=0 LogFont.lfUnderline=0 LogFont.lfStrikeOut=0 LogFont.lfCharSet=DEFAULT_CHARSET LogFont.lfOutPrecision=OUT_DEFAULT_PRECIS LogFont.lfClipPrecision=CLIP_DEFAULT_PRECIS LogFont.lfQuality=DEFAULT_QUALITY LogFont.lfPitchAndFamily=FIXED_PITCH LogFont.lfFaceName(0)=Asc("F") LogFont.lfFaceName(1)=Asc("i") LogFont.lfFaceName(2)=Asc("x") LogFont.lfFaceName(3)=Asc("e") LogFont.lfFaceName(4)=Asc("d") LogFont.lfFaceName(5)=Asc("S") LogFont.lfFaceName(6)=Asc("y") LogFont.lfFaceName(7)=Asc("s") LogFont.lfFaceName(8)=NULL lpcf.lStructSize=60 lpcf.hwndOwner=hMainWnd lpcf.iPointSize=140 lpcf.lpLogFont=VarPtr(LogFont) lpcf.Flags=CF_FORCEFONTEXIST or CF_SCREENFONTS or CF_NOVERTFONTS or CF_INITTOLOGFONTSTRUCT lpcf.rgbColors=-RGB(0,0,0) '======================================== ' 設定ファイルの内容の読み出し '======================================== IniPos$="option.ini" hFile=CreateFile(IniPos$,GENERIC_READ,0,ByVal 0,OPEN_EXISTING,FILE_FLAG_RANDOM_ACCESS,0) If hFile<>INVALID_HANDLE_VALUE Then IniData$=String$(8,Chr$(0)) ReadFile(hFile,IniData$,8,HowRead,ByVal 0) CloseHandle(hFile) TxtLong=Asc(Mid$(IniData$,2,1))*256+Asc(Mid$(IniData$,1,1)) TxtUnit=Asc(Mid$(IniData$,3,1)) SoundLong=(Asc(Mid$(IniData$,5,1))*256+Asc(Mid$(IniData$,4,1)))/1000 SoundUnit=Asc(Mid$(IniData$,6,1)) SoundPitch=Asc(Mid$(IniData$,8,1))*256+Asc(Mid$(IniData$,7,1)) EndIf '======================================== ' モールス符号の設定 '======================================== Data "10111000","111010101000","11101011101000","1110101000","1000","101011101000","111011101000","1010101000","101000","1011101110111000","111010111000","101110101000","1110111000" Data "11101000","11101110111000","10111011101000","1110111010111000","1011101000","10101000","111000","1010111000","101010111000","101110111000","11101010111000","1110101110111000","11101110101000" Data "1110111011101110111000","10111011101110111000","101011101110111000","1010101110111000","10101010111000","101010101000","11101010101000","1110111010101000","111011101110101000","11101110111011101000" Data "10111010111010111000","1110111010101110111000","11101110111010101000","101011101110101000","1011101110111011101000","1110101011101000","111010111011101000","1110101110111010111000","101110101011101000","111010101010111000","1011101011101000","1110101010111000","1011101011101000","0000" For I=0 To 49 Read Code$(I) Next '======================================== ' ウィンドウの設定 '======================================== Window hMainWnd,OwnerWnd(),-1,-1,-1,-1,"モールス符号化ソフト2.0.0.0",WS_OVERLAPPEDWINDOW,"NORMAL",,,WS_EX_APPWINDOW or WS_EX_ACCEPTFILES or WS_EX_OVERLAPPEDWINDOW Window hEditWnd,hMainWnd,0,0,0,0,"",WS_CHILD or WS_VISIBLE or WS_VSCROLL or WS_HSCROLL or ES_WANTRETURN or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,"EDIT" '======================================== ' メニューの設定 '======================================== hFileMenu=CreateMenu() InsertMenuItem hFileMenu,0,MF_BYPOSITION,"新規作成(&N)",NewFile,0,MFS_ENABLED InsertMenuItem hFileMenu,1,MF_BYPOSITION,"ファイルを開く(&O)",FileOpen,0,MFS_ENABLED InsertMenuItem hFileMenu,2,MF_BYPOSITION,"名前を付けて保存(&A)",FileSave,0,MFS_ENABLED InsertMenuItem hFileMenu,3,MF_BYPOSITION,"上書き保存(&S)",FileRewrite,0,MFS_ENABLED InsertMenuItem hFileMenu,4,MF_BYPOSITION InsertMenuItem hFileMenu,5,MF_BYPOSITION,"モールス符号化してTXT保存(&T)",FileTxtSave,0,MFS_ENABLED InsertMenuItem hFileMenu,6,MF_BYPOSITION,"モールス符号化してWAV保存(&W)",FileWavSave,0,MFS_ENABLED InsertMenuItem hFileMenu,7,MF_BYPOSITION InsertMenuItem hFileMenu,8,MF_BYPOSITION,"印刷(&P)",PrintOut,0,MFS_ENABLED InsertMenuItem hFileMenu,9,MF_BYPOSITION InsertMenuItem hFileMenu,10,MF_BYPOSITION,"終了(&X)",PrgEnd,0,MFS_ENABLED hEditMenu=CreateMenu() InsertMenuItem hEditMenu,0,MF_BYPOSITION,"元に戻す(&U)",Undo,0,MFS_ENABLED InsertMenuItem hEditMenu,1,MF_BYPOSITION InsertMenuItem hEditMenu,2,MF_BYPOSITION,"切り取り(&T)",Cut,0,MFS_ENABLED InsertMenuItem hEditMenu,3,MF_BYPOSITION,"コピー(&C)",Copy,0,MFS_ENABLED InsertMenuItem hEditMenu,4,MF_BYPOSITION,"貼り付け(&P)",Paste,0,MFS_ENABLED InsertMenuItem hEditMenu,5,MF_BYPOSITION,"削除(&D)",Delete,0,MFS_ENABLED InsertMenuItem hEditMenu,6,MF_BYPOSITION InsertMenuItem hEditMenu,7,MF_BYPOSITION,"すべて選択(&A)",ChooseAll,0,MFS_ENABLED InsertMenuItem hEditMenu,8,MF_BYPOSITION InsertMenuItem hEditMenu,9,MF_BYPOSITION,"検索(&F)",Search,0,MFS_ENABLED InsertMenuItem hEditMenu,10,MF_BYPOSITION,"置換(&S)",Substitute,0,MFS_ENABLED hOptionMenu=CreateMenu() InsertMenuItem hOptionMenu,0,MF_BYPOSITION,"モールス符号化オプション(&M)",MorseOption,0,MFS_ENABLED InsertMenuItem hOptionMenu,1,MF_BYPOSITION,"フォントの設定(&F)",SetFont,0,MFS_ENABLED hHelpMenu=CreateMenu() InsertMenuItem hHelpMenu,0,MF_BYPOSITION,"ヘルプ(&H)",Help,0,MFS_ENABLED InsertMenuItem hHelpMenu,1,MF_BYPOSITION InsertMenuItem hHelpMenu,2,MF_BYPOSITION,"バージョン情報(&V)",Version,0,MFS_ENABLED hMenu=CreateMenu() InsertMenuItem hMenu,0,MF_BYPOSITION,"ファイル(&F)",FileMenu,hFileMenu,MFS_ENABLED InsertMenuItem hMenu,1,MF_BYPOSITION,"編集(&E)",EditMenu,hEditMenu,MFS_ENABLED InsertMenuItem hMenu,2,MF_BYPOSITION,"オプション(&O)",Option,hOptionMenu,MFS_ENABLED InsertMenuItem hMenu,3,MF_BYPOSITION,"ヘルプ(&H)",HelpMenu,hHelpMenu,MFS_ENABLED SetMenu(hMainWnd,hMenu) '======================================== ' ウィンドウの表示 '======================================== ShowWnd hMainWnd,SW_SHOW '======================================== ' コマンドライン処理 '======================================== If CmdLine$<>"" Then OpenFileName$=Mid$(CmdLine$,2,Len(CmdLine$)-2) Open OpenFileName$ As #1 Field #1,Lof(#1) As Text$ Get #1,1 SendWndMsg hEditWnd,WM_SETTEXT,0,Text$ Close #1 FLAG1=1 EndIf '======================================== ' フォントの設定 '======================================== hDC=GetWindowDC(hEditWnd) With LogFont hFont=CreateFont(0,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH,"FixedSys") End With SendWndMsg hEditWnd,WM_SETFONT,hFont,0 '======================================== ' メッセージループ '======================================== While 1 'メッセージ受け取り GetWndMsg hThisWnd,Message,wParam,lParam 'プログラムの終了 If hThisWnd=hMainWnd And Message=WM_CLOSE Then GoSub *EndProgram EndIf 'ウィンドウサイズの変更 If Message=WM_SIZE Then EditWidth=LOWORD(lParam) EditHeight=HIWORD(lParam) WndPos hEditWnd,1,1,EditWidth,EditHeight EndIf 'メニューの処理 If Message=WM_COMMAND Then SelectCase LOWORD(wParam) '新規作成 Case NewFile SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ If LastText$<>Text$ Then MsgBox hWarning,"このファイルの内容は変更されています。この変更を保存しますか?","内容変更の確認",MB_YESNO or MB_ICONEXCLAMATION,UserAns If UserAns=IDYES Then GoSub *SaveFile EndIf EndIf FLAG1=0 SendWndMsg hEditWnd,WM_SETTEXT,0,"" LastText$="" 'ファイルを開く Case FileOpen SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ If LastText$<>Text$ Then MsgBox hWarning,"このファイルの内容は変更されています。この変更を保存しますか?","内容変更の確認",MB_YESNO or MB_ICONEXCLAMATION,UserAns If UserAns=IDYES Then GoSub *SaveFile EndIf EndIf GoSub *OpenFile '名前を付けて保存 Case FileSave GoSub *SaveFile '上書き保存 Case FileRewrite If FLAG1=0 Then GoSub *SaveFile Else GoSub *RewriteFile EndIf 'プログラムの終了 Case PrgEnd GoSub *EndProgram 'モールス符号化してWAV保存 Case FileWavSave GoSub *MakeMorseCodeWav 'モールス符号化してTXT保存 Case FileTxtSave GoSub *MakeMorseCodeTxt '元に戻す Case Undo SendWndMsg hEditWnd,WM_UNDO,0,0 '切り取り Case Cut SendWndMsg hEditWnd,WM_CUT,0,0 '貼り付け Case Paste SendWndMsg hEditWnd,WM_PASTE,0,0 'コピー Case Copy SendWndMsg hEditWnd,WM_COPY,0,0 '削除 Case Delete Clip1$=ClipStr$ SendWndMsg hEditWnd,WM_CUT,0,0 SetClipStr Clip1$ '検索 Case Search GoSub *Searching '置換 Case Substitute GoSub *Substitute 'モールス符号化オプション Case MorseOption GoSub *MorseOption 'フォント設定 Case SetFont FontName="" If ChooseFont(lpcf)=TRUE Then For I=0 to LF_FACESIZE-1 FontName=FontName+Chr$(LogFont.lfFaceName(I)) Next With LogFont hFont=CreateFont(.lfHeight,.lfWidth,.lfEscapement,.lfOrientation,.lfWeight,.lfItalic,.lfUnderline,.lfStrikeOut,.lfCharSet,.lfOutPrecision,.lfClipPrecision,.lfQuality,.lfPitchAndFamily,FontName) End With SendWndMsg hEditWnd,WM_SETFONT,hFont,0 SetTextColor(hDC,lpcf.rgbColors) EndIf 'ヘルプ Case Help GoSub *Help 'バージョン情報 Case Version GoSub *Version '印刷 Case PrintOut GoSub *PrintOut 'すべて選択 Case ChooseAll SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,EM_SETSEL,0,MaxBytes EndSelect EndIf '「元に戻す」の設定 SendWndMsg hEditWnd,EM_CANUNDO,0,0,CanUndo If CanUndo=0 Then EnableMenuItem(hEditMenu,0,MF_BYPOSITION or MF_GRAYED) Else EnableMenuItem(hEditMenu,0,MF_BYPOSITION or MF_ENABLED) EndIf '「切り取り」「貼り付け」「コピー」の設定 SendWndMsg hEditWnd,EM_GETSEL,wParam,lParam If wParam=lParam Then EnableMenuItem(hEditMenu,2,MF_BYPOSITION or MF_GRAYED) EnableMenuItem(hEditMenu,3,MF_BYPOSITION or MF_GRAYED) EnableMenuItem(hEditMenu,5,MF_BYPOSITION or MF_GRAYED) Else EnableMenuItem(hEditMenu,2,MF_BYPOSITION or MF_ENABLED) EnableMenuItem(hEditMenu,3,MF_BYPOSITION or MF_ENABLED) EnableMenuItem(hEditMenu,5,MF_BYPOSITION or MF_ENABLED) EndIf WEnd '======================================== ' 名前を付けて保存 '======================================== *SaveFile lpofn.Flags=OFN_OVERWRITEPROMPT or OFN_HIDEREADONLY lpofn.lpstrTitle=Chr$(0) FLAG3=GetSaveFileName(lpofn) If FLAG3=0 Then Return Open lpofn.lpstrFile As #1 If Lof(1)>0 Then Close #1 Kill lpofn.lpstrFile Open lpofn.lpstrFile As #1 EndIf SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ Field #1,MaxBytes As Text$ Put #1,1 Close #1 FLAG1=1 LastText$=Text$ NowFileName$=lpofn.lpstrFile Return '======================================== ' ファイルを開く '======================================== *OpenFile lpofn.lpstrTitle=Chr$(0) FLAG3=GetOpenFileName(lpofn) If FLAG3=0 Then Return Open lpofn.lpstrFile As #1 Field #1,Lof(1) As Text$ Get #1,1 SendWndMsg hEditWnd,WM_SETTEXT,0,Text$ Close #1 FLAG1=1 LastText$=Text$ NowFileName$=lpofn.lpstrFile Return '======================================== ' 上書き保存 '======================================== *RewriteFile Kill NowFileName$ Open NowFileName$ As #1 SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ Field #1,MaxBytes As Text$ Put #1,1 Close #1 LastText$=Text$ Return '======================================== ' プログラムの終了 '======================================== *EndProgram SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ If LastText$<>Text$ Then MsgBox hWarning,"このファイルの内容は変更されています。この変更を保存しますか?","内容変更の確認",MB_YESNOCANCEL or MB_ICONEXCLAMATION or MB_DEFBUTTON1,UserAns If UserAns=IDYES Then GoSub *SaveFile ElseIf UserAns=IDCANCEL Then Return EndIf EndIf DelWnd hMainWnd End '======================================== ' モールス符号化してWAV保存 '======================================== *MakeMorseCodeWav SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Bunsho$ lpofn.lpstrFilter="Waveファイル(*.wav)"+Chr$(0)+"*.wav"+Chr$(0)+"全てのファイル(*.*)"+Chr$(0)+"*.*"+Chr$(0)+Chr$(0) lpofn.lpstrDefExt="wav" lpofn.Flags=OFN_HIDEREADONLY or OFN_OVERWRITEPROMPT lpofn.lpstrTitle="モールス符号化してWAV保存" FLAG3=GetSaveFileName(lpofn) If FLAG3=0 Then Return Open lpofn.lpstrFile As #1 If Lof(1)>0 Then Close #1 Kill lpofn.lpstrFile Open lpofn.lpstrFile As #1 EndIf WavData$="" J=0 While Len(Bunsho$)<>0 Letter=Asc(Bunsho$) Plus=-255 SelectCase Letter Case 32 Plus=17 Case 46 Plus=-10 Case 44 Plus=-7 Case 58 Plus=-20 Case 63 Plus=-24 Case 39 Plus=1 Case 47 Plus=-6 Case 40 Plus=2 Case 41 Plus=2 Case 34 Plus=10 Case 45 Plus=0 Case 43 Plus=3 Case 61 Plus=-14 EndSelect If Letter>47 AND Letter<58 Then Plus=-22 ElseIf Letter>96 AND Letter<123 Then Plus=-97 ElseIf Letter>64 AND Letter<91 Then Plus=-65 ElseIf Plus=-255 Then Plus=49-Letter EndIf Letter=Letter+Plus For I=0 To lstrlen(Code$(Letter))-1 If Mid$(Code$(Letter),I+1,1)="1" Then WavData$=WavData$+String$(Int(SoundPitch/2*(SoundLong*(SoundUnit*2+1))),Chr$(0)+Chr$(255)) Else WavData$=WavData$+String$(Int(SoundPitch*(SoundLong*(SoundUnit*2+1))),Chr$(128)) EndIf J=J+1 Next Bunsho$=Mid$(Bunsho$,2) WEnd For I=0 To lstrlen(Code$(48))-1 If Mid$(Code$(48),I+1,1)="1" Then WavData$=WavData$+String$(Int(SoundPitch/2*(SoundLong*(SoundUnit*2+1))),Chr$(0)+Chr$(255)) Else WavData$=WavData$+String$(Int(SoundPitch*(SoundLong*(SoundUnit*2+1))),Chr$(128)) EndIf J=J+1 Next WavHeader$="RIFF" WavSize=Len(WavData$)+36 WavHeader$=WavHeader$+Chr$(WavSize Mod 256)+Chr$((WavSize/256) Mod 256)+Chr$((WavSize/256^2) Mod 256)+Chr$((WavSize/256^3) Mod 256)+"WAVEfmt " WavHeader$=WavHeader$+Chr$(16)+String$(3,Chr$(0))+String$(2,Chr$(1)+Chr$(0))+String$(2,Chr$(SoundPitch*2 Mod 256)+Chr$(Int(SoundPitch*2/256))+String$(2,Chr$(0)))+Chr$(1)+Chr$(0)+Chr$(8)+Chr$(0)+"data" DataSize=Len(WavData$) WavHeader$=WavHeader$+Chr$(DataSize Mod 256)+Chr$(Int(DataSize/256) Mod 256)+Chr$(Int(DataSize/256^2) Mod 256)+Chr$(Int(DataSize/256^3) Mod 256) WavData$=WavHeader$+WavData$ Field #1,(WavSize+8) As WavData$ Put #1,1 Close #1 lpofn.lpstrFilter="テキストファイル(*.txt)"+Chr$(0)+"*.txt"+Chr$(0)+"全てのファイル(*.*)"+Chr$(0)+"*.*"+Chr$(0)+Chr$(0) lpofn.lpstrDefExt="txt" MsgBox hNotice,"モールス符号化が完了しました。","作業完了の報告",MB_OK or MB_ICONINFORMATION Return '======================================== ' モールス符号化してTXT保存 '======================================== *MakeMorseCodeTxt SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Bunsho$ lpofn.Flags=OFN_HIDEREADONLY or OFN_OVERWRITEPROMPT lpofn.lpstrTitle="モールス符号化してTXT保存" FLAG3=GetSaveFileName(lpofn) If FLAG3=0 Then Return Open lpofn.lpstrFile As #1 If Lof(1)>0 Then Close #1 Kill lpofn.lpstrFile Open lpofn.lpstrFile As #1 EndIf TxtData$="" NowTextLong=0 J=0 While Len(Bunsho$)<>0 Letter=Asc(Bunsho$) Plus=-255 SelectCase Letter Case 32 Plus=17 Case 46 Plus=-10 Case 44 Plus=-7 Case 58 Plus=-20 Case 63 Plus=-24 Case 39 Plus=1 Case 47 Plus=-6 Case 40 Plus=2 Case 41 Plus=2 Case 34 Plus=10 Case 45 Plus=0 Case 43 Plus=3 Case 61 Plus=-14 EndSelect If Letter>47 AND Letter<58 Then Plus=-22 ElseIf Letter>96 AND Letter<123 Then Plus=-97 ElseIf Letter>64 AND Letter<91 Then Plus=-65 ElseIf Plus=-255 Then Plus=49-Letter EndIf Letter=Letter+Plus For I=0 To lstrlen(Code$(Letter))-1 If NowTextLong=(TxtLong*(TxtUnit*2+1)) Then TxtData$=TxtData$+"■"+Chr$(13)+Chr$(10) NowTextLong=0 EndIf If Mid$(Code$(Letter),I+1,1)="1" Then TxtData$=TxtData$+"_" Else TxtData$=TxtData$+" " EndIf J=J+1 NowTextLong=NowTextLong+1 Next Bunsho$=Mid$(Bunsho$,2) WEnd For I=0 To lstrlen(Code$(48))-1 If NowTextLong=(TxtLong*(TxtUnit*2+1)) Then TxtData$=TxtData$+"■"+Chr$(13)+Chr$(10) NowTextLong=0 EndIf If Mid$(Code$(48),I+1,1)="1" Then TxtData$=TxtData$+"_" Else TxtData$=TxtData$+" " EndIf J=J+1 NowTextLong=NowTextLong+1 Next Field #1,Len(TxtData$) As TxtData$ Put #1,1 Close #1 MsgBox hNotice,"モールス符号化が完了しました。","作業完了の報告",MB_OK or MB_ICONINFORMATION Return '======================================== ' 検索 '======================================== *Searching Window hSearchWnd,OwnerWnd(),-1,-1,406,115,"検索",WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,"NORMAL",,,WS_EX_APPWINDOW Window hSBack,hSearchWnd,0,0,400,90,"",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel1,hSearchWnd,10,20,100,20,"検索文字列:",WS_CHILD or WS_VISIBLE,"STATIC" Window hSearchWord,hSearchWnd,110,18,190,24,"",WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL,"EDIT",,,WS_EX_CLIENTEDGE Window hGoSearch,hSearchWnd,310,18,80,24,"次を検索",WS_CHILD or WS_VISIBLE,"BUTTON" Window hCapLitCheck,hSearchWnd,20,50,280,20,"大文字と小文字を区別しない",WS_CHILD or WS_VISIBLE or BS_AUTOCHECKBOX,"BUTTON" ShowWnd hSearchWnd,SW_SHOW SWPoint=1 While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then DelWnd hSearchWnd Return EndIf If Message=WM_COMMAND AND lParam=hGoSearch Then *SearchA SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,SearchedString$ SendWndMsg hSearchWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSearchWord,WM_GETTEXT,MaxBytes+1,SearchWord$ SendWndMsg hCapLitCheck,BM_GETSTATE,0,0,Checked If Checked=BST_CHECKED Then SearchedString$=CharUpper(SearchedString$) SearchWord$=CharUpper(SearchWord$) EndIf SWPoint=Instr(SWPoint,SearchedString$,SearchWord$) If SWPoint=0 Then MsgBox hWarning,"文章の始めから検索しなおしますか?","再検索",MB_YESNO or MB_ICONINFORMATION,UserAns SWPoint=1 If UserAns=IDYES Then Goto *SearchA Else SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1,(SWPoint+Len(SearchWord$)-1) SendWndMsg hEditWnd,EM_SCROLLCARET,0,0 SWPoint=SWPoint+Len(SearchWord$) EndIf EndIf WEnd '======================================== ' 置換 '======================================== *Substitute Window hSubstituteWnd,OwnerWnd(),-1,-1,406,165,"置換",WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,"NORMAL",,,WS_EX_APPWINDOW Window hSBBack,hSubstituteWnd,0,0,400,140,"",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel1,hSubstituteWnd,10,10,130,20,"置換対象文字列:",WS_CHILD or WS_VISIBLE,"STATIC" Window hSubstitutedWord,hSubstituteWnd,140,8,250,24,"",WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL,"EDIT",,,WS_EX_CLIENTEDGE Window hLabel2,hSubstituteWnd,10,40,130,20,"置換後の文字列:",WS_CHILD or WS_VISIBLE,"STATIC" Window hSubstituteWord,hSubstituteWnd,140,38,250,24,"",WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL,"EDIT",,,WS_EX_CLIENTEDGE Window hCapLitCheck,hSubstituteWnd,10,70,380,20,"大文字と小文字を区別しない",WS_CHILD or WS_VISIBLE or BS_AUTOCHECKBOX,"BUTTON" Window hGoNextSearch,hSubstituteWnd,10,108,135,24,"置換せず次を検索",WS_CHILD or WS_VISIBLE,"BUTTON" Window hGoSubstitute,hSubstituteWnd,155,108,135,24,"置換して次を検索",WS_CHILD or WS_VISIBLE,"BUTTON" Window hAllSubstitute,hSubstituteWnd,300,108,90,24,"すべて置換",WS_CHILD or WS_VISIBLE,"BUTTON" ShowWnd hSubstituteWnd,SW_SHOW SWPoint=1 While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then DelWnd hSubstituteWnd Return EndIf If Message=WM_COMMAND And lParam=hGoNextSearch Then *SubstituteA SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,SubstitutedString$ SendWndMsg hSubstitutedWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSubstitutedWord,WM_GETTEXT,MaxBytes+1,SubstitutedWord$ SendWndMsg hCapLitCheck,BM_GETSTATE,0,0,Checked If Checked=BST_CHECKED Then SubstitutedString$=CharUpper(SubstitutedString$) SubstitutedWord$=CharUpper(SubstitutedWord$) EndIf SWPoint=Instr(SWPoint,SubstitutedString$,SubstitutedWord$) If SWPoint=0 Then MsgBox hWarning,"文章の始めから検索しなおしますか?","再検索",MB_YESNO or MB_ICONINFORMATION,UserAns SWPoint=1 If UserAns=IDYES Then Goto *SubstituteA Else SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1,(SWPoint+Len(SubstitutedWord$)-1) SendWndMsg hEditWnd,EM_SCROLLCARET,0,0 SWPoint=SWPoint+Len(SubstitutedWord$) EndIf EndIf If Message=WM_COMMAND And lParam=hGoSubstitute Then *SubstituteC If SWPoint<2 Then Goto *SubstituteB SendWndMsg hSubstituteWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSubstituteWord,WM_GETTEXT,MaxBytes+1,SubstituteWord$ SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd Clip1$=ClipStr$ SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1-Len(SubstitutedWord$),SWPoint-1 SendWndMsg hEditWnd,WM_CUT,0,0 SetClipStr SubstituteWord$ SendWndMsg hEditWnd,WM_PASTE,0,0 SetClipStr Clip1$ *SubstituteB SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,SubstitutedString$ SendWndMsg hSubstitutedWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSubstitutedWord,WM_GETTEXT,MaxBytes+1,SubstitutedWord$ SendWndMsg hCapLitCheck,BM_GETSTATE,0,0,Checked If Checked=BST_CHECKED Then SubstitutedString$=CharUpper(SubstitutedString$) SubstitutedWord$=CharUpper(SubstitutedWord$) EndIf SWPoint=Instr(SWPoint,SubstitutedString$,SubstitutedWord$) If SWPoint=0 Then MsgBox hWarning,"文章の始めから検索しなおしますか?","再置換",MB_YESNO or MB_ICONINFORMATION,UserAns SWPoint=1 If UserAns=IDYES Then Goto *SubstituteC EndIf Else SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1,(SWPoint+Len(SubstitutedWord$)-1) SendWndMsg hEditWnd,EM_SCROLLCARET,0,0 SWPoint=SWPoint+Len(SubstitutedWord$) EndIf EndIf If Message=WM_COMMAND And lParam=hAllSubstitute Then *SubstituteE If SWPoint<2 Then Goto *SubstituteD SendWndMsg hSubstituteWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSubstituteWord,WM_GETTEXT,MaxBytes+1,SubstituteWord$ SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd Clip1$=ClipStr$ SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1-Len(SubstitutedWord$),SWPoint-1 SendWndMsg hEditWnd,WM_CUT,0,0 SetClipStr SubstituteWord$ SendWndMsg hEditWnd,WM_PASTE,0,0 SetClipStr Clip1$ *SubstituteD SendWndMsg hEditWnd,WM_ACTIVATE,MAKELONG(WA_CLICKACTIVE,0),hEditWnd SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,SubstitutedString$ SendWndMsg hSubstitutedWord,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hSubstitutedWord,WM_GETTEXT,MaxBytes+1,SubstitutedWord$ SendWndMsg hCapLitCheck,BM_GETSTATE,0,0,Checked If Checked=BST_CHECKED Then SubstitutedString$=CharUpper(SubstitutedString$) SubstitutedWord$=CharUpper(SubstitutedWord$) EndIf SWPoint=Instr(SWPoint,SubstitutedString$,SubstitutedWord$) If SWPoint=0 Then MsgBox hWarning,"すべて置換しました。","置換完了",MB_YESNO or MB_ICONINFORMATION,UserAns SWPoint=1 Else SendWndMsg hEditWnd,EM_SETSEL,SWPoint-1,(SWPoint+Len(SubstitutedWord$)-1) SendWndMsg hEditWnd,EM_SCROLLCARET,0,0 SWPoint=SWPoint+Len(SubstitutedWord$) Goto *SubstituteE EndIf EndIf WEnd '======================================== ' オプション '======================================== *MorseOption Window hOptionWnd,OwnerWnd(),-1,-1,306,225,"モールス符号化オプション",WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,"NORMAL",,,WS_EX_APPWINDOW Window hOBack,hOptionWnd,0,0,300,200,"",WS_CHILD or WS_VISIBLE,"STATIC" Window hGroup1,hOptionWnd,10,10,280,50,"TXT保存関連",WS_CHILD or WS_VISIBLE or BS_GROUPBOX,"BUTTON" Window hGroup2,hOptionWnd,10,70,280,90,"WAV保存関連",WS_CHILD or WS_VISIBLE or BS_GROUPBOX,"BUTTON" Window hLabel1,hGroup1,10,20,115,20,"1行の文字列:",WS_CHILD or WS_VISIBLE or WS_GROUP,"STATIC" Window hTLimit,hGroup1,125,18,40,24,"",WS_CHILD or WS_VISIBLE or WS_GROUP or ES_AUTOHSCROLL or ES_NUMBER or ES_RIGHT,"EDIT",,,WS_EX_CLIENTEDGE Window hTUnit,hGroup1,170,18,100,100,"",WS_CHILD or WS_VISIBLE or WS_GROUP or CBS_DROPDOWNLIST,"COMBOBOX" Window hLabel2,hGroup2,10,20,80,20,"音の長さ:",WS_CHILD or WS_VISIBLE or WS_GROUP,"STATIC" Window hSLong,hGroup2,90,18,75,24,"",WS_CHILD or WS_VISIBLE or WS_GROUP or ES_AUTOHSCROLL or ES_RIGHT,"EDIT",,,WS_EX_CLIENTEDGE Window hSUnit,hGroup2,170,18,100,100,"",WS_CHILD or WS_VISIBLE or WS_GROUP or CBS_DROPDOWNLIST,"COMBOBOX" Window hLabel4,hGroup2,10,55,80,20,"音の高さ:",WS_CHILD or WS_VISIBLE or WS_GROUP,"STATIC" Window hSPitch,hGroup2,90,53,75,24,"",WS_CHILD or WS_VISIBLE or WS_GROUP or ES_AUTOHSCROLL or ES_NUMBER or ES_RIGHT,"EDIT",,,WS_EX_CLIENTEDGE Window hLabel5,hGroup2,170,55,20,20,"Hz",WS_CHILD or WS_VISIBLE or WS_GROUP,"STATIC" Window hOKButton,hOptionWnd,105,168,90,24,"OK",WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,"BUTTON" Window hCancelButton,hOptionWnd,200,168,90,24,"キャンセル",WS_CHILD or WS_VISIBLE,"BUTTON" ShowWnd hOptionWnd,SW_SHOW SendWndMsg hTUnit,CB_ADDSTRING,0,"dots/行" SendWndMsg hTUnit,CB_ADDSTRING,0,"lines/行" SendWndMsg hSUnit,CB_ADDSTRING,0,"秒/dot" SendWndMsg hSUnit,CB_ADDSTRING,0,"秒/line" SendWndMsg hTLimit,WM_SETTEXT,0,Str$(TxtLong) SendWndMsg hTUnit,CB_SETCURSEL,TxtUnit,0 SendWndMsg hSLong,WM_SETTEXT,0,Str$(SoundLong) SendWndMsg hSUnit,CB_SETCURSEL,SoundUnit,0 SendWndMsg hSPitch,WM_SETTEXT,0,Str$(SoundPitch) While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then DelWnd hOptionWnd Return EndIf If Message=WM_COMMAND AND lParam=hCancelButton Then DelWnd hOptionWnd Return EndIf If Message=WM_COMMAND AND lParam=hOKButton Then SendWndMsg hTLimit,WM_GETTEXT,10,NTxtLong$ SendWndMsg hTUnit,CB_GETCURSEL,0,0,TxtUnit SendWndMsg hSLong,WM_GETTEXT,10,NSoundLong$ SendWndMsg hSUnit,CB_GETCURSEL,0,0,SoundUnit SendWndMsg hSPitch,WM_GETTEXT,10,NSoundPitch$ NewIniData$=Chr$(Val(NTxtLong$) Mod 256)+Chr$(Int(Val(NTxtLong$)/256))+Chr$(TxtUnit)+Chr$(Int(Val(NSoundLong$)*1000) Mod 256)+Chr$(Int(Int(Val(NSoundLong$)*1000)/256))+Chr$(SoundUnit)+Chr$(Val(NSoundPitch$) Mod 256)+Chr$(Int(Val(NSoundPitch$)/256)) Open IniPos$ As #2 Field #2,8 As NewIniData$ Put #2,1 Close #2 TxtLong=Val(NTxtLong$) SoundLong=Val(NSoundLong$) SoundPitch=Val(NSoundPitch$) DelWnd hOptionWnd Return EndIf WEnd '======================================== ' ヘルプ '======================================== *Help Exec "MORSEENCODERHELP.HLP" Return '======================================== ' バージョン情報 '======================================== *Version Window hVersionWnd,OwnerWnd(),-1,-1,306,156,"モールス符号化ソフト1.2.0.0",WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,"NORMAL",,,WS_EX_APPWINDOW or WS_EX_OVERLAPPEDWINDOW Window hVBack,hVersionWnd,0,0,300,130,"",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel1,hVersionWnd,10,10,280,20,"正式ソフト名:モールス符号化ソフト",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel2,hVersionWnd,10,40,280,20,"バージョン:1.2.0.0",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel3,hVersionWnd,10,70,280,20,"製作者名:森 功",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel4,hVersionWnd,10,100,280,20,"完成日:西暦2003年 4月 7日",WS_CHILD or WS_VISIBLE,"STATIC" ShowWnd hVersionWnd,SW_SHOW While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then DelWnd hVersionWnd Return EndIf WEnd '======================================== ' エラー処理 '======================================== *ErrorHappen MsgBox hErrorWnd,"このソフトが原因でエラーが発生しました。"+Chr$(10)+"現在編集中のファイルはこのソフトがあるファイル内に保存されます。"+Chr$(10)+"まことに申し訳ございませんでした。","エラー発生",MB_ICONSTOP or MB_OK FileName$=CurDir$+"TemporaryTextFile.txt" Open FileName$ As #3 SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,Text$ Field #3,Len(Text$) As Text$ Put #3,1 Close #3 End '======================================== ' 印刷 '======================================== *PrintOut SelectPrinter SendWndMsg hEditWnd,WM_GETTEXTLENGTH,0,0,MaxBytes SendWndMsg hEditWnd,WM_GETTEXT,MaxBytes+1,PrintThing$ Window hPrintSet,OwnerWnd(),-1,-1,306,175,"ページ設定",WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX,"NORMAL",,,WS_EX_APPWINDOW Window hBackGround,hPrintSet,0,0,300,150,"",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel1,hPrintSet,10,15,100,20,"用紙の種類:",WS_CHILD or WS_VISIBLE,"STATIC" Window hPaperSize,hPrintSet,120,10,170,200,"",WS_CHILD or WS_VISIBLE or CBS_DROPDOWNLIST or CBS_NOINTEGRALHEIGHT,"COMBOBOX" Window hLabel2,hPrintSet,10,50,100,20,"用紙サイズ ",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel3,hPrintSet,120,50,40,20,"縦:",WS_CHILD or WS_VISIBLE,"STATIC" Window hHeight,hPrintSet,165,46,80,24,"",WS_CHILD or WS_VISIBLE or ES_NUMBER or ES_RIGHT,"EDIT",,,WS_EX_CLIENTEDGE Window hLabel4,hPrintSet,260,50,40,20,"mm",WS_CHILD or WS_VISIBLE,"STATIC" Window hLabel5,hPrintSet,120,80,40,20,"横:",WS_CHILD or WS_VISIBLE,"STATIC" Window hWidth,hPrintSet,165,76,80,24,"",WS_CHILD or WS_VISIBLE or ES_NUMBER or ES_RIGHT,"EDIT",,,WS_EX_CLIENTEDGE Window hLabel6,hPrintSet,260,80,40,20,"mm",WS_CHILD or WS_VISIBLE,"STATIC" Window hOKButton,hPrintSet,10,110,135,30,"OK",WS_CHILD or WS_VISIBLE,"BUTTON" Window hCancelButton,hPrintSet,155,110,135,30,"キャンセル",WS_CHILD or WS_VISIBLE,"BUTTON" ShowWnd hPrintSet,SW_SHOW SendWndMsg hPaperSize,CB_ADDSTRING,0,"A4縦" SendWndMsg hPaperSize,CB_ADDSTRING,0,"B5縦" SendWndMsg hPaperSize,CB_ADDSTRING,0,"A5縦" SendWndMsg hPaperSize,CB_ADDSTRING,0,"A5横" SendWndMsg hPaperSize,CB_ADDSTRING,0,"はがき縦" SendWndMsg hPaperSize,CB_ADDSTRING,0,"はがき横" SendWndMsg hPaperSize,CB_ADDSTRING,0,"ユーザー定義" SendWndMsg hPaperSize,CB_SETCURSEL,0,0 SendWndMsg hHeight,WM_SETTEXT,0,"297" SendWndMsg hWidth,WM_SETTEXT,0,"210" While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then DelWnd hPrintSet Return EndIf If Message=WM_COMMAND AND lParam=hCancelButton Then DelWnd hPrintSet Return EndIf If Message=WM_COMMAND AND lParam=hOKButton Then SendWndMsg hHeight,WM_GETTEXT,5,PaperHeight$ SendWndMsg hWidth,WM_GETTEXT,5,PaperWidth$ DelWnd hPrintSet Goto *Printing EndIf If Message=WM_COMMAND AND lParam=hPaperSize Then SendWndMsg hPaperSize,CB_GETCURSEL,0,0,PaperSize Select Case PaperSize Case 0 SendWndMsg hHeight,WM_SETTEXT,0,"297" SendWndMsg hWidth,WM_SETTEXT,0,"210" Case 1 SendWndMsg hHeight,WM_SETTEXT,0,"257" SendWndMsg hWidth,WM_SETTEXT,0,"182" Case 2 SendWndMsg hHeight,WM_SETTEXT,0,"210" SendWndMsg hWidth,WM_SETTEXT,0,"148" Case 3 SendWndMsg hHeight,WM_SETTEXT,0,"148" SendWndMsg hWidth,WM_SETTEXT,0,"210" Case 4 SendWndMsg hHeight,WM_SETTEXT,0,"148" SendWndMsg hWidth,WM_SETTEXT,0,"100" Case 5 SendWndMsg hHeight,WM_SETTEXT,0,"100" SendWndMsg hWidth,WM_SETTEXT,0,"148" EndSelect Changed=0 EndIf If Changed=0 Then SendWndMsg hHeight,EM_CANUNDO,0,0,Changed1 SendWndMsg hWidth,EM_CANUNDO,0,0,Changed2 If Changed1=1 OR Changed2=1 Then SendWndMsg hPaperSize,CB_SETCURSEL,6,0 Changed=1 EndIf EndIf WEnd *Printing LimitW=Int((Val(PaperWidth$)-8)/(4.217/2)) LimitH=Int((Val(PaperHeight$)-8)/4.217) LineCount=0 While Len(PrintThing$)<>0 CutPoint=Instr(PrintThing$,Chr$(13)+Chr$(10)) If CutPoint=0 Then PrintLine$=PrintThing$ While Len(PrintLine$)>=LimitW OneLine$=Left$(PrintLine$,LimitW) If Len(KMid$(OneLine$,KLen(OneLine$)))=1 Then OneLine$=Left$(PrintLine$,LimitW-1) LPrint OneLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintLine$=Mid$(PrintLine$,LimitW) Else LPrint OneLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintLine$=Mid$(PrintLine$,LimitW+1) EndIf WEnd LPrint PrintLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintThing$="" Else PrintLine$=Left$(PrintThing$,CutPoint-1) While Len(PrintLine$)>=LimitW OneLine$=Left$(PrintLine$,LimitW) If Len(KMid$(OneLine$,KLen(OneLine$)))=1 Then OneLine$=Left$(PrintLine$,LimitW-1) LPrint OneLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintLine$=Mid$(PrintLine$,LimitW) Else LPrint OneLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintLine$=Mid$(PrintLine$,LimitW+1) EndIf WEnd LPrint PrintLine$ LineCount=LineCount+1 If LineCount=LimitH Then LPrint Chr$(12) LineCount=0 EndIf PrintThing$=Mid$(PrintThing$,CutPoint+2) EndIf WEnd LPrint Chr$(12) Return