何もないところで躓く

iniファイルの情報を1セクション分取り出して、KeyNamesと一致する項目にNamesを格納する。

やりたかったのはこれだけなのに何でこう微妙なところで躓くのか。
解決したけどまだ完全に理解した状態なので良くないです。

KeyNamesは~.KeyNames[n]、Namesは~.Values[n]で取れる。
~.Names[n]だと~.KeyNames[n]と同じ値になります。
コンポーネントとかで言うNameとCaption(Text)的な関係なんだろうか。

残りは例です。
私は都度begin〜endで囲ったり、同じ型でも1行につき1つしか書かなかったりと行が増える書き方をするのでそこはお好みで。

test.ini

[view]
mode=hoge

[default]
a=default
b=1
c=あいうえお

[hoge]
a=hoge
b=2
c=かきくけこ

[fuga]
a=fuga
b=3
c=さしすせそ

getIni()はFormCreateとかで呼んでおく。
iniPath(string)とlst(TStringList)はグローバル変数。

test.pas

//--------------------------------------
//  設定ファイル読み込み
//--------------------------------------
procedure Tfrm.getIni();
var
  ini: TIniFile;
  mode: string;
begin
  try
    ini := TIniFile.Create(iniPath);
    //iniファイルから各設定を取得
    mode := ini.ReadString('view', 'mode', 'default');
    ini.ReadSectionValues(mode, lst);
  finally
    FreeAndNil(ini);
  end;
end;

//--------------------------------------
//  表示
//--------------------------------------
procedure Tfrm.view();
var
  str: string;
  i: Integer;
  j: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    //ラベルでなければ抜ける
    if Components[i].ClassType <> TLabel then
    begin
      Continue;
    end;

    for j := 0 to lst.Count - 1 do
    begin
      //項目名チェック
      if (Components[i] as TLabel).Caption <> lst.KeyNames[j] then
      begin
        Continue;
      end;

      //同プロパティ名のエディットに表示
      //※事前にプロパティ名を型名(3文字)+任意で設定
      //  例)lblMode、edtMode や lblNumber、edtNumber
      str := (Components[i] as TLabel).Name;
      str := str.Replace('lbl', 'edt');
      TEdit(FindComponent(str)).Text := lst.Values[lst.KeyNames[j]];
      Break;
    end;
  end;
end;

参考

DelFusa Floor
TStringListのName=Value形式を使って一時的に文字列を保持する

中村の里
ユニット NkMemIniFile のリファレンス
1.4.1.2.13 ReadSectionValues メソッド参照。
今回使っているのはTIniFile、上記サイトはTMemIniFileの拡張版ということで、ものは違うんですがTMemIniFileはTIniFileの上位互換的なやつやろ、と。
よく見るのはiniファイルのサイズ上限ですが、詳しく知りたいなら公式をどうぞ。

参考の参考

embarcadero
TIniFile および TMemIniFile の使用

@掲示板
iniファイルについて

投稿者: motalenemy

切り絵とゲームを気まぐれで作る仮面ライダー好きな馬骨

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。