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
[14559] Re:변수질문입니다.
gomsun2 [vhrvnd723] 1961 읽음    2013-01-13 16:24
최만기 님이 쓰신 글 :
: 생초보다 보니..처음에 계획했던거에서 점점 할수있는거로 낮춰서 코딩을 하고 있습니다..
:
: 검색능력이 부족해서 그런지 찾을수 있을꺼 같은데..결국 못찾네요...(작업중인 코딩파일 첨부하였습니다....)
:
: 1. 변수 질문(전역변수? / 지역변수?)
안녕하세요 최민기님.
전역변수와 지역변수는 상대적인 개념입니다.

Delphi는 선언되는 변수의 위치에 따라 가시성을 지정할 수 있습니다.
예를 들어 함수 내부에서 변수를 선언하였다면 함수를 벗어 나면 해당 변수에 접근 할 수 없습니다.
procedure DoSomething;
var
  LVal: String;
begin
  LVal := 'Delphi!!';
end;

LVal는 DoSomething 이라는 메소드 지역에서만 유효하며 외부에서는 사용 할 수 없습니다.

procedure DoSomething;
var
  LVal: String;
  function DoSub: String;
  var
    LSub: String;
  begin
    LSub := LVal +  ' ' + 'C++Builder';
    Result := LSub;
  end;
begin
  LVal := LSub;
  WriteLn(DoSub); // "Delphi C++Builder" 가 출력된다.
end;

LSub 는 DoSub 지역안에서만 유효합니다.
반면 LVal은 DoSomething 지역 안에서 유효합니다. DoSub도 DoSomething지역에 포함됩니다.
따라서 DoSub 안에서 LVal 에 접근 할 수 있습니다. 하지만 DoSomething 에서 DoSub의 지역에 있는 LVal에는 접근 할 수 없습니다.

이런 개념은 Unit.pas에서도 유효한데 표현 방법이 차이가 있습니다.
Unit내부에서 지역의 범위를 설정하는데 사용되는 키워드는 "interface" 와 implementation 입니다.

unit Unit18;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm18 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form18: TForm18; // uses 에 Unit18을 선언하면 Form18에 접근 할 수 있습니다.

implementation

{$R *.dfm}
// 이 후 선언하는 변수는 Unit18안에서만 사용하는 지역 변수 입니다.
var
  LocalUnit18: String; 

procedure doSomething;
begin
  LocalUnit18 := 'BorlandForum'; // 하지만 doSomething 입장에서는 Unit18안에 선언되어 있는 전역 변수지요 :)
end;

end.

doSomething 입장에서는 LocalUnit18 은 전역변수 입니다.

unit Unit19;

interface

uses
  Unit18, // 다른 유닛을 호출 하였습니다.

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm19 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form19: TForm19;

implementation

{$R *.dfm}

procedure DoJob;
begin
  Unit18.Form18 // 이렇게 호출이 가능합니다. Form18은 Unit18의 Inteface영역에 선언된 전역변수 이기 때문입니다.
  // Unit18.LocalUnit18 // 이아이는 불러 사용할 수 없습니다. Unit18의 지역변수 이기 때문에 가시성의 제한을 받기 때문입니다.
end;

end.


: 1~13의 라디오 버튼이 있습니다. 그중에서 하나선택(값1 저장)
:
: 2-1 /2-2 둘중에 하나선택(값2 저장)
질문의 의도를 모르겠네요 :)

:
: 구현을 못하겠습니다..ㅠ 자세히 알려주시면 감사하겠습니다..
:
: 2.동적으로 폼생성 질문
:
: 폼2개를 만들어서 연결을 시켰는데, 정적폼이 아닌 동적폼으로 하래서 검색을 해서 동적폼을 만들었습니다.
:
: 폼1에서 폼2로 동적으로 잘 넘어갑니다.
:
: 하지만 폼2에서 폼1로 다시 돌아올시 멈춰버립니다.
:
: 검색한 자료대로 수정해서 했는데, 뭐가 문제가 있는지 못찾겠습니다..ㅠㅠ
:
: +Available Form으로 폼2를 넘겨서 동적폼생성작업을 했는데, 만약 폼2를 수정할시에는
:
: 어떻게 수정해야하는지도 알려주시면 정말로 감사하겠습니다.ㅠ_ㅠ

폼 수정에 관한 코드는 Form2에서 만드세요.
이를 설명하기에는 많은 시간이 필요합니다. 일단 도서나 자료집을 보시기를 권해 드립니다.
볼포 강좌/문서에 델파이 4 모든것 이라는 책 이나 델마당 동영상 강좌도 좋습니다. :)

+ -

관련 글 리스트
14543 변수질문입니다. 최만기 1681 2012/12/28
14559     Re:변수질문입니다. gomsun2 1961 2013/01/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.