• ベストアンサー

iniファイルを読み込んでからその後

おはようございます。 VB6.0使っています。 iniファイルを読み込んできて01~05の名称をFORMに並べてあるテキストボックスに表示。 読み込んできた名称をFORMにて表示させたら修正したり追加したり出来ます。 そして最後にはまたiniファイルに保存させます。(保存ボタンがあります) でもiniファイルにある設定番号にある01のみ変更出来ないようにしたいのです。 ここでは東京本店。テキストボックスに表示させたのを変更できないようにしたいのです。 何かいい方法はないでしょうか。 ヒントでもアドバイスでもツッコミでもかまいません。 よろしくお願いいたします。 iniファイル [MY_NO] ;設定番号 MY_NO=01 ; [MY_NAME] ;名称 01=東京本店, 02=大阪支店, 03=, 04=, 05=, ;

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

テキストボックスがコントロール配列になっているなら、こんな感じで良いのでは? iniファイルをC:\tmp\test.iniとしておき、 フォームにText1というコントロール配列を5個置いて実行して下さい。 Enabledを変えてるから書き換えられないテキストはグレーですが。 -------------------------------------------- Private Declare Function GetPrivateProfileString Lib "Kernel32.dll" _ Alias "GetPrivateProfileStringA" _ (ByVal lpAppName As String, ByVal lpKeyName As String, _ ByVal lpDefault As String, ByVal lpReturnedString As String, _ ByVal nSize As Long, ByVal lpFileName As String) As Long Private Sub Form_Load() Dim strFile As String 'iniファイルパス Dim strMyNo As String '[MY_NO]に設定された番号 Dim strMyNameKey As String '[MY_NAME]キー Dim i As Integer 'カウンタ Dim strGetVal As String 'iniファイルから読んだ文字列 strFile = "C:\tmp\test.ini" 'MY_NOの設定値を読む strGetVal = Space(256) GetPrivateProfileString "MY_NO", "MY_NO", "", strGetVal, 256, strFile strMyNo = Trim(Left(strGetVal, InStr(1, strGetVal, vbNullChar) - 1)) For i = Text1.LBound To Text1.UBound strGetVal = Space(256) 'キー文字列作る。 strMyNameKey = "0" & (i + 1) '読み込む GetPrivateProfileString "MY_NAME", strMyNameKey, "", _ strGetVal, 256, strFile '末尾の改行を取りつつテキストに表示 Text1(i).Text = Trim(Left(strGetVal, InStr(1, strGetVal, vbNullChar) - 1)) 'キーと、MY_NOの設定値を比較して一致したらテキストボックスを触れなくする If StrComp(strMyNameKey, strMyNo) = 0 Then Text1(i).Enabled = False End If Next End Sub

akigiri0213
質問者

お礼

お返事ありがとうございます! おかげさまでイメージどおりのが出来ました! まさにソレ!グレーになりました。 やはしポイントはEnabledですね。 私の辞書がいかんせんヘボイのが悲しいです(買え) MY_NOとMY_NAMEを読んで来て、Ifで比較する… ばっちりです! ありがとうございました!! お三方のご意見、とても参考になり勉強になりました。 本当にありがとうございました^^

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

01のデータ(例の「東京本店」)が入るテキストボックスのEnabledをFalseにする、というのが手っ取り早い方法ですが、ツールを使えば外部からそれを解除(=Enableに)することが可能です。 ですので、01のデータはテキストボックスだけでなく変数にも記憶し、ファイルに出力するときは01だけ変数の値を採用すると、コントロール上の改ざん対策になります。 あと「変更できないように」というのが、どこまでのレベルを想定しているのか、にもよりますね。 どんなにアプリで制限しても、iniファイルを直接編集されたらそれまでですし。暗号化をして改ざんできないようにしたり、ハッシュ値でデータが改ざんされていないかチェックしたり、などなど突き詰めるとキリがありません。

akigiri0213
質問者

お礼

お返事ありがとうございます! セキュリティ等は一切気にしていないです。 改竄の恐れ等そういう前提はナシということで^^; それと01のテキストボックスだけFalseっていうのはちょっと…汗 MY_NOは02になる可能性もあるので。 臨機応変な動きをさせたいです。 申し訳ないです; やはしEnabledですね。 イメージ沸いてきました。 ありがとうございます!

すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.1

* ----------------- *  txtMY_NO,01, -1 *  txt01,東京本店, 0 *  ----------------- * [MY_NO] * 設定番号 txtMY_NO, 01, -1 * * [MY_NAME] * 名称 txt01,東京本店, 0 txt02,大阪支店, -1 という test.ini を仮定します。 テキストボックス名, 値, Enabled値 という並びです。 Private Sub コマンド0_Click()   Dim I    As Integer   Dim J    As Integer   Dim N    As Integer   Dim M    As Integer   Dim Datas() As String   Dim Cells() As String      Datas() = FileReadArray("C:\Temp\Test.ini")   N = UBound(Datas())   For I = 0 To N     If Left(Datas(I), 1) <> "*" Then       Cells() = Split(Datas(I), ",")       M = UBound(Cells())       If M = 2 Then         Me.Controls(Cells(0)) = Cells(1)         Me.Controls(Cells(0)).Enabled = Cells(2)       End If     End If   Next I End Sub こんな感じで目的が達せられるかと思います。 なお、ここではMicrosoft scripting runtime を利用した FileReadArray関数を使っています。 Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray    Dim fso    As FileSystemObject    Dim fil    As File    Dim txs    As TextStream    Dim strText  As String    Dim strTexts() As String       Set fso = New FileSystemObject    Set fil = fso.GetFile(FileName)    Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)    strText = txs.ReadAll    strTexts = Split(strText, Chr$(13) & Chr$(10)) Exit_FileReadArray:    FileReadArray = strTexts()    Exit Function Err_FileReadArray:    MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"    strTexts() = Split("")    Resume Exit_FileReadArray End Function

akigiri0213
質問者

お礼

お返事ありがとうございます! せっかく回答していただいたのですが、 iniファイルは質問の形でしたいので汗 申し訳ないです; でもEnabled!まさにコレです! さっそく使いたいと思います! ありがとうございました^^

すると、全ての回答が全文表示されます。

関連するQ&A