サンプルのテキストエディタで読み込みができない

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
まさ328
記事: 3
登録日時: 2007年5月24日(木) 13:30

サンプルのテキストエディタで読み込みができない

#1 投稿記事 by まさ328 »

ヘルプセンターにあるWin32プログラミング講座-Step11. テキスト エディタを作る
にあるテキストエディターのサンプルプログラムなのですが、
ファイルの読み込みだけうまくいきません。

保存やコピー・ペースト他はサンプル通り動くのですが、テキストファイルを
読み込んでも、何も表示されません。

Sub MainWnd_IDM_OPEN_MenuClick()の中の
SetWindowText(hEdit,buffer)

SetWindowText(hEdit,"TEST")
とかに書き換えるとちゃんとTESTと表示されるのでbufferに何も入って
いないのかなぁと思うのですが、今回のようなケース、なにか別に設定しなければ
いけないことがあるのでしょうか?

AB自体、まだ使い始めて日も浅く、慣れていないのでとんでもないミスを
している可能性もあるのですが・・・
ゲスト

#2 投稿記事 by ゲスト »

SetWindowText(hEdit,buffer)の前か後の行に
debug
を1行追加してデバッグ実行をしてみましょう。
ブレークしたら、bufferに何が代入されているか確認してください。
まさ328
記事: 3
登録日時: 2007年5月24日(木) 13:30

#3 投稿記事 by まさ328 »

ブレークしたら、bufferに何が代入されているか確認してください。
buffer の中身は””で何も入っていませんでした。

その前のコードで
'ファイルサイズを取得
dwFileSize=GetFileSize(hFile,0)

'文字列バッファ用のメモリを確保
buffer=ZeroString(dwFileSize)

'ファイルの内容を文字列変数bufferに読み込む
ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)

とあるのですが、
dwFileSizeはエクスプローラー等でファイルのプロパティから調べたサイズが
入っているので、ここまでは正常のようです。

どこがまずいのでしょう?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

よくみるとこれ動く方が凄いコードですね。
下のように書いてみてください。

コード: 全て選択

Sub MainWnd_IDM_OPEN_MenuClick()
    Dim hEdit As Long
    Dim ofn As OPENFILENAME
    Dim hFile As Long
    Dim dwFileSize As DWord
    Dim dwAccessByte As DWord
    Dim FileName[MAX_PATH-1] As Byte
    Dim buffer As *Byte

    'OPENFILENAME構造体の初期化
    FillMemory(VarPtr(ofn),Len(ofn),0)
    ofn.lStructSize=Len(ofn)
    ofn.hwndOwner=hMainWnd
    ofn.lpstrFilter=Ex"テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0"
    ofn.nFilterIndex=1
    ofn.lpstrFile=FileName
    ofn.nMaxFile=MAX_PATH
    ofn.lpstrTitle="ファイルを開く"
    ofn.Flags=OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
    ofn.lpstrDefExt="*"

    '「ファイルを開く」ダイアログ ボックスを表示
    If GetOpenFileName(ofn)=0 Then Exit Sub


    '-------------------
    ' ファイル オープン
    '-------------------

    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,"ファイルオープンに失敗","TextEditor",MB_OK or MB_ICONEXCLAMATION)
        Exit Sub
    End If

    'ファイルサイズを取得
    dwFileSize=GetFileSize(hFile,0)

    '文字列バッファ用のメモリを確保
    buffer=calloc(dwFileSize+1)

    'ファイルの内容を文字列変数bufferに読み込む
    ReadFile(hFile,buffer,dwFileSize,VarPtr(dwAccessByte),ByVal 0)

    'ファイル ハンドルを閉じる
    CloseHandle(hFile)

    '-------------------


    'EditBox1のハンドルを取得
    hEdit=GetDlgItem(hMainWnd, EditBox1)

    'hEditにバッファをセットする
    SetWindowText(hEdit,buffer)

    'hEditにフォーカスをセット
    SetFocus(hEdit)

    free(buffer)
End Sub
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
まさ328
記事: 3
登録日時: 2007年5月24日(木) 13:30

#5 投稿記事 by まさ328 »

Dim buffer As *Byte

buffer=calloc(dwFileSize+1)
ありがとうございます。うまくいきました!
返信する