안녕하세요
각 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);
**********************************************************************
고견을 부탁드립니다..
> 안녕하세요
>
> 각 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.