안녕하세요.
현재
procedure TMainForm.Recovery1Click(Sender: TObject);
Begin
if (w_userID='LIMYO') then -- 유저의 권한에 따라 실행..
Begin
처리내용
else
ShowMessage('권한이 없습니다!');
end
형식으로 버튼 클릭이벤트 마다 하드코팅 되어있는데요.
권한에 따라 버튼의 클릭이벤트를 다르게 나타내고 싶습니다.
권한이 없는 경우 ShowMessage('권한이 없습니다!');를 공통적으로 나타내고
권한이 있는 경우 해당 실행내용을 처리하게 하고 싶습니다.
권한 검사하는 모듈을 따로 만들고, 그 모듈에서 권한 그룹을 검사하여서
권한이 있는경우 해당 폼의 버튼클릭이벤트를 실행하고,
권한이 없는경우 해당 폼의 버튼 클릭이벤트를 실행하지 않고 ShowMessage('권한이 없습니다!');를
나타내고 싶습니다.
procedure procVerify
begin
if (w_userID='LIMYO') then -- 유저의 권한에 따라 실행..
Begin
폼명1.버튼1클릭이벤트 그대로처리
ese
폼명1.버튼1클릭이벤트 처리내용대신
ShowMessage('권한이 없습니다!'); 표시
if !(w_userID='LIMYO' or w_userID='LIDO' ----) then -- 권한이 있는 유저가 아닌경우
Begin
폼명2.버튼2클릭이벤트 처리내용대신
ShowMessage('권한이 없습니다!'); 표시
ese
폼명2.버튼2클릭이벤트 그대로처리
if !(w_userID='ABC' or w_userID='DEF' ----) then -- 권한이 있는 유저가 아닌경우
Begin
..............................
end;
이렇게 동적으로 이벤트처리를 변경할 수 없나요?
※ 목적 : 프로그램의 하드코딩을 방지하고, 해당 유저 및 권한 그룹에 따른 권한을 파악하기 쉽도록 하기 위함.
만약 권한이 없는 경우 근냥 Button을 Disable시키면 안된나요?
권한이 바뀌면 그 권한에 맞춰 버튼을 enable 또는 disable시키는 코드를 만들어두변
"권한이 없습니다."라느 메세지를 굳이 띄우지 않아도 될것 같은데...
-------------------------------------------------------------------------------
아니면 권한체크하는 함수를 만들어 두고 ButtonClick이벤트의 맨 첫번째 줄에
그 함수 호출 코드를 넣도록 하면 어떤가요?
procedure procVerify 를 procedure 가 아닌 function으로 만들어 두고
<!--CodeS-->
function procVerify
begin
...
end;
TForm1.Button1Click();
begin
if(not procVerify )then Exit; // 이한 줄을 모든 ButtonClick에 넣어도 될듯..
...
end;
<!--CodeE-->
------------------------------------------------------------------------------------------
그런데 위와같이 모든 Button의 OnClick이벤트에 저렇게 한줄 넣기가 싫다는 거죠
버튼이 계속 추가될수도 있구...
동적으로 Button의 OnClick이벤트 핸들러는 얼마든지 바꿀수 있습니다.
가령
Botton1.OnClick := MyButtonClick ; //이런식으로요
MyButtonClick 함수에 권한 체크 기능이 있구요
문제는 권한이 있는 경우 원래 original 이벤트 핸들러를 호출해줘야 겠죠
그럴러면 button의 original 이벤트 핸들러를 어디다가 저정해뒀다가 호출해줘야하는 문제가 있네요...
------------------------------------------------------------------------------------------
그런데 저렇게 OnClick이벤트 핸들러를 동적으로 바꾸지 않아도 얼마든지 가능할것 같은데요..
WM_LBUTTONUP 이나 WM_CHAR , VK_RETURN 에 OnClick이벤트가 호출되죠
그렇다면 Application.OnMessage에 이벤트 핸들러를 걸어두고
넘어오는 tagMSG에서 tagMSG.hwnd 를 이용하여 그놈이 TButton이면 권한체크를 합니다.
권한이 있으면 pass
없으면 tagMSG.Handled :=ture 로 해줘버립니다.
요게 제일 코드가 짧을듯...
그럼..