2012-03-09 3 views
0

에 선언되지 않은 양식 요소 나는이있어 : 버튼을 양식에 존재하는 동안델파이 VCL : 사용자 지정 프로 시저/기능

procedure Welcome(user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then btCustomers.Text = 'Customer overview'; 
end; 

비록, BTCUSTOMERS는 '선언되지 않은 식별자'를 선언한다. 내가 뭘 놓치고 있니?

P.S. 이 양식을 OnCreate 양식으로 처리해야한다는 것을 알고 있지만 Welcome 프로시 저는 외부 양식에서 호출됩니다.

+1

왜 당신이 어떤 클래스의 멤버가 아닌 프로 시저를 사용하고 있습니까? 'procedure TMyForm.Welcome'은'btCustomers'가'TMyForm'의 멤버라면'btCustomers'에 접근 할 수 있습니다. 객체 지향 프로그래밍 = 좋은 아이디어. –

답변

5

버튼을 차례로 참조 할 수 있도록 양식에 대한 참조를 전달할 수 있습니다.

procedure Welcome(form: TMyForm; user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then form.btCustomers.Text = 'Customer overview'; 
end; 

그러나 개체에 최초 파라미터로 참조 걸리는 전역 함수를 가질 때마다, 그 대상의 후보 방법이있다. 그래서 TMyForm에 메소드를 추가하십시오.

procedure TMyForm.Welcome(user: string; accesslevel: integer); 
begin 
    if accesslevel>= 10 then btCustomers.Text = 'Customer overview'; 
end; 

그리고 다음과 같이 호출 :

MyForm.Welcome(user, accesslevel); 
+3

이 함수를 전역 적으로 사용하면 Button을 직접 업데이트하는 대신 새로운 문자열을 출력으로 반환하게됩니다. 그런 다음 호출하는 Form은 로컬 버튼 업데이트와 같이 함수가 종료 될 때 해당 출력으로 수행 할 작업을 결정할 수 있습니다. 그렇게하면 함수가 실패 할 확률이 줄어들고 사용 방법을 모르게되므로 원하는 경우 다른 용도로 재사용 할 수 있습니다. –

+0

그건 아주 좋은 지적입니다. –

관련 문제