Q&A

  • 긴급 : Private에 있는 변수 참조/변경 방법
private에 선언된 변수를(FMainForm) 참조, 값 변경을 하려고 합니다.



C++ 에서는 Class를 포인트처럼해서 값 참조가 가능하더고 들었습니다.(방법은 분명히 있슴) 델파이에서도 비슷한 방법이 있다고 들었는데 혹시 아시는 분...



이거 가능하면 ActiveForm을 MDI로 만들어서 그안에 Child Form을 띄울수가 있을꺼 같은데...





부탁드립니다.



PS : Forms.Pas를 직접 수정해서 프로그램 디렉토리에 유지하면(MainForm을 read/write 로 바꿈) 가능하지만 이방법은 조금 문제가 있어서 직접 값을 참조 해야합니다.



그리고, 델파이 VCL 소스를 수정해서 다시 컴파일 하는 방법 좀 갈쳐주세요(최후의 수단)

2  COMMENTS
  • Profile
    민성기 2000.02.23 09:27
    안녕하세요~ 민성기 입니다.

    말씀하신 개념을 '프랜드'라구 하던가요..?? 암튼 델파이에서는 한 유니트 내에 선언된 넘들 끼리는 Private 영역의 변수도 맘대로 쓸 수 있습니다.



    그럼, 현재 유니트에 선언되지 않은 넘은 어케 하느냐면... 이넘을 현 유니트에 또 선언하심 됩니다.



    다음은 판넬을 예로 들은 것인데... 판넬의 Canvas객체는 Private영역에 들어가 있습니다. 그러나 다음의 방법을 통해 끄집어 낼 수 있죠.



    Type

    TMyPanel = class(TPanel);



    procedure Form1.Button1Click(Sender: TObject);

    begin

    TMyPanel(Panel1).Canvas.LineTo(100, 100);

    end;



    그럼...



    ---------------------------------------------------------------------------

    델파이의 모든 것. 델파이 코리아. http://www.delphikorea.com

    ---------------------------------------------------------------------------



  • Profile
    채재호 2000.02.23 18:22
    > 말씀하신 개념을 '프랜드'라구 하던가요..?? 암튼 델파이에서는 한 유니트 내에 선언된 넘들 끼리는 Private 영역의 변수도 맘대로 쓸 수 있습니다.

    >

    > 그럼, 현재 유니트에 선언되지 않은 넘은 어케 하느냐면... 이넘을 현 유니트에 또 선언하심 됩니다.

    >

    > 다음은 판넬을 예로 들은 것인데... 판넬의 Canvas객체는 Private영역에 들어가 있습니다. 그러나 다음의 방법을 통해 끄집어 낼 수 있죠.

    >

    > Type

    > TMyPanel = class(TPanel);

    >

    > procedure Form1.Button1Click(Sender: TObject);

    > begin

    > TMyPanel(Panel1).Canvas.LineTo(100, 100);

    > end;

    >



    이 방법은 protected 내의 변수는 참조/변경 가능합니다.(Canvas는 protected에 선언되어 있습니다)



    직접 private에 있는 FCanvas를 참조/변경하는 방법이 필요합니다.(왜냐? private에 선언해놓고 수정할수 있는 어떠한 방법도 제시를 안해논게 있어서요.)



    아마 불가능 한거 같습니다(방법이 있으면 좋으련만...)

    따라서 직접 VCL소스를 고치려고 합니다. 그런데 이렇게하면 VCL을 다시 컴파일해야하는데 컴파일 방법이 필요합니다. 도와주세요