掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FieldByNameのような関数を自作したい (ID:28801)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あきらめちゃいましたか・・・ FieldByName は オブジェクト FieldByName2 はレコードを使用した場合です unit MyTable; interface uses SysUtils, Classes; type TMyField = class(TComponent) private FAsString : String; published property asString :String read fAsString; end; TMyField2 = record asString : String; end; TMyTable = class(TComponent) private FMyField : TMyField; FMyField2 : TMyField2; FIndex : Integer; FName : array[0..255] of string; FData : array[0..255,0..999] of string; protected procedure SetNames(Index:Integer;Value:String); function GetNames(Index:Integer):String; procedure SetDatas(Index1,Index2:Integer;Value:String); function GetDatas(Index1,Index2:Integer):String; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function FieldByName(AName:String):TMyField; function FieldByName2(AName:String):TMyField2; property Names [Index:Integer] : String read GetNames write SetNames; property Datas [Index1,Index2:Integer] : String read GetDatas write SetDatas; procedure First; procedure Next; published property Index : Integer read FIndex write FIndex; end; procedure Register; implementation procedure TMyTable.SetNames(Index: Integer; Value: string); begin FName[Index] := Value; end; function TMyTable.GetNames(Index: Integer):String; begin Result := FName[Index]; end; procedure TMyTable.SetDatas(Index1,Index2: Integer; Value: string); begin FData[Index1,Index2] := Value; end; function TMyTable.GetDatas(Index1,Index2: Integer):String; begin Result := FData[Index1,Index2]; end; procedure TMyTable.First; begin FIndex := 0; end; procedure TMyTable.Next; begin Inc(FIndex); end; function TMyTable.FieldByName(AName:String):TMyField; var I,J : Integer; begin //ANameに一致するFNameを探す J := -1; for I:=0 to High(FName) -1 do begin if FName[I] = AName then J := I; end; if J <> -1 then begin //見付かったら FMyField.FAsString := Datas[J,Index]; end else begin //見付からなければ FMyField.FAsString := ''; end; Result := FMyField; end; function TMyTable.FieldByName2(AName:String):TMyField2; var I,J : Integer; begin //ANameに一致するFNameを探す J := -1; for I:=0 to High(FName) -1 do begin if FName[I] = AName then J := I; end; if J <> -1 then begin //見付かったら FMyField2.AsString := Datas[J,Index]; end else begin //見付からなければ FMyField2.AsString := ''; end; Result := FMyField2; end; constructor TMyTable.Create(AOwner: TComponent); begin inherited Create(AOwner); FMyField := TMyField.Create(Self); end; destructor TMyTable.Destroy; begin FMyField.Free; inherited Destroy; end; procedure Register; begin RegisterComponents('KHE00221', [TMyTable]); end; end. ------------------------------------------------------------------- MyTable を使用した例 ------------------------------------------------------------------ procedure TForm1.Button1Click(Sender: TObject); var I,J : Integer; begin //データ初期化 for I:=0 to 10 do begin for J:=0 to 99 do begin MyTable1.Names[I] := 'Name'+IntToStr(I); MyTable1.Datas[I,J] := 'Data'+IntToStr(I)+'/'+IntToStr(J); end; end; //表示 Memo1.Lines.Add(MyTable1.FieldByName('Name1').asString); Memo1.Lines.Add(MyTable1.FieldByName('Name20').asString); MyTable1.Next; Memo1.Lines.Add(MyTable1.FieldByName2('Name2').asString); Memo1.Lines.Add(MyTable1.FieldByName2('Name30').asString); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.