掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FieldByNameのような関数を自作したい (ID:28804)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
書き込みは一切考慮してませんでしたので書き込みできるように修正しました unit MyTable; interface uses SysUtils, Classes; type TMyTable = class; TMyField = class(TComponent) private FMyTable : TMyTable; FAsString : String; FIndex : Integer; protected procedure SetAsString(Value:String); public constructor Create(AOwner:TComponent); destructor Destroy; override; published property asString :String read fAsString write SetAsString; property Index : Integer read FIndex write FIndex; end; TMyTable = class(TComponent) private FMyField : TMyField; 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; 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 constructor TMyField.Create(AOwner:TComponent); begin inherited Create(AOwner); FMyTable := TMyTable(AOwner); end; destructor TMyField.Destroy; begin inherited Destroy; end; procedure TMyField.SetAsString(Value: string); begin FMyTable.Datas[FIndex,FMyTable.Index] := Value; end; 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; FMyField.Index := J; Result := FMyField; 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. -------------------- 使い方 -------------------- MyTable1.First; MyTable1.FieldByName('Name1').asString := '1111'; MyTable1.Next; MyTable1.FieldByName('Name1').asString := '2222'; MyTable1.First; Memo1.Lines.Add(MyTable1.FieldByName('Name1').asString); MyTable1.Next; Memo1.Lines.Add(MyTable1.FieldByName('Name1').asString); MyTable1.Next; Memo1.Lines.Add(MyTable1.FieldByName('Name1').asString);
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.