Form에서 여러 콤보넌트들을 올려놓고
비교해가면서 해당 콤보넌트를 찾고 또 안에 해당콤보넌트를 찾고..하는 재귀함수를 만들고싶은데요..
아 이게 풀어서는 되는데..재귀로 잘안되서요..
for ix := 0 to ComponentCount - 1 do
begin
if Components[ix] is TFrame then
begin
for jx := 0 to Components[ix].ComponentCount - 1 do
begin
if TFrame(Components[ix]).Components[jx] is TEdit then
begin
.
.
.
end;
end;
end;
end;
이렇게 풀어선 해봤는데요..
이걸 재귀로 할수있을꺼같은데...
부탁좀드리겠습니다.도와주세요...
이런식으로 하부 컴퍼넌트 까지 검색하시려는 건가요.
그래서 처음에 호출시 Read(Form1); 폼이름을 주거나 특정 컴포넌트를 주면, 그 아래 아래를 트리 처럼 검색하는 건지요...
procedure Read(Component: TComponent);
var
i: Integer;
begin
if Component is TEdit then begin
.....
end;
for i := 0 to Component.ComponentCount - 1 do
if (Component.Components[i].ComponentCount > 0) then //속도를 위해 넣어도 안넣어도..
Read(Component.Components[i]);
end;
아 너무감사합니다.소스가 이해가 안됐었는데..계속보고 해보니까 이해가가네요.
제겐 재귀란 언어가..너무 멀어서..너무감사합니다^^
홍성락님께서 알려주신 방법대로 하시면 되는데요...
var ParamList: TStringList; ... procedure Read(Component: TComponent); var Index: Integer; begin if Component is TUniQuery then begin SetTitle(Component.ClassName, TUniQuery(Component).SQL.Text, TUniQuery(Component).Params) + #13#10#13#10#13#10; ParamList.Clear; end; for Index := 0 to Component.ComponentCount - 1 do Read(Component.Components[Index]); end; begin ParamList := TStringList.Create; try Read(Self); finally ParamList.Free; end; SQLForm.SQLTextFrame.edtSQLText.Text := SQLText; SQLForm.Show; end;
ParamList는 어디에 쓰이는지 모르겠음...
뭘 하고 싶으세요? 이름으로 컴포넌트 찾기? 아님 TEdit를 모두 찾아서 뭔가 하기???