unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
(1)
private
{ Private declarations }
public
{ Public declarations }
end;
(2)
한 프로시져를 (1) 위치에 선언하는 것과 (2) 위치에 선언하는 것에는 어떤 차이가 있나요?
이런 질문을 드리는 이유는..
아래코드에서 사용되는 procedure test(S:String);라는 프로시져를 선언한 위치에 따라 (1)에 선언하면 에러가 발생하고
[Error] Unit1.pas(41): Incompatible types: regular procedure and method pointer
(2)에 선언하면 정상적으로 실행됩니다. 물론 (1)에 선언시 아래 코드에서
procedure TForm1.test(S:String);라고 적었습니다.
아래부분이 테스트한 코드입니다.
=====================================
//위 코드부분에 이어서...
type
TTestProc = procedure(S:String);
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure test(S:String);
begin
ShowMessage(S);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
TestProc : TTestProc;
begin
TestProc := test; //
TestProc('1234');
end;
답변 주시면 감사하겠습니다.
미리 감사드려요! :)
(1)에 선언된 함수는 현재 유니트에서 사용합니다.
Type에 TForm1의 클래스에 선언 되어 있으므로
아래부분에서 함수 원형 부분에 ...
Procedure TForm1.Text(Str:String);
이렇게 되어야 하구요.
(2)부분은 독립적으로 실행되는 함수라고 생각
하는게 좋을것 같습니다.
더 고수님 있으면 좋은 설명 부탁 합니다..