Q&A

  • dfm 을 직접 수정하면 어떤 영향을 미치는지....
안녕하세요...



일반 폼에서 모든 컨트롤을 루프로 돌면서 그 컨트롤의 텍스트 값을 스트링리스트에 add 하는 소스를 만들었습니다...



procedure GetDataFromFr( myFr : TForm; getList : TStrings );

var

i, j : integer;

begin



for i := 0 to myFr.ControlCount -1 do

if ( myFr.Controls[i] is TEdit ) then

begin

getList.Add( (myFr.Controls[i] as TEdit ).text);

end

..

..

..

end;



이런식으로 말입니다.

근데 Controls[i]가 화면에 보이는 컨트롤 순서대로 인식되는 것이 아니더군요.

그래서 탭오더를 조정해봤는데 것두 안되구.

그래서 class 컨트롤이 선언된 부분을 순서대로 수정해보았는데 것두 안되더군요.

그래서 마지막으로 dfm을 열어서 순서를 바꿔주고 화면에서 오른쪽 마우스 버튼을 눌러서 text DFM 체크 부분을 없애구 다시 컴파일 하고 나니깐.. 순서대로 스트링 리스트에 입력되었습니다.



근데 화면에서 컨트롤들이 변경되고 그럴경우.. dfm 이 가장 마지막에 입력되더군요.



음 요지는 이 dfm을 변경하는 것이 좋은 프로그래밍 습관인지.. 궁금해서..

그리고 화면에서 원하는 순서대로 값을 읽어들이는 방법이 위에서 제가 한 방법 말구 다른 것이 있으면 좀 알려주세요....

컨트롤을 화면에 탭오더로 주어진 대로 읽어들이는 방법도 부탁...드립니다.



si 쪽에서 근무하는데 솔직히 델파이는 처음이고요...

제가 생각나는 데로 만들어 본건데..

화면 정의가 너무 자주 변경되서 루프로 한번에 해결할 생각으로 이렇게 만들었는데...



빠른 응답 부탁드립니다.

1  COMMENTS
  • Profile
    최용일 2001.02.22 03:23
    안녕하세요. 최용일입니다.



    .dfm파일을 직접 수정하시는것은 별루 좋은 방법이 아닙니다. 그렇게 하지 않고도 할 수



    있습니다. TStringList에 보심ㄴ CustomSort란 메소드가 있습니다. 이걸이용해서 정렬하



    시면 됩니다...



    procedure GetDataFromFr( myFr : TForm; getList : TStrings );



    function SortProc(List: TStringList; Index1, Index2: Integer): Integer;

    begin

    if (Integer(List.Objects[Index1]) > Integer(List.Objects[Index2])) then

    Result := 1

    else if (Integer(List.Objects[Index1]) < Integer(List.Objects[Index2])) then

    Result := -1

    else

    Result := 0;

    end;



    var

    I, J : integer;

    begin

    for I := 0 to ( myFr.ControlCount - 1 ) do

    if ( myFr.Controls[I] is TEdit ) then

    begin

    // Add대신에 AddObject를 사용하여 TabOrder까지 저장

    getList.AddObject( TEdit(myFr.Controls[i]).Text,

    TObject(TEdit(myFr.Controls[i]).TabOrder));

    end;

    getList.CustomSort(@SortProc);

    end;



    ^^ 항상 즐코하세요...



    진짜 초보. wrote:

    > 안녕하세요...

    >

    > 일반 폼에서 모든 컨트롤을 루프로 돌면서 그 컨트롤의 텍스트 값을 스트링리스트에 add 하는 소스를 만들었습니다...

    >

    > procedure GetDataFromFr( myFr : TForm; getList : TStrings );

    > var

    > i, j : integer;

    > begin

    >

    > for i := 0 to myFr.ControlCount -1 do

    > if ( myFr.Controls[i] is TEdit ) then

    > begin

    > getList.Add( (myFr.Controls[i] as TEdit ).text);

    > end

    > ..

    > ..

    > ..

    > end;

    >

    > 이런식으로 말입니다.

    > 근데 Controls[i]가 화면에 보이는 컨트롤 순서대로 인식되는 것이 아니더군요.

    > 그래서 탭오더를 조정해봤는데 것두 안되구.

    > 그래서 class 컨트롤이 선언된 부분을 순서대로 수정해보았는데 것두 안되더군요.

    > 그래서 마지막으로 dfm을 열어서 순서를 바꿔주고 화면에서 오른쪽 마우스 버튼을 눌러서 text DFM 체크 부분을 없애구 다시 컴파일 하고 나니깐.. 순서대로 스트링 리스트에 입력되었습니다.

    >

    > 근데 화면에서 컨트롤들이 변경되고 그럴경우.. dfm 이 가장 마지막에 입력되더군요.

    >

    > 음 요지는 이 dfm을 변경하는 것이 좋은 프로그래밍 습관인지.. 궁금해서..

    > 그리고 화면에서 원하는 순서대로 값을 읽어들이는 방법이 위에서 제가 한 방법 말구 다른 것이 있으면 좀 알려주세요....

    > 컨트롤을 화면에 탭오더로 주어진 대로 읽어들이는 방법도 부탁...드립니다.

    >

    > si 쪽에서 근무하는데 솔직히 델파이는 처음이고요...

    > 제가 생각나는 데로 만들어 본건데..

    > 화면 정의가 너무 자주 변경되서 루프로 한번에 해결할 생각으로 이렇게 만들었는데...

    >

    > 빠른 응답 부탁드립니다.