Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[2815] [해결] [델파이] 광역변수 사용 & Field Format입력출력
grcsb [ ] 2019 읽음    1998-05-16 17:36
* 어떠분이 질문하신 것에 대한 답변입니다..
  죄송하지만 지금 이 아이디는 제 아이디가 아닙니다..
  메일을 보내실 때는 제목에 수신자를 '류'라고 해주세요..
  그리고 메일은 자주 읽지 못하거나 다른 사람이..
  읽을 수도 있습니다..
  다른 분들에게도 도움이 될까하여 메일대신 게시판에
  답변을 드립니다.  그럼 부족하나마 도움이 되시기를..


질문 1
여러개의 폼이 있는데...
한폼에서 필요시에 다른 폼을 불러다 쓸경우
기존에 쓰이던 특정 변수가 다른폼에도 사용이 가능할려면...
어떻게 해야 하는지....(그러니까 광역변수 같은거죠.. )
간단 예를 든다면.....
//---------------

* 답변 1
  아래의 경우 Unit1 즉 Form1이 Unit2(Form2)를 사용하는
  경우입니다.  Error라고 표시된 부분은 지역변수를 사용하였기
  때문입니다.

  Unit Unit1  // Form1에 해당하는 Unit
  ...
  Interface
  Type
      TForm1 = Class(TForm)
      Public
      End;
  ...
  Implementation
  Uses
      Unit2;  // Form1에서 Form2를 사용
  ...
  Procedure TForm1.Button1Click(Sender:TObject);
  Begin
    // Format 함수는 변수들을 포멧을 주어서 문자열로 변환 합니다.
    // 소수 앞 3, 소수 2자리 출력
    ShowMessage(Format('a = %3.2f', [Form2.a]));  // Error
    ShowMessage(Format('a = %3.2f', [Form2.b]));
    ShowMessage(Format('a = %3.2f', [Form2.c]));
    ShowMessage(Format('a = %3.2f', [Form2.d]));  // Error
  End;
  End.

  Unit Unit2  // Form2에 해당하는 Unit
  ...
  Interface
  Type
      Form2 = Class(TForm)
      Private
        // 지역변수 영역
        a : Real;
      Public
        // 광역변수 영역
        b : Real;
      End;
  Var
    // 광역변수 영역
    Form2 : TForm2;
    c : Real;

  Implementation
  Var
    // 지역변수 영역
    d : Real;
  ...
  End.

  하지만 반대의 경우 즉 Unit1의 변수들을
  Unit2에서 사용해야할 경우, 이경우에 Unit2에 Unit1을
  Uses 시키면 에러가 납니다.  Uses라는 명령어는 종속적인
  명령어라고 생각하시면 됩니다.  Uses Unit2라는 표현은
  Unit2가 Unit1에 종속되었다는 말입니다.  그런데 다시
  Unit1을 Unit2에 종속시키려면 Logical Error인거죠.
  이런 프로그램을 작성 중이라면, 일단 설계에 문제가
  있는 것으로 생각하셔야 합니다.  다만 어쩔 수 없거나
  그런 표현이 효과적인 경우에는 아래와 같이 하시기 바랍니다.
  즉, Form2에 해당 변수와 같은 형태를 선언하시고
  Form2를 부르기 전에 사용하고자 하는 변수의 내용을 옮기는
  것 입니다.

  Procedure TForm1.Button1Click(Sender:TObject);
  Begin
    Form2.b:= Form1.e; // Form2.b:= e; 라고 해도 됨
    Form2.ShowModal;
  End;
 
  * 마지막으로 광역변수를 많이 사용하는 것은 별로 좋은
    프로그램 설계 습관이 아닙니다.  그것은 프로그램을 이해하기
    힘들게 만들기 때문입니다.  Class (Object) 프로그래밍의
    장점 중 하나는 변수들의 캡슐화를 들 수 있습니다.


질문 2
소숫점을 갖는 dbase 화일 필드가 있을시...
자료를 입력 받는 부분과 기록된 자료를 조회해주는 부분에서...
소숫점 2자리까지만 입력받거나 출력할려면 어떻게 해줘야 하는지...
       어떻게 해야 하는지....
//---------------

* 답변 2
  우선 dbase라고 하시니 너무 기억이 생소해서..
  입력받는 부분에서는 dbase의 필드 설계시 소수점 몇 자리까지
  입력받을 것인지 정의할 수 있는 것으로 기억이 되는데요..
  우선 출력부터 설명을 드리면..  Format이라는 함수를 사용하세요..
  자세한 것은 도움말을 나중에 살펴보는 것도 잊지 마시고요..

  Format('출력 형태(Format)', [변수1, 변수2, 변수3, ...]);
  예)
    Var
       r : Real;
       a, b : Integer;
    Begin
      Format('a = %d, b=%2d', [a, b]);
      // %d는 정수 출력 포멧으로 앞에 숫자가 붙으면 항상
      // 숫자만큼의 영역을 확보한 후에 출력합니다.

      Format('r = %10.2f', [r]);
      // 문의하신 내용입니다.  소수점 두자리까지만 출력

  또다른 방법은 Field 자체에 입력형식을 정의하는 것입니다..
  각 Field Object에는 DisplatFormat과 EditForamt이라는..
  프로퍼티가 있습니다.  만약 Field 에디터를 사용하시지 못한다면..
  우선 Table 콤포넌트가 Open된 상태에서 더블클릭을 하시고..
  떠오르는 Field 에디터에서 오른쪽 마우스를 클릭..
  Add Fields를 선택하시고 모두 선택하세요..
  그리고 해당되는 Field를 클릭하시면 오른쪼그이 Object Inspector에..
  나타납니다..
 
  원하시는 형태는 다음과 같습니다.  더 자세한 포멧형식은 도움말을
  참고하세요..
    DisplatFormat:= '0000.00';


* DB 프로그램에서 손을 땐지 1년이 되어 가다보니..
  이제 가물거리는 내용이 많군요..
  부디 도움이 되셨기를..


+ -

관련 글 리스트
2815 [해결] [델파이] 광역변수 사용 & Field Format입력출력 grcsb 2019 1998/05/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.