テキストエディタにファイルのフルパスを渡す。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ゲスト

テキストエディタにファイルのフルパスを渡す。

#1 投稿記事 by ゲスト »

よろしくお願いします。

「Active Basic オフィシャル ユーザーズ ガイド」で勉強しながら、
「テキストエディタ」を作ってみました。
ここで、質問ですが、直接起動させずにコマンドプロンプトから読み込ませたいファイルのフルパスを渡して起動させたいのですが、、、、。

よろしくお願いします。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

直接起動させずに あたりの意味がよくつかめませんが、
とりあえずGetCommandLine()関数の使い方は分かりますか?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ゲスト

#3 投稿記事 by ゲスト »

konisi さん ありがとうございます。

「直接起動」というのはただ単にこのテキストエディタを立ち上げて、
「開く」からファイルを読み込む。。。ということを表現した次第です。

GetCommandLine()をロード時の関数内に挿入しましたが。

やっぱりできないみたい。
お願い教えてください。よろしくお願いします。

Sub TEST_Create(ByRef CreateStruct As CREATESTRUCT)
GetCommandLine(FilePath)
End Sub

'OPENFILENAME構造体の初期化
Dim ofn As OPENFILENAME
Dim FilePath[MAX_PATH] As Byte
Dim FN1[MAX_PATH] As Byte
Dim lpBuffer[255] As Byte

'FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex" TXTデータ(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FilePath
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

いまいちやろうとしている事が伝わってきませんorz

起動するとき、コマンドプロンプト(ここでは#prompt(BASIC PROMPT)ではなく、cmd.exe)から例えば
D:\>Notepad.exe "D:\1.txt"
と等と入力したとき、下のコードは(実行ファイル名がNotepad.exeで、かつDドライブのルート直下に置かれている場合は)「Notepad.exe "D:\1.txt"」と表示します。

コード: 全て選択


#console
Print MakeStr(GetCommandLine())
/*このPrint文は、ここでは
Notepad.exe "D:\1.txt"
と表示する。*/

Sleep(-1)
ところでグローバル領域に式があるように見えるのですが、どんなソースコードになってますか?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ゲスト

#5 投稿記事 by ゲスト »

konisi さん
ありがとうございます!

以下が全ソースです。(ごめんなさい)

'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。


'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
TextEditor_DestroyObjects()
PostQuitMessage(0)
End Sub

Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
dim rc as RECT
dim hEdit2 as HWND
'クライント領域のサイズを取得
GetClientRect(hMainWnd,rc)
'EditBox1のウィンドウハンドルを取得
hEdit2=GetDlgItem(hMainWnd,EditBox1)
'hEditの大きさを変更する
MoveWindow(hEdit2,0,0,rc.right,rc.bottom,0)
'フォーカスをセット
SetFocus(hEdit2)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)

dim hEdit as HWND
Dim ofn As OPENFILENAME
dim hFile as HWND
dim dwFileSize as DWord
dim dwAccessByte as DWord
dim FileName[MAX_PATH-1] as Byte
dim buffer as BytePtr



FillMemory(VarPtr(ofn),Len(ofn),0)
'ofn.lpstrInitialDir=NULL
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex"all files(*.*)\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=GetCommandLine()
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle=""
ofn.Flags=OFN_EXPLORER or OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"




hFile=CreateFile(ofn.lpstrFile,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,ByVal 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)

if hFile=INVALID_HANDLE_VALUE then
MessageBox(hMainWnd,"Can not open the file",ofn.lpstrFile,MB_ICONEXCLAMATION)
End If


dwFileSize=GetFileSize(hFile,0)
buffer=malloc(dwFileSize+1)


ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)
buffer[dwAccessByte]=0


CloseHandle(hFile)


hEdit=GetDlgItem(hMainWnd,EditBox1)


SetWindowText(hEdit,buffer)


free(buffer)


SetFocus(hEdit)

End Sub
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#6 投稿記事 by konisi »

どうにもofn構造体に値を代入してそのまま放置しているように見えます。

ofn.lpstrFile=GetCommandLine()

ofn.lpstrFile=FileName
にして、
ofn.lpstrDefExt="*"
の直後に
GetOpenFileName(ofn)
を入れてみてください。

Createイベント内でやる動作じゃないので、ウインドウに割り当てられたメニュー内の
メニューIDにIDM_OPENが既に存在するなら
PostMessage(hMainWnd,WM_COMMAND,IDM_OPEN,0)
に置き換えるべきだとは思いますが。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ゲスト

#7 投稿記事 by ゲスト »

konisiさん
ありがとうございました。

なんとか頑張ります。
また、よろしくお願いします。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#8 投稿記事 by M.S. »

僕が投稿したトピックも参考にしてみてください。

ファイルの関連付け: http://www.activebasic.com/forum/viewtopic.php?t=2188
返信する