Q&A

  • 공통 Pas 에서 사용하는 SelectNext 함수..
안녕하세요



각 Form 에서 SelectNext 를 사용한 경우 Error 가 나지 않았는데



SelectNext 를 사용하는 Logic을 Module화 하기 위해 해당 Logic을



공통 Pas 에 구현을 해보니 컴파일시



Undeclared identifier : 'SelectNext' 라는 Error 가 발생합니다..



uses 구문에 Controls 를 추가해도 동일한 Error가 발생하더군요.



사용한 Case 를 말씀드리면..



공통Pas 내의 Procedure 는 다음과 같습니다.



**********************************************************************

procedure gpEditBox_onKeyup(ColumnInfoRec: array of TColumnInfoRec ; Sender : TEdit ; ColCount : Integer);

begin



if ( tmpStr = 'AAA' ) then

SelectNext(TEdit(Sender),True,True);

end;

**********************************************************************



이 프로시져를 호출하는 쪽은 다음과 같습니다.



**********************************************************************

gpEditBox_onKeyup(ColumnInfoRec, TEdit(Sender), ColCount);

**********************************************************************



고견을 부탁드립니다..









1  COMMENTS
  • Profile
    mephy 1999.04.29 22:31
    이누리 wrote:

    > 안녕하세요

    >

    > 각 Form 에서 SelectNext 를 사용한 경우 Error 가 나지 않았는데

    >

    > SelectNext 를 사용하는 Logic을 Module화 하기 위해 해당 Logic을

    >

    > 공통 Pas 에 구현을 해보니 컴파일시

    >

    > Undeclared identifier : 'SelectNext' 라는 Error 가 발생합니다..

    >

    > uses 구문에 Controls 를 추가해도 동일한 Error가 발생하더군요.

    >

    > 사용한 Case 를 말씀드리면..

    >

    > 공통Pas 내의 Procedure 는 다음과 같습니다.

    >

    > **********************************************************************

    > procedure gpEditBox_onKeyup(ColumnInfoRec: array of TColumnInfoRec ; Sender : TEdit ; ColCount : Integer);

    > begin

    >

    > if ( tmpStr = 'AAA' ) then

    > SelectNext(TEdit(Sender),True,True);

    > end;

    > **********************************************************************

    >

    > 이 프로시져를 호출하는 쪽은 다음과 같습니다.

    >

    > **********************************************************************

    > gpEditBox_onKeyup(ColumnInfoRec, TEdit(Sender), ColCount);

    > **********************************************************************

    >

    > 고견을 부탁드립니다..

    >

    >

    >

    >



    SelectNext함수는 Pubished로 선언된 함수이기 때문에 그렇게 사용할 수 없습

    니다.



    하지만 간단히 다음과 같이 함수를 만들어 주면 쉽게 SelectNext를 구현할 수 있습니다.





    unit uImsi;



    interface



    uses

    Classes, StdCtrls, Forms, controls;



    procedure GoNextC(CurControl: TWinControl; CheckTabStop: Boolean);

    procedure GoBackC(CurControl: TWinControl; CheckTabStop: Boolean);



    implementation



    function FindNextControl(CurControl: TWinControl;

    GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;

    var

    I, StartIndex: Integer;

    List: TList;

    begin

    Result := nil;

    List := TList.Create;

    try

    Screen.ActiveForm.GetTabOrderList(List);

    if List.Count > 0 then

    begin

    StartIndex := List.IndexOf(CurControl);

    if StartIndex = -1 then

    if GoForward then StartIndex := List.Count - 1 else StartIndex := 0;

    I := StartIndex;

    repeat

    if GoForward then

    begin

    Inc(I);

    if I = List.Count then I := 0;

    end else

    begin

    if I = 0 then I := List.Count;

    Dec(I);

    end;

    CurControl := List[I];

    if CurControl.CanFocus and

    (not CheckTabStop or CurControl.TabStop) and

    (not CheckParent or (CurControl.Parent = Screen.ActiveForm)) then

    Result := CurControl;

    until (Result <> nil) or (I = StartIndex);

    end;

    finally

    List.Free;

    end;

    end;



    procedure GoNextC(CurControl: TWinControl; CheckTabStop: Boolean);

    var

    GoForward : Boolean;

    begin

    GoForward := True;

    CurControl := FindNextControl(CurControl, GoForward,

    CheckTabStop, not CheckTabStop);

    if CurControl <> nil then CurControl.SetFocus;



    end;



    procedure GoBackC(CurControl: TWinControl; CheckTabStop: Boolean);

    var

    GoForward : Boolean;

    begin

    GoForward := False;

    CurControl := FindNextControl(CurControl, GoForward,

    CheckTabStop, not CheckTabStop);

    if CurControl <> nil then CurControl.SetFocus;

    end;



    end.