델파이에 컴포넌트를 추가할때는 2가지 방법이 있다.
dpk(팩키지파일)와 pas(소스파일)가 있는 경우와 dpk없이 pas만 있는 경우가 설치가 있다.

dpk와 pas가 존재하는 컴포넌트 추가하기

1.file/open을 클릭하여 dpk파일을 엽니다.
2.팩키지관리자창이 뜨면 install을 클릭하여 컴포넌트를 추가합니다.
3.컴포넌트의 라이브러리를 연결해야 합니다.
4.tools/environment options을 클릭합니다.
5.library탭을 클릭한후 library path의 ..을 클릭하여 새창이 뜨면 거기서 ..을 눌러 컴포넌트
라이브러리 경로를 선택후 ok을 클릭합니다.
6.마지막으로 add을 누르고 ok을 클릭합니다.

dpk는 없는데 pas가 존재하는 컴포넌트 추가하기

1.file/new/other에서 package를 클릭합니다.
2.팩키지관리자창이 뜨면 add를 클릭한후 unit file name을 클릭하여 컴포넌트에 필요한
모든 pas파일을 선택합니다.
3.install을 클릭하여 컴포넌트를 추가합니다.
4.file/save as을 클릭하여 dpk파일을 저장합니다.
※ 나중에 또다시 팩키지 파일을 설치시에 편하게 설치하기 위해서입니다.
※ component/install component 메뉴를 이용해서 컴포넌트를 추가할수 있지만 좀 어렵다.

설치된 컴포넌트 삭제하기

1.component/install package를 클릭합니다.
2.design packages에서 삭제하고 싶은 컴포넌트를 선택합니다.
(컴포넌트를 선택후 components를 눌러 컴포넌트 확인)
3.remove를 클릭하여 삭제합니다.
(add는 bpl파일을 추가시킬때 사용합니다.-볼랜드팩키지라이브러리)
4.tools/environment options을 클릭합니다.
5.library탭을 클릭한후 library path에서 삭제한 컴포넌트의 path를 선택후 delete합니다.

설치된 컴포넌트가 어떤 컴포넌트 페이지에 등록되어 있는지 모를때

1.설치하려는 dpk파일을 열어 팩키지 관리자에서 pas파일을 열어서 아래의 부분을 참고한다.

procedure Register;
begin
  RegisterComponents('Samples', [TMacProgress]);
end;

위의 내용에서 보듯이 'Samples' 컴포넌트 페이지에 컴포넌트가 추가된다.

팔레트 페이지에 특정 페이지 추가하기

팔레트페이지에서 오른쪽 마우스를 누른후 properties을 누른다.
add버튼을 클릭한후 적당한 팔레트페이지명을 입력하고 확인버튼을 누릅니다.
델파이6까지는 비어있는 팔레트페이지도 보였으나 델파이7부터는 비어있는
팔레트페이지는 화면에서 보이지 않습니다.
※ hide는 화면에 팔레트 페이지를 보이지 않게 하지만 한번 hide하면 보이게 하기 힘드므로 사용하지 않는다.

Activex 컨트롤을 컴포넌트로 추가하기

1. component/import activex control을 클릭합니다.
2. 상단 리스트에서 등록된 activex을 선택후 install을 클릭하며 컴포넌트가 추가됩니다.

3. 상단 리스트에서 등록되지 않은 activex는 add버튼을 클릭후 추가하고 싶은 ocx 파일을 선택한후install을 클릭합니다.


델파이는 VCL(visual compoment library)이라고 불리는 하나의 객체 지향적인 구조를

사용한다. VCL이라는 말은 Visual Component Library, 즉 볼 수 있는 컴퍼넌트의

집합이라고 할 수 있는데, 컴퍼넌트는 VCL의 계보 중에서  TComponent와 그 자손으로

이어진 계층을 말합니다.

그런데 VCL를 살펴보면 컴퍼넌트 중 에서 볼 수 없는 즉 Visual하지 않는 컴퍼넌트도

많다는 것을 알 수 있습니다.더욱이 컴퍼넌트가 아닌 오브젝트도 많이 볼 수 있습니다.

(TStrings나 TCanvas 같은) 따라서 엄밀하게 VCL은 틀린 말입니다.

그럼에도 불구하고, 델파이에서 왜 VCL이라고 이름을 붙였을까? 그것은 아마도 이들

컴퍼넌트가 가장 핵심적인 역할을 담당하고 있기 때문일 것입니다.

우리가 어플리케이션을 만들어 실행시키면 볼 수 있는 것의 대부분이 이들 컴퍼넌트입니다.

 

컴퍼넌트 정의

 

기술적으로 컴퍼넌트는  VCL 계보에서 TComponent 클래스의 모든 자손 오브젝트를

나타냅니다. 즉 TComponent에서 파생된 모든 오브젝트를 컴퍼넌트라 부릅니다.

그리고 VCL 계보에서 TBitmap, TStringList와 같이 컴퍼넌트에 속하지 않는 것들은

오브젝트라고 부릅니다. 

개념적으로 컴퍼넌트는 그 용어 자체에서 의미하는 바와 같이 부품을 나타냅니다.

즉 어풀리케이션을 만들기 위해 사용하는 부품을 의미합니다. 자동차가 각종 차동차

부품으로 이루어지듯이, 델파이 어플리케이션도 각종 부품(컴퍼넌트)로 이루어지는

것입니다.

물론 자동차나 어플리케이션을 부품(컴퍼넌트)를 조립(사용)하지 않고 만들수도 있습니다.

그러나 그러한 경우 생산성이나 효율성은 무척이나 나빠지게 될 것입니다.

VCL에는 컴퍼넌트가 아닌 다른 많은 오브젝트가 있습니다. 그럼에도 불구하고

컴퍼넌트를 중요시하는 것은 , 설계시에는 이 컴퍼넌트를 사용하기 때문입니다.

즉 설계시에 사용할 수 있는 컴퍼넌트이고, 따라서 컴퍼넌트가 시각적 프로그래밍의

핵심이라 할 수 있습니다.

컴퍼넌트가 아닌 다른 오브젝트는 내부에서 컴퍼넌트를 위해 이용하는 도구이거나

아니면 델파이에서 사용하는 오브젝트들입니다.

 

컴포넌트 종류

 

visual component

시각적으로 표현 가능하며 내부적으로 연산이 가능한 컴포넌트

non-visual component

시각적으로 표현 불가능하며 내부적으로 연산이 가능한 컴포넌트

 

컴포넌트의 기본 속성(컴포넌트에 거의 공통적으로 들어가는 속성이다.)
 
Name
컴포넌트의 이름을 가리킨다. Name 은 반드시 영문이나 밑줄 시작해야 하며 한글, 특수문자 등은 들어갈 수 없다.
Caption
컴포넌트의 제목을 나타내준다. 한글이나 특수문자 등도 모두 쓰일 수 있다.
Alignment
컴포넌트 내부의 문자열이 정렬되는 방식에 대한 속성이다. 디폴트값은 taLeftJustify 이다.
taLeftJustify : 문자열이 컴포넌트의 좌측에 정렬된다.
taCenter : 문자열이 컴포넌트의 중앙에 정렬된다.
taRightJustify : 문자열이 컴포넌트의 우측에 정렬된다.
Autosize
컴포넌트의 내용에 맞게 크기를 자동으로 조정할지를 결정
AutoSelect
사용자가 Edit component나 Memo 컴포넌트로 tab할 때 문자가 자동으로 전체선택될지를 조정

BorderStyle
컴포넌트의 border 형을 결정
CharCase
영문자를 표현하는 방법(입력하는대로 또는 무조건 대문자 또는 무조건 소문자)
Color
컴포넌트의 배경 색을 정한다.
Ctl3D
Control이 3차원인지 2차원인 모양인지 결정
Cursor
컴포넌트가 차지한 영역에서 나타나는 마우스 포인터의 이미지를 결정
DragCursor
끌어당긴 개체를 컴포넌트위에 올려 놓을 때 나타나는 마우스 포인터의 이미지 결정
DragMode
컴포넌트의 끌고 놓는 동작을 결정
Enabled
컴포넌트의 기능을 일시적으로 활성, 또는 비 활성화 시킬 수 있다. 디폴트값은 True이다.
Font
컴포넌트에 나타나는 문자의 글꼴, 색상,크기 등의 여러 속성을 지정한다.
Hint
OnHint event발생시 나타나는 문자열을 결정 (마우스 커서가 컴포넌트나 메뉴 항목에 있을 때 나타남)

Tag
일반적으로 Tag Property는 볼랜드사에서 프로그래머를 위해서 임의로 만들어 놓은 Property 이며 temp변수로도 사용할 수도 있습니다.
LongInt의 형을 가지고 있으며 LongInt로서 할 수 있는 모든 것을 할 수도 있습니다.
일반적인 문자열, 정수, 실수 외에 델파이에서 지원되는 객체나 구조체, 또는 메모리까지도 
Tag에 넣어서 사용할수가 있습니다.

Height, width, left, top
Height : 컴포넌트의 크기 조절
width : 컴포넌트의 높이 조절
left : 컴포넌트의 맨 왼쪽 모서리의 위치 조절
top : 컴포넌트의 맨 위쪽 모서리의 위치 조절
HideSelection
개체가 Focus를 잃을 때 선택되어 있던 문자를 반전된 채로 남겨둘지를 결정
MaxLength
Edit 컴포넌트나 Memo 컴포넌트에 입력할 수 있는 최대 문자수를 결정. Zeor(0)은 제한이 없음을 의미
PasswordChar
Password를 입력할 때 Edit 컴포넌트나 Memo 컴포넌트가 어떤 특수문자를 나타낼지를 결정

ParentColor
 다음과 같이 컴포넌트의 색정보를 어디서 찾을지를 결정:
◆ 만약 값이 True면, parent component의 Color property를 사용
◆ 만약 값이 False면, 컴포넌트 자신의 Color property를 사용.
ParentCtl3D
 다음과 같이 Component의 3차원 모양을 어디서 찾을 지를 결정:
◆ 만약 값이 True면, parent component의 three-dimensional property를 사용
◆ 만약 값이 False면, component자신의 three-dimensional property를 사용

ParentFont
 다음과 같은 컴포넌트의 font 정보를 어디서 찾을지를 결정:
◆ 만약 값이 True면, parent component의 font property를 사용
◆ 만약 값이 False면, component자신의 font property를 사용

ParentShowHint
 다음과 같이 컴포넌트의 힌트를 어디서 찾을지 결정:
◆ 만약 값이 True면, parent component의 ShowHint property를 사용
◆ 만약 값이 False면, component자신의 ShowHint property를 사용
ReadOnly
실행시 read-only 컴포넌트를 만들어 사용자가 field나 dataset값을 변경할 수 없도록 함
ShowHint
 힌트가 사용될지 아닐지를 결정:
◆ 만약 값이 True면 힌트사용
◆ 만약 값이 False면, 힌트 사용 안함
Text
컴포넌트나 다른개체에 나타나는 문자열을 기술합니다.

 

TabOrder

 

Tab 키를 눌렀을 때 컴포넌트의 taborder대로 실행이나 입력준비 상태가 변경됨

 

※ taborder 속성값이 0 인 컴포넌트는 폼 생성시 자동으로 포커스를 얻습니다.

※ 아래 소스가 keydown 이벤트에 있다면 엔터 입력시 taborder 값이 0부터 큰값으로

포커스가 이동하게 됩니다.

if key = vk_return then

begin

    //# 엔터 입력시 taborder 값의 순서대로 포커스 이동됨

    SendMessage(self.Handle, WM_NEXTDLGCTL, 0, 0);

end;

 

TabStop

 컴포넌트에 tab를 사용할 지를 결정

※ taborder 값이 동작하려면 tabsop 속성값이 true로 되어 있어야함

 

Tab
 컴포넌트의 property로서 정수값을 저장하도록 함.주의: 델파이에 의해 직접 사용되지는 않지만 응용프로그램의 특별한 목적으로 사용할 수 있다.
Visible
프로그램 실행 시 컴포넌트를 보이게 할 것인지를 지정한다. 디폴트 값은 True이다.

 

컴포넌트의 기본 이벤트(컴포넌트에 거의 공통적으로 들어가는 이벤트이다.)

 

델파이의 이벤트는 콜백함수입니다.

콜백함수란 프로그래머가 그 함수의 사용을 명령해 주는 것이 아닌 이벤트, 메시지 등을

받았을 때 자동으로 실행되는 함수를 말한다.

 

OnChange 
개체나 컴포넌트에 지정된 값이 변화될 할 때 발생 
OnClick 

컴포넌트를 클릭할 때 발생 
OnDblClick 
컴포넌트를 두번 클릭할 때 발생

OnDragDrop 
끌어당긴 개체를 놓을 때 발생 
OnDragOver 

컴포넌트위로 개체를 끌 때 발생
OnEndDrag 
개체를 끄는 것을 끝낼 때 발생
OnEnter 
컴포넌트가 활성화될때만 발생 

컴포넌트로 포커스가 들어왔을때 발생
※ 자바스크립트의 onfocus 이벤트 핸들러와 같은 역할을 합니다.

 

OnExit

focus가 다른 컴포넌트로 움직일 때 발생

 

OnKeyDown

key를 눌렀을 때 발생. 특수키(ctrl, alt, shift, tab, enter, backspace,F1~F12 등등)에 반응함

ex1)

if key = 13 then

ShowMessage(‘d’);

 

※ keydown이벤트는 키값을 숫자로 리턴합니다.

※ keydown 이벤트에서 리턴하는 key 값은 10진수 정수입니다.

※ 위의 이벤트가 발생하려면 해당 폼의 Keypreview 속성이 True여야 한다.

※ F1부터 F12의 키값은 112부터 123입니다.

※ OnKeyUp 이벤트 발생하기 전에 발생한다.

※ 10진수 13은 아스키코드에서 엔터입니다.

 

ex0)

if Key = VK_RETURN then

ShowMessage(‘leejunsik’);

※ 엔터키값의 상수는 VK_RETURN 입니다.

 

예제1)

//# ctrl+v 키보드 입력시 발생

if (ssCtrl in Shift) and (Key in [86, 118]) then

begin

 ShowMessage(edit1.Text);

end;

 

예제2)

//# ctrl+c 키보드 입력시 발생

if (ssCtrl in Shift) and (Key in [67, 99]) then

begin

 ShowMessage(edit1.Text);

end;

 

예제3)

//# ctrl+v 키보드 입력시 발생

If (Shift = [ssCtrl]) and (Key = 67) then

begin

 ShowMessage(‘test’);

end;

 

OnKeyPress 이벤트

key를 눌렀을 때 발생. 특수키(ctrl, alt, shift, tab, enter, backspace,F1~F12 등등)에 반응안함

참고 : #13 – 엔터키 #9 – 탭키

ex)

if key = #13 then ShowMessage(‘d’);

※ keypress이벤트는 키값을 문자로 리턴합니다.)

※ 위의 이벤트가 발생하려면 해당 폼의 Keypreview 속성이 True여야 한다.

※ OnKeyUp 이벤트 발생하기 전에 발생한다.

 

StrCopy(@Key, pChar(UpperCase(Key)));

※ 영문자 입력시 자동으로 대문자로 변환됨

소스설명

char형 key를 받아서 UpperCase 함수로 대문자로 변환하여 string 형으로 리턴후

pChar함수에 의해 string형의 끝에 널제로를 붙히고 @Key로 복사한다.

char형 key앞에 @를 붙히면 pChar형으로 변환되며 strCopy는 pChar형 변수를 pChar형

변수로 복사할때 사용하는 함수이다.

 

예제1

//# 키보드 ctrl+c 입력시 발생

if Key = #3 then

begin

   ShowMessage(‘test’);

end;

 

예제2

//# 키보드 ctrl+v 입력시 발생

if Key = #22 then

begin

   ShowMessage(‘test’);

end;

 

OnKeyUp 이벤트

누른 Key를 놓았을 때 발생, 키를 누른후에 발생

※ OnKeyDown와 OnKeyPress 이벤트핸들러가 발생한후 발생하는 이벤트

 

금액 변경 예제

procedure TFw_212.wEdit2KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //# "거래후 카드 잔액" 변동 #//
  if (realgrid1.RowCount <> 0) and (wedit2.Text <> ”) then begin
    with realgrid1 do begin
      wedit7.Text := inttostr(strtoint(co_chardelete(Cells[9,row].AsString,’,’)) – strtoint(wedit2.text));

      //# 마이너스 정수 처리 #//
      if strtoint(wedit7.Text) < 0 then begin
        wedit2.Text := co_chardelete(Cells[9,row].AsString,’,’);
        wedit7.Text := ‘0’;
        exit;
      end;
    end;
    //# 0030, 00050 같은 정수에서 맨앞에 필요없는 0 없애기 #//
    wedit2.Text := inttostr(strtoint(wedit2.Text));
  end;
end;

 
procedure TFw_212.wEdit7KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //# "거래금액" 변동 #//
  if (realgrid1.RowCount <> 0) and (wedit7.Text <> ”) then begin//# 공백체크 없을시 에러난다. #//
    with realgrid1 do begin
      wedit2.Text := inttostr(strtoint(co_chardelete(Cells[9,row].AsString,’,’)) – strtoint(wedit7.text));

      //# 마이너스 정수 처리 #//
      if strtoint(wedit2.Text) < 0 then begin
        wedit2.Text := ‘0’;
        wedit7.Text := co_chardelete(Cells[9,row].AsString,’,’);
        exit;
      end;
    end;
    //# 0030, 00050 같은 정수에서 맨앞에 필요없는 0 없애기 #//
    wedit7.Text := inttostr(strtoint(wedit7.Text));
  end;
end;

—————————————————————————–

procedure TFw_d00.edit3KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  //# 0부터 99까지만 입력가능하게
  if ((Sender as TEdit).Text <> ”) then
  begin
    if (strtoint((Sender as TEdit).Text) > 99) then
    begin
      (Sender as TEdit).Text := ’99’;
    end;
    //# 앞에 0없애기
    (Sender as TEdit).Text := inttostr(strtoint((Sender as TEdit).Text));
  end
  else
  begin
    (Sender as TEdit).Text := ‘0’;
  end;

end;

 

OnMouseDown 
컴포넌트상에서 마우스 버튼을 눌렀을 때 발생 

 
OnMouseMove 
컴포넌트상에서 마우스를 움직일 때 발생 

 
OnMouseUp 
컴포넌트상에서 눌려있던 마우스 버튼을 놓았을 때 발생 

 
OnStartDrag 
끌어당기기를 시작할 때 발생

 
Form(폼) 속성/메소드
 
comment
 
메인폼 객채로써 프로그램 시작시 자동으로 만들어진다.
 
property
 
ActiveControl-form생성시 초기 포커스를 둘 컴포넌트를 지정
 
※ 사용예제(아래 Edit1에 포커스를 주는 두 명령은 같은 역할을 합니다.)

ActiveControl := Edit1;

Edit1.SetFocus;

※ 사용예제2

ActiveControl := RealGrid1;

 

AutoSize-폼에 놓여진 컴포넌트에 맞게 폼의 가로/세로 크기가 딱 맞추어진다.(권장)
PopupMenu-팝업메뉴 컴퍼넌트를 현재 Form에 적용한다.
AutoScroll-프로그램 실행시 폼의 사이즈 조절 유무를 설정한다.(True-조절 가능)
clientwidth – 테두리선을 제외하고 사용가능한 원도우 가로 크기를 설정한다.
clientheight – 캡션바와 테두리선을 제외하고 사용가능한 원도우 세로 크기를 설정한다.

width – 폼의 전체 가로 크기를 지정, 테두리선의 크기를 합친 크기이다.
height – 폼의 전체 세로 크기를 지정, 캡션바와 테두리선의 크기를 합친 크기이다.
 
clientwidth, clientheight 사용시점
윈도2000에서 개발한 프로그램이 XP(테마사용)에서는 크기가 변경되어 폼에 스크롤바가 생기는 경우가 있다. 이때는 OnCreate시에 ClientWidth와 ClientHeight속성을 강제로 지정하면 된다.
 
Cursor – 해당 폼안에서 컴포넌트를 제외한 곳에서의 커서를 설정한다.
crDefault – 기본적인 커서 모양
crHourGlass – 일반 처리시 커서 모양
crSQLWait – SQL 처리시 커서 모양

* 커서 변경 소스
Screen.Cursor := crDefault; //# 커서 모양이 기본 커서 모양으로 변경
Screen.Cursor := crHourGlass; //# 커서 모양이 모래시계 모양으로 변경

Screen.Cursor := crSQLWait; //# 커서 모양이 모래시계+SQL문자열 모양으로 변경

Keypreview – 이 속성이 True로 설정되면, 폼 위에 컨트롤이 있더라도 키보드와 관련된 이벤트가 발생하는 경우, 폼의 이벤트를 먼저 발생한 후에 컨트롤 이벤트를 발생한다.
HelpFile – 도움말 파일을 지정한다.
FormStyle-폼스타일을 정한다.
fsMDIChild-mid폼 자식으로 만듬
fsMDIForm-mdi폼 부모로 만듬
fsNormal(평범한 폼)
fsStayOnTop(항상 상단에 뜨는 폼)
※ 다른 프로그램과 같이 화면에 떠있더라도 fsStayOnTop를 적용한 프로그램은 항상 상단에 뜬다.
 
BorderStyle-폼의외곽선을 바꾼다.
bsNone(타이틀바가 없음)-제목표시줄과 외곽선이 안보이며 배경만 나온다.
※ 프로그램 시작폼에 많이 사용
bsToolWindow(사이즈조절불가능,타이틀바보임,조금만종료만표시,아이콘안보임)
bsSizeToolWin(사이즈조절가능,타이틀바보임,조금만종료만표시,아이콘안보임)
bsSizeAble(사이즈조절가능,타이틀바보임,종료/최대화/최소화표시,아이콘보임)-default
bsSingle(사이즈조절불가능,타이틀바보임,종료/최대화/최소화표시,아이콘보임)
bsDialog(사이즈조절불가능,타이블바보임,큰종료만표시,아이콘안보임)
※ 혹시 bsSingle설정이면서 최대화/최소화 표시가 안나오게 하려면 BorderIcons속성에서 최대화와 최소화 출력 여부를 체크하면됩니다.
(BorderIcons속성은 BorderStyle속성에 영향을 주지 않습니다.)
 
Icon – 제목표시줄의 아이콘과 실행파일의 아이콘을 설정합니다.

 

WindowState – 해당 폼이 화면에 출력될때의 형태지정

wsMaximized : 폼이 열릴 때 자동으로 최대화됨

wsMinimized : 폼이 생성될때 자동으로 최소화됨

wsNormal : 폼이 생성될때 최대화도 아닌 최소화도 아닌 일반상태로 출력됨

 

Position – 해당 폼이 화면에 출력될때 위치를 설정함

poMainFormCenter : 메인폼 화면의 가로세로의 정가운데에 출력됨

poDesktopCenter : 듀얼 모니터 화면를 합쳐서 가로세로의 정가운데에 출력됨

poScreenCenter : 듀얼 모니터 화면중 메인 화면의 가로세로의 정가운데에 출력됨

※ 듀얼모니터 환경에서 개발후 싱글모니터에 배포시 팝업창의 top, left 속성값이 마이너스

일때 화면에 안보일수도 있다. 이때는 정상적으로 폼이 보이기 위해 poMainFormCenter 값을

사용해야 한다.

poDesigned : 디자인모드시 위치하고 있는 그위치에 출력됨

※ WindowState 속성값이 wsMaximized, wsMinimized 이면 Position 속성값은 크게 의미가

없다.

 

Method

close-해당 품을 종료한다.

 

Standard 페이지

 

MainMenu Component

property

Checked-해당 메뉴를 체크한다.

Enabled-해당메뉴를 비활성화 한다.

Short Cut-바로가는 키 설정

※ Short Cut은 메뉴항목을 빠르게 선택하고자 키보드를 이용하여 조합키로서 해당

메뉴항목을 선택하는 방법이다. 물론 단축키와 유사하지만 Short Cut은 해당 메뉴가

떠있지 않는 상태에서 사용할 수 있지만 단축키는 메뉴가 떠 있을 때 사용하는 방법이다.

 

Label 컴포넌트

property

alignment-출력할 문자열을 정렬한다.

※ 한글이 제대로 출력안될때는 해당 Form의 폰트를 한글폰트로 바꾸면 됩니다.

(굴림체 추천)

transparent-라벨의 배경색을 투명하게 합니다.

※ shape component위에 label component을 놓고 transparents 속성을 true로 하면 이쁘게

디자인이 됩니다.(류님이 알려주셨음^^)

※ 이쁜 영문 폰트 설정 법 : 글꼴 – Verdana, 글꼴스타일 – 보통, 크기 – 20

 

StaticText 컴포넌트

comment

StaticText 과 Label 사이의 차이점은, StaticText 은 TWinControl 로부터 상속받아 윈도우

핸들을 가지고 있다는 점입니다.

※ 이쁜 영문 폰트 설정 법 : 글꼴 – Verdana, 글꼴스타일 – 보통, 크기 – 20

 

CheckBox 컴포넌트

comment

체크박스(CheckBox)가 선택할 수 있는 것은 ‘예’(체크가 된 상태)과 ‘아니오’(체크가 되어있지

않는 상태)이다.

property

Checked-체크박스(CheckBox)안에 ‘V’표시가 나타나게 할것인지를 결정한다.

Enabled-체크박스를 직접체크 가능하게 할지 안할지를 결정(true-직접체크 가능)

※ checkbox 의 Enabled 속성이 false 일때는 직접 체크와 이벤트도 실행 안되지만 대입

및 참조는 가능하다.

※ checkbox 의 Enabled 속성이 false 일때 setFoucs 함수를 사용하면 에러가 난다.

 

RadioButton 컴포넌트

Comment

라디오버튼은 여러개의 라디오버튼에서 오직 하나만 선택이 가능한 컴포넌입니다.
폼안에서는 모든 RadioButton이 자동으로 한그룹이며 다른 그룹으로 하려면 RadioGroup,GroupBox등을 이용해서 사용합니다.

Property

Checked-라디오박스(RadioButton)의 선택을 나타나게 할것인지를 결정한다.
※ 라디오버튼을 따로 그룹화하려면 2가지 방법이 있다.
1. 라디오그룹컴포넌트 사용하기
2. 패널컴포넌트안에 라디오버튼 넣어서 하나의 그룹으로 인식시키기

 

RadioGroup 컴포넌트

 

Comment

라디오그룹(Radio Group)컴포넌트는 그룹박스(Group Box)안에 라디오버튼(Radio Button)을

포함시켜 다른 라디오버튼(Radio Button)과 구분하여 사용할 수 있는 컴포넌트이다.

Property

Checked – 라디오버튼(Radio Button)이 선택되어있는지 여부를 나타낸다.

Columns – 한줄에 나타낼 수 있는 항목의 수를 지정

Items – 항목의 목록을 나타낸다.

ItemIndex – 기본 선택될 항목의 순서값을 나타낸다.(0 이 맨처음)

※ ItemIndex 속성의 리턴 데이타형은 정수형이다.

Method

radiogroup1.items.count-라디오버튼의 갯수

RadioGroup1.Items.Strings[radiogroup1.ItemIndex]-선택한 제목의 문자열 출

RadioGroup1.ItemIndex – 현재 선택된 항목의 순서값을 나타낸다.(0 부터 시작)

Etc

라디오그룹의 순서값으로 순서값에 해당하는 문자열 출력하기

RadioGroup1.Items.Strings[RadioGroup1.ItemIndex];

— 순서값에 해당하는 문자열이 출력됨

RadioGroup1.Items.Strings[1];

— 2번째 항목의 문자열이 출력됨

※ Strings 속성의 인수형은 정수이다.

 

Edit 컴포넌트

Comment

한줄로 입력을 받을 사용합니다.

Property

AutoSize – Edit 컴포넌트의 세로길이가 Font 속성에서 설정한 글자크기의 세로크기로

자동으로 조절된다.

※ TRUE – 자동 조절, 가로크기는 조절안됨

passwordchar-edit컴포넌트에 입력되는 형식을 지정합니다.

#0-입력되는 문자가 그대로 출력됩니다.

#-입력되는 문자가 #로 출력됩니다.

※ #가 아니라 다른 문자를 쓴다면 해당 문자로 출력이 가능함

BorderStyle-edit박스의 테두리선을 선택한다.

Ctrl3D-텍스트 박스를 3차원혹은 2차원 형태로 나타낸다.

ShowHint-팁을 보여줄지 여부

MaxLength-입력크기를 제한한다.

(3 – 3바이트 크기만 입력가능, 10 – 10바이트 크기만 입력가능)

※ 0 입력시 입력크기에 재한이 없음

AutoSelect – 프로그램을 실행시 제일 처음 Edit 컴포넌트에 포커스가 갈때 자동으로 전체

선택되어 질지 아닐지를 설정한다.(TRUE-자동 전체 선택)

Method

 

CanFocus 설명

해당 컴포넌트에 포커스가 가능한지 불가능한지 체크함

사용예제

//# 해당 컴포넌트가 화면에 보이는 상태라면 포커스명령 실행

if Edit1.CanFocus then

begin

  Edit1.SetFocus;

end;

※ CanFocus 명령없이 화면에 보이지 않는 컴포넌트에 setfocus를 주게되면 아래의

에러 메시지가 뜨게 된다.

Cannot focus a disabled or invisible window.

 

focus-입력부분으로 커서가 이동한다.

TIP1

Enabled속성이 false인상태의 Edit 컴포넌트로 SetFocus메소드를 사용했을때 아래의

에러가 납니다. ex) wEdit1.SetFocus;

Cannot focus a disabled or invisible window.

하지만

ReadOnly속성이 false인상태의 Edit 컴포넌트로 SetFocus메소드를 사용할때는

잘작동합니다.

 

TIP2
※ Edt 컴포넌트의 Enabled,ReadOnly 속성이 false 일때는 직접 입력은 안되지만 대입 및 참조는 가능하다.
 
주의1
SelectAll 메소드는 Edit 컴포넌트의 문자열의 전체 선택하는 메소드이다.
근데 이 메소드는 onClick에 사용하면 동작하지만 onEnter에 사용하면 동작하지 않습니다.
포커스를 얻을때 SelectAll 메소드가 동작하는 효과를 얻으려면 RealGrid 패키지의 wEdit 컴포넌트를 사용하면 됩니다.(델6 에서 테스트)

 

 

Memo컴포넌트

comment

2줄 이상 입력받을때 사용합니다.

property

maxlength – 입력 문자수를 제한함

※ 테이블의 크기가 100바이트라면 maxlength 속성값도 100을 주면 된다.

 

Lines-입력상자안에 내용을 입력합니다.
visible-메모컴포넌트를 보일지 여부(false-보임)
align-정렬을 합니다.(altop-상단에붙음,alclient-상하단에붙음)
ReadOnly-읽기만 가능하게 한다.
scrollbard-좌우 스크롤 표시 유무
ssboth(가로세로스크롤바)
ssVertical(세로스크롤바)
ssnone(스크롤바없음)

method
clear-입력상자안에 내용을 모두 지웁니다.
lines-add-입력상자안에 내용의 끝부터 줄단위로 추가합니다.
lines-insert-입력상자안에 원하는 칸에 내용을 줄단위로 추가합니다.
text=입력상자안에 새로 내용을 추가합니다.(글자가 있었다면 자지워지고 새롭게 입력된다.)
LoadFromFile(file)-파일내용을 메모장안에 뿌려준다.

※ 메모 컴포넌트는 각 라인별로 폰트 속성을 다르게 주는것이 불가능합니다.

 

keydown 이벤트에 사용하는 ctrl+a 단축키 클릭시 전체문자역 선택되게

If (Shift = [ssCtrl]) and (Key = 65) then

begin

   (Sender as TMemo).SelectAll;

end;

 

Panel 컴포넌트

 

Comment

특정 모양으로 그룹을 지을수있는 컴포넌트이다.

 

Property

BorderWidth-화면에는 출력되지 않고 panel의 여백을 크기를 지정합니다.

align-상/하/좌/우/전체/사용자정의로 정렬을 시킵니다.

bevelouter-외곽선을 튀어나오게 할것인지 들어가게 할것인지 결정

byraised(외곽선을 튀어나오게 함)

bylowered(외곽선을 들어가게 함)

bynone(외곽선을 안보이게 함)

bevelinner-외곽선을 들어가지도 않고 나오지도 않은 2줄 구분선으로 출력

bsnone(아무 효과도 안준다)

bsrowered(2줄 구분선으로 출력)

 

※ 자주 사용하는 구분선 설정

 

구분선이 들어간 효과의 경우

bevelinner-bvRaised

bevelouter-bvLowered

구분선을 안보이게 하는 경우

bevelinner-bvNone

bevelouter-bvNone

 

※ 항목명으로도 많이 사용되어 진다.

 

Combobox컴포넌트

 

Comment

아이템을 콤보박스형태로 보여줍니다.

 

Property

text-초기 문자열을 지정합니다.

items-리스트 목록을 입력합니다.

ItemIndex-리스트 목록처음이 0부터 1씩 증가되는 아이템 순서 값

style-콤보박스 형태를 지정합니다.

csDropDown(드롭다운형태이며 수동입력 가능함)

csDropDownList(드롭다운형태이며 수동입력 불가능)

 

Method

text-현재 선택되어져 있는 값을 출력(읽기용)

ItemIndex-현재 선태된 리스트순서값을 숫자값으로 입력하여 바꿈(0부터시작)

items.IndexOf-해당 문자열이 있는 리스트 순서값을 알아낸다.

Items.Strings-리스트순서값을 이용해 해당 문자열을 출력(읽기용)

items.insert-리스트목록을 추가합니다.(추가위치를 지정가능)

items.add-리스트목록을 추가합니다.(추가위치지정불가능,무조건 맨뒤부터)

Items.CommaText – 콤마 단위로 문자열을 넣으면 쉽게 리스트목록에 추가할수 있다.

※ CommaText 사용후에는 반드시 ItemIndex 으로 초기값을 준다.



[데브기어] RAD Studio IDE에서 Help 다운로드


RAD Studio IDE에서 Help 다운로드 방법에 대해 안내 드립니다.

RAD Studio를 실행하시면 메뉴 중 Tools > Manage Platforms.. 가 있습니다.

Manage Platofrms 창을 띄어 Additionals 부분에

Help를 체크하시어 설치해보시기 바랍니다.

Help 외에도 Manage Platforms에서는 다양한 기능들을 추가 설치하실 수 있습니다.

델파이의 제어문에 있어서 두 줄이상일 경우는 begin과 end를 사용한다.
C에서의 { }에 해당한다.
델파이에서 세미콜론(;)을 사용하는데 있어서 주의해야 될 점은 세미콜론은 항상 문장의 끝을 나타내지만은 않는다. 세미콜론은 문장을 구분하는 한가지 방법이다. 
문장을 구분하는 방법에는 end나 else도 있다.

goto문도 있지만 goto문을 사용하면 프로그램을 이해하기 힘들어짐으로 그다지 사용되지 않는다.

■ 조건문 if

if문의 일반형식

if 식
  then 문1
  else 문2

이다 문1, 문2는 한줄이나 두줄이상은 begin ... end로 묶일 수 있다.
if문에서 주의해야되는 것은 세미콜론 말고도 else나 end가 문장을 구분하게된다.

if nA > 10 then
  nB := 10;
else
  nB := 20;

C를 짜던 사람이라면 위 소서를 일반적으로 생각하면 문제가 없지만, 델파이에서는 문자게 생긴다.
델파이에서는   nB := 10;에서 if문이 끝나게 된다.
델파이에서의 소스는 아래와 같이 써야된다.

if nA > 10 then
  nB := 10
else
  nB := 20;

begin ... end로 묶인 경우는 아래 소스와 같이 else 위의 end에는 세미콜론을 붙여서는 안된다.

if nA > 10 then
begin
  nB := 10;
  nC := 11;
end
else
begin
  nB := 20;
  nC := 22;
end;

그리고 아래의 소스에서 nC := 11 뒤에 세미콜론이 붙지않아도 문제가 된지않는다. 
이것은 end가 문을 구분하는 것으로 인식하기 때문에 세미콜론이 반드시 필요하지 않다.

if nA > 10 then
begin
  nB := 10;
  nC := 11
end

■ 조건문 case

case문은 복수의 선택을 할때 필요한 문을 실행할 수 있다.
(C에서의 switch문에 해당한다.)

사용예

  case StrToInt(Edit1.Text) of
    3 :
      begin
        Label1.Caption := '3';
      end;
    4 :
      begin
        Label1.Caption := '4';
      end;
    else
      begin
        Label1.Caption := 'XX';
      end;
  end;

■ 반복문 while

while문은 루프의 처음에서 조건이 오고 조건이 성립할 때 반복하는 문이다.
(C에서의 while문에 해당)

사용예

ni := 0;
while ni < 10 do
begin
  AA[i] := 0;
  ni := ni + 1;
end;

■ 반복문 repeat until

repeat until문은 루프의 마지막에서 조건이 오고 조건이 성립할 때 까지 반복하는 문이다.
(C에서의 do while문과 비슷하지만 조금 틀리다.)

사용예

  ni := 0;
  repeat
    AA[ni] := 0;
    ni := ni + 1;
  until ni > 10;

■ 반복문 for

for문은 인덱스가 되는 값을 1씩 증가시키거나 감소시켜가며 반복하는 문이다.
(C의 for보다 유연성이 떨어짐)

  for ni := 0 to 9 do
  begin
    AA[ni] := ni;
  end;

인덱스를 감소시킬 때는 to 대신 downto를 써야된다.

  for ni := 9 downto 0 do
  begin
    AA[ni] := ni;
  end;

델파이에서 사용되는 함수 형태는 크게 procedure 와 function 두가지 입니다.
이 둘의 차이는 C 에서 void 형인가 아닌가의 차이겠군요.
즉, 함수 자체가 인자를 받아서 함수 자체가 결과 값을 되돌려 주지 않는가 또는 주는가의 차이라 하곘습니다.
차이는 다음과 같이 알 수 있습니다.

procedure testProc(input1 : integer);

function  testFunc(input1 : integer) : integer;


procedure 인 testProc 는 입력인자로 integer 형으로 input1 이란 걸 받고 뭔가를 처리 할 것입니다.
반면 function 인 testFunc 는 입력으로 input1 을 받아서 뭔가를 다시 integer 형태로 결과를 돌려 주게 됩니다.
한때 컴파일러가 변경 되면서 procedure 도 function 처럼 값을 돌려줄 수 있었습니다만 이는 좋은 방법이 아니므로 사용하지 않도록 해야 겠습니다.

procedure 든 function 이든 인자는 여러개 일 수 있지만 function 의 경우는 돌려받는 결과값이 제한 될 수 밖에 없습니다.
그래서 인자값 자체가 출력으로 사용되는 경우가 반드시 있겠습니다.
C 에서는 포인터를 받으므로 해당 인자값의 포인터에 다시 결과값을 기록 할 수 있죠.
델파이도 물론 가능 합니다.
포인터 형으로 인자를 받을 때엔 심볼 앞에 var 를 붙입니다.

function  multipleFunc(in1 : integer; var out1 : integer; var out2 : integer) : boolean;


이 함수는 어떤경우 일까요 ?
전체적으로 입력이 1개에 출력이 총 3개가 되는 경우라 하겠습니다.

함수 자체는 해당 기능의 성공이나 실패를 판가름 하기 위해 boolean 형으로 TRUE 나 FALSE 둘 중 하나를 반환 하겠죠.
그리고 뭔가 입력 값 1개에 대한 처리 는 out1 과 out2 에 저장 되겠죠.

이로서 복잡한 기능을 여러 함수로 분리하여 처리 하여 중복적인 코딩을 피하고 체계적인 호출을 지정하여 효율적인 코딩이 가능 할 것입니다.

다음은 유닛에 대한 설명 입니다.

델파이는 기본적으로 여러개의 unit 으로 구성 되어 있습니다.
이 unit 은  C 에서 header 와 code 를 나눠서 용도별로 여러개의 파일을 나누는 것과 동일 하다고 하겠습니다.
하지만 델파이는 C 처럼 header 와 code 가 나뉘지 않고 하나의 pas 파일 내에 정의 되는 구조 이므로 이를 이해 해야 할 필요가 있습니다.

일단 다음 기본 unit 구조를 보도록 하겠습니다.

unit testUnit;

interface

type
    TcallBack = procedure;

function setCallBack(aCallBack : TcallBack):boolean;

implementation

var
    interCallBack : TcallBack;

function setCallBack(aCallBack : TcallBack):boolean;
begin
    interCallBack := aCallBack;
    result := true;
end;

begin
    interCallBack := NIL;
end.

델파이에서는 interface 와 implementation 으로 외부에서 볼 수 있는 심볼군 과 구현부를 구분 합니다.
쉽게 말해 C 에서 header 는 interface 부에 속하고, code 는 implementation 에 속한다고 하겠습니다.
또한 unit 의 이름과 실제 파일의 이름은 같을 필요는 없습니다만 관례적으로 동일하게 가도록 하고 있습니다. (DOS 시절이나 win3.1 시절의 구 컴파일러는 unit 과 파일이름이 다르면 오류라 표시 하기도 했습니다)

interface 에 선언되는 함수나 변수는 모두 사용되는 다른 유닛에서 접근,변경이 가능합니다.
하지만 implementation 에 있는 구현부에 선언된 변수나 함수는 다른 유닛에서 접근이 불가능 하게 됩니다.
실제 C 에서도 동일한 것입니다만, C 처럼 심볼 자체를 가져다 쓸 수 있는 extern 같은 것은 존재 하지 않습니다.

unit 예제를 보면 마지막에 begin~end. 가 있는 것을 볼 수 있습니다.
실제는 begin 이 없더라도 되지만 꼭! end. 는 있어야 합니다.
즉, 뭔가 내부적으로 초기화를 위해 begin 을 end. 앞에 선언해서 코딩을 해도 되지만 반드시 end. 는 존재 해야 한다는 점 입니다.

실제 이 unit 이 다른 코드에서 사용 되려면 해당 코드 내에서 uses 로 사용 하려는 unit 의 이름을 정의 하면 됩니다.

uses
    testUnit;

C 에서 #include 를 통해서 사용하려는 기능을 추가 하는 것과 동일 하다고 하겠습니다.
델파이를 쓰던 사람이 C 를 쓰게 되면 서로 다른 점을 쉽게 이해 할수 있는 편 입니다만 C 를 쓰던 사람이 델파이의 하나의 파일 내에서 모든걸 쓰는 것을 이해하는 일은 잘 없었던 것 같습니다만, 이는 제 개인적으로 C 가 Pascal 이후에 나오면서 늘어난 편리성과 심볼단위의 LINK 등의 차이점 때문에 발생하는 것이 아닌가 합니다.


1. dpr(delphi project) 

프로젝트 파일 이라고 부르며 여러 개의 pas 파일과 dfm 파일의 정보를 가지고 있다.

※ 통프로그램(하나의 exe 파일)으로 개발 시 dpr 파일은 반드시 하나만 존재한다.

※ DLL 분할 프로그램으로 개발 시 DLL파일 개수만큼 dpr 파일이 생성된.

 

 

2. dpg(delphi project group) 

프로젝트 그룹 파일 이라고 부르며 여러 개의 프로젝트 파일의 정보를 가지고 있다.

여러 개의 프로젝트 파일을 관리할 때 사용하는 파일이다.

 ※ 여러 개의 DLL파일도 bpg로 관리하면 편리하다.

 

 

3. pas(pascal) 

유닛 파일 이라고 부르며 하나의 폼에서 실행되는 처리 코드를 저장하는 텍스트 파일이다.

※ 무조건 pas 파일과 dfm 파일은 1:1 매칭을 이룬다.

 

 

4. dfm(delphi form) 

폼 파일 이라고 부르며 하나의 폼에 관련된 모든 속성을 저장하는 텍스트 파일이다.

※ 델파이4.0 까지는 바이너리 파일이었으나 5.0부터 텍스트 파일로 생성된다.

※ dfm 파일을 에디터나 메모장으로 열어 수정하고 저장하면 에러가 난다. 반드시

델파이 상의 오브젝트 인스펙터창을 이용하여 수정해야 한다.

 

 

5. dsk - 델파이 환경설정 파일

dpr 파일과 파일명이 같으며 해당 프로그램의 환경설정 내용을 가지고 있는 파일이다.

삭제하더라도 프로그램 컴파일 시 자동으로 만들어지는 파일이다.

※ F12키로 잘 보이던 폼이 안 보일 때는 dsk파일을 삭제 후에 다시 컴파일 + 빌드한다.

※ 특정 DLL소스에 브레이크 포인트가 갑자기 들지 않을 때는 이 파일을 삭제 후에 다시

컴파일 후 브레이크 포인트를 적용해본다.

※ 위의 방법으로도 브레이크 포인트가 들지 않으면 bpg파일에 있는 dpr파일을 모두

삭제한 후 다시 추가하거나 그래도 안되면 델파이를 종료 후 다시 실행한다.

 

 

6. dpk(delphi package) - 델파이 패키지 파일

델파이 패키지 파일로 컴포넌트 소스인 .pas(유닛파일)를 하나로 합쳐 패키지로 만든

파일이다. 델파이에 컴포넌트를 쉽게 추가하기 위한 목적을 가진 패키지 파일이다.

 

 

7. dll(dynamic link library) - 동적 링크 라이브러리

※ 자주 사용하는 함수는 공유파일 이진파일로 만든다.

 

 

8. dcu

델파이의 소스를 컴파일해서 생기는 object파일 이진파일이다.

 

 

9. exe - 프로그램 설치 파일

 델파이의 object파일을 실행 가능한 파일로 만든 것이다.

 

 

10. RES 

컴파일 된 이진 리소스 파일

 

 

11. bpl(borland package library) - 델파이 패키지 라이브러리

볼랜드 패키지 라이브러리 파일이며 다이나믹 링크 라이브러리(DLL) 파일과 비슷하지만

bpl은 볼랜드 제품에서만 호환되며 dll은 MS 제품에서도 사용 가능하다.


델파이의 procedure와 function

값을 반환하는 서브루틴을 펑션(Function)이라하며 값을 반환하지않는 서브루틴을 프로시져(Procedure)라고 부른다.

procedure는 C에서 void형의 함수에 해당한다.

■ 프로시져 procedure

  ▶ 구조

procedure <프로시져 이름>(<인수>);
label;
    <라벨>
const
    <상수 선언>
type
    <형 선언>
var
    <변수 선언>

<프로시져 및 펑션 선언>

begin
    <프로시져 본문>
end;


프로시져 본체이외의 label, const, type, var 및 프로시져, 함수의 선언은 필요없는 경우 생략할 수 있다.
프로시져 안에 선언된 프로시져 또는 함수는 그 프로시져 안에서만 사용할 수 있다.
인수가 여러개 있는 경우는 세미콜론으로 구분한다.

  ▶ 사용예

procedure TestProc(nA:Integer; dB:double);
label 10;
const
  NoMax = 256;
type
  TTestRcd = record
    nIdNo: Integer;
    steId: String;
    nVal: integer;
  end;
var
  arrItem: Array[0..NoMax] of Byte;
  TempRcd: TTestRcd;

function InFunc(dB:double):double;
var
  dC:double;
begin
  //...
end;

begin
  //...
  //...

end;

■ 펑션 function

  ▶ 구조

function <프로시져 이름>(<인수>):<반환값의 데이터형>;
label;
    <라벨>
const
    <상수 선언>
type
    <형 선언>
var
    <변수 선언>

<프로시져 및 펑션 선언>

begin
    <프로시져 본문>
    <프로시져 이름>:=<반환값>;
end;


  ▶ 사용예

함수값은 Result에 결과를 대입한다.
함수명에 반환값을 대입해도 된다.

function Testfunc(nA:Integer; dB:double):integer;
label 10;
const
  NoMax = 256;
type
  TTestRcd = record
    nIdNo: Integer;
    steId: String;
    nVal: integer;
  end;
var
  arrItem: Array[0..NoMax] of Byte;
  TempRcd: TTestRcd;

function InFunc(dB:double):double;
var
  dC:double;
begin
  //...
end;

begin
  //...
  //...
  Result := nA * 2;
end;

< 델파이 단축키 모음 >

[찾기]

Ctrl + F Find

Ctrl + R Find and Replace

F3 Search Again


[화면이동]

F11 View Object Inspector

F12 Toggle Form/Unit

Alt + 0 View Window List

Ctrl + F12 View Unit

Shift + F12 View Form

Ctrl + PgUp/PgDown CodeEditor에서 현재페이지의 첫줄(PgUp), 마지막줄(PgDown)로 이동


[컴파일/실행]

Ctrl + F9 Compile

F9 Run

F7 Trace Into

F8 Trace Over

F5 Set Breakpoint

Ctrl + F5 Add Watch

Ctrl + F7 Evaluate/Modify


[블록관련]

Ctrl + Shift + U Unindent

Ctrl + Shift + I Indent

Ctrl + O, C Column Block Mode (또는 Alt키를 누른상태에서 Mouse를 드래그 해
도 컬럼블럭 설정이 가능, Shift + Alt + Arrow Key 를 사용해도 컬럼블럭 설정)

Ctrl + O, K Line Block Mode


[키 매크로]

Ctrl + Shift + R Record

* 키매크로 작성순서 : -> <원하는키> ->

Ctrl + Shift + P Play


[Object Inpector]

Ctrl + Down Object Inpector 상단의 Object List ComboBox 열기
이 상태에서 Component Name을 키보드로 치면 Incremental Search 기
능Tab Property 와 Property Value 부분을 전환가능하며,
Property 쪽에 Cursor 가 위치한 상태에서 키보드를 치면
Incremental Search


[Code Insight]

Ctrl + Space Code Completion 기능

Ctrl + J Code Template 기능

Ctrl + Shift + Up/Down Object 의 Member function/procedure 의 선언부와 구현부를 이동

Ctrl + Shift + C Object 의 Member function/procedure 의 선언부와 구현부중
의 한가지를 코딩 한후 누르게 되면 나머지 선언부 또는 구현부를 완성시켜줌


[기타]
Alt + F10 현재 위치에서 Popup-Menu 띄우기

Ctrl + Enter Code Editor 에서 현재위치의 단어로 File Open을 시도(기본 확장자
는 .pas) 하고 현재 Path 에서 그 파일을 찾지 못하면 File Open Dialog를 띄움.

Alt + { or } Find Matching Brace( ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’ )

#2에디터에서 Ctrl + E 를 하면 increment Search 가 됩니다. Ctrl+E 를 눌루고 문자열을 입력해 보세요
Ctrl+L 을 해도 다시 찾기 또는 다시 바꾸기를 할수 있습니다.

Alt+F11 은 유닛을 Uses 할때 사용하면 됩니다.

Ctrl+K+W 를 하면 선택한 블럭을 저장할수 있습니다.
Ctrl+K+R 을 하면 캐럿위치에 파일을 읽어서 붙일수 있습니다.

Ctrl+Alt+B 를 하면 현재 프로젝트에 설정된 BreakPoint 를 편집할수 있구 그 라인으로 이동할수 있습니다.


다시찾기 단축키
ctrl+f로 찾은후, F3을 누르면 다시 찾기가 됩니다.

 

토큰으로 찾기 단축키
커서가 토큰에 위치시키고는 ctrl + alt + 화살표 위로 또는
아래로 하면 커서위치의 토큰과 가장 가까이에 있는 토큰을 찾아갑니다.

ctrl + 마우스 왼쪽 클릭 단축키
ctrl + 화살표 위메소드 선언부바로가기
메소드선언부에서 ctrl+shift+화살표아래

 

메소드 구현부바로가기

메소드구현부에서 ctrl+shift+화살표위

 

컬럼블럭 선택 해제
선택: shift + alt + 화살표키하시면 컬럼열을 복사하실 수 있습니다.
해제: 그냥 편집창에서 마우스를 클릭하시면 해제됩니다.
또는 Ctrl+O+K를 하시면 해제됩니다.(이건 많은 분들이 모르시고 있더군요)

컴포넌트 이름은 알고 어떤 팔레트에 있는지 모를때
Alt + V + C를 하시고 컴포넌트 이름을 입력하셔서 찾으시면 됩니다.

델파이환경에서 unit을 제거했는데 dcu를 찾지 못할때..
델파이는 보통 컴파일시 변경된 파일만 체크하기 때문에 이런 문제가 나타날 수 있습니다.
그때는 Alt + P + B를 하시면 모두 빌드해서 에러를 잡으세요.

Project Group에서 여러 프로젝트를 한번에 빌드하기.
하나하나씩 컴파일 하지 마시고, Alt + P + E를 하시면 프로젝트 그룹내의 모든 프로젝트를 빌드하게 됩니다.

 


폼 디자이너
Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동
Shift + Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동(빠르게)
Shift + 방향키(←↑→↓) : 컴포넌트 크기 변경
선택 후 ESC : Parent컴포넌트로 이동

오브젝트 인스펙터
Ctrl + ↓ : 컴포넌트 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Alt + ↓ : Property Combo 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Ctrl + Enter : 열거형 Property값을 다음 값으로 변경
+선택 후, ←,→ : 하위 Property펼치기,접기
Ctrl + Tab : Properties,Events탭 전환
..선택 + Ctrl + Enter : Property Editor 열기
Tab : Property Name/Value토글

 

소스코드 에디터
Ctrl + Enter : 현재위치의 단어로 File Open 시도
현재 Path 에서 찾지 못하면 Dialog
Ctrl + S : 파일 저장
Ctrl + F4 : 파일 닫기
Ctrl + Shift + C : Method/Procedure/Property자동생성
Ctrl + Shift + ↑(↓) : 선언부,구현부 상호간 이동
Ctrl + Shift + R : 키 매크로 레코딩
Ctrl + Shift + P : 키 매크로 실행
Ctrl + ←,→ : 이전 단어, 다음 단어
Ctrl + Shift + ←,→ : 이전 단어, 다음 단어까지 블럭
Ctrl + Home : 소스코드 맨 앞으로 이동
Ctrl + End : 소스코드 맨 뒤로 이동
Shift + Home : 현재 라인 맨 앞까지 블럭
Shift + End : 현재 라인 맨 뒤까지 블럭
Ctrl + PageUp : 현재 화면의 맨 윗줄로 이동
Ctrl + PageDown : 현재 화면의 맨 아랫줄로 이동
Ctrl + Shift + I(U) : 현재 라인에 들여쓰기(내어쓰기)
Shift + Alt + 방향키(←↑→↓) : 블록 사각형 지정         -> Ctrl + Backspace : 해제
Ctrl + KL : 캐럿이 Line Home에 있을 때, Line 블럭
Ctrl + T : 현재 위치에서 마지막 단어까지 삭제
Ctrl + I : 블럭 지정된 문자를 공백으로 변환
Alt + {, } : '{'괄호 앞,뒤에서 사용. 짝 찾기.
Ctrl + N : 다음 Line 맨 앞으로 줄바꿈
Ctrl + M : 줄바꿈
Alt + BackSpace : 실행 취소
Ctrl + E : 한 글자 찾기
Ctrl + ↑(↓) : 캐럿 고정 스크롤
Ctrl + F : 찾기
Ctrl + R : 바꾸기

 

코드탐색기
F2 : 이름 변경하기(Uses제외)
DoubleClick : 소스코드 탐색기의 해당 코드로 이동
Ctrl + Shift + E : 탐색기<->에디터 창 이동

코드 인사이트(Code Insight)
Ctrl + Space : 코드완성 마법사
Ctrl + Shift : 메소드 파라미터 팁
Ctrl + J : 코드 템플릿 사용

 

기타 기능
Alt + F10 : 현재 위치에서 Popup-Menu 띄우기
F11 : View Object Inspector
F12 : Toggle Form/Unit
Alt + 0 : View Window List
Ctrl + F12 : View Unit
Shift + F12 : View Form 
 

저작자 표시
신고


* 데브기어 : http://www.devgear.co.kr/
* 델파이볼랜드포럼 : http://delphi.borlandforum.com/
* 델마당 : https://www.delmadang.com/

* 델파이 공부 관련 링크
http://withwani.tistory.com/81
http://blog.devquest.co.kr/tag/delphi
http://gomsun2.tistory.com/category/Delphi
http://blog.naver.com/compcw?Redirect=Log&logNo=193133699

* 델파이 관련 자료



* 오브젝트 파스칼 관련 자료





델파이는 C++ & MFC 정도의 환경과 비교하는 것이 나을 것 같습니다. 플랫폼 종속적이며(다른 플랫폼 지원한다지만 많이 미진합니다) 몇 남지 않은 네이티브 언어라는 점에서요. 만약 다른 툴이 Java와 같은 비 네이티브 툴들이라면 네이티브 환경과 VM 환경의 장단점을 논하는 글이 되겠지요.

델파이는 시스템 프로그래밍이 가능한 언어이자 툴 입니다.
자바나 파워빌더 및 스크립트 언어들은 직접적인 메모리 핸들링을 할 수가 없습니다. 그로인해 심플하며 얕은 시스템 지식으로도 최상은 아니더라도 어느정도 만족할만한 결과를 낼 수 있습니다. 자바나 스크립트 언어들이 웹프로그래밍이나 업무용 프로그램에 많이 사용되고 있는 이유입니다.
단순한 업무프로그램을 만드는데 생산성이 필요할 뿐 운영체제를 깊게 알 필요는 없죠





버전[편집]

  • 볼랜드 델파이 1
  • 볼랜드 델파이 2
  • 볼랜드 델파이 3
  • 볼랜드 델파이 4
  • 볼랜드 델파이 5
  • 카일릭스(Kylix)
  • 볼랜드 델파이 6
  • 볼랜드 델파이 7
  • 볼랜드 델파이 8
  • 볼랜드 델파이 2005
  • 볼랜드 델파이 2006
  • 코드기어 델파이 2007: 인라인 함수 지원. 프랜드 차단 지원.
  • 엠바카드로 델파이 2009: Generics 지원. 유니코드 지원. 익명 메서드 지원.
  • 엠바카드로 델파이 2010: RTTI(Run Time Type Infomation) 강화, Interface 연산자 As, Is 추가, 지연된 라이브러리(DLL, Package)로딩 기능 추가[3]
  • 엠바카드로 델파이 XE
  • 엠바카드로 델파이 XE 2: Osx(32bit), iOS(아이폰 OS) 개발 지원. 마이크로소프트 윈도(32/64bit) 개발 지원
  • 엠바카드로 델파이 XE 3: Record Helper 지원, iOS(아이폰 OS) 개발 지원 중단
  • 엠바카드로 델파이 XE 4: Delphi ARM optimized compiler 추가 및 iOS(아이폰 OS) 개발 지원
  • 엠바카드로 델파이 XE 5: Android 2.2 이상 버전의 개발 지원[4]

기능[편집]

한 가지 중요한 장점은 기반 프레임워크로 뛰어난 객체지향 프레임워크인 비주얼 컴포넌트 라이브러리(VCL)를 사용하고 있다는 점이다. VCL은 델파이1에서부터 최신 버전인 델파이 XE2에 이르기까지 열다섯 개의 버전들을 거치는 동안, 내부의 실제 코딩은 수없이 변했지만 잘 설계된 클래스 구조 덕분에 프로그래밍 인터페이스는 큰 변화없이 계승되어 왔다. 이로 인해 상/하위 호환성이 아주 뛰어나다.

이런 이유로 마이크로소프트 닷넷을 지원하게 된 최신 버전에서도 비주얼 베이직이 VB.NET으로 업그레이드되면서 겪은 대대적인 프로그래밍 방법/스킬의 변화가 없으며, 다른 최신 기술의 적용에도 기존의 프로그래밍 방식/인터페이스를 최대한 재활용함으로써 개발자들이 델파이에 적용된 새로운 기술들을 배우는 과정에서 겪게 되는 어려움인 러닝 커브(learning curve)가 대단히 작다.

델파이 2007에서 추가된 VCL for WEB은 AJAX를 지원하고 있으며, 또한 델파이 2007에서부터는 공식적으로 윈도 비스타를 지원한다. 델파이 2009에서부터는 윈도 비스타지원 강화, 유니코드, 제네릭 / 익명의 메소드(클로져)를 지원한다. 2009 버전에 이르러 기존 방식의 델파이.NET은 단종되고 새로운 방식의 델파이 프리즘이 그 뒤를 잇게 되었다.

2009년 8월 25일 발표된 델파이 2010 버전은 윈도 7 운영체제를 최초로 정식으로 지원하는 개발 도구로서 멀티터치와 제스처를 지원한다. 또한 코드 포매터, 서브버전 통합, IDE 인사이트 등의 IDE 기능 개선이 많이 추가되었다.

2010년 9월 2일 발표된 델파이 XE 버전은 Azure, AWS 클라우드 시스템 지원과, REST 지원이 추가되었다.

2011년 9월 발표된 델파이 XE 2 버전은 MaxOS, iOS 개발 지원과 DirectXOpenGL 을 사용하는 새로운 UI 프레임워크인 FireMonkey 가 추가되었다

2012년 9월 발표된 Delphi XE3 버전은 일반 타입 및 구조체를 확장할 수 있는 Record Helper가 추가 되었으며 FireMonkey 프레임을 통한 iOS 개발 지원이 중단 되었다. iOS개발 지원은 Mobile Builder 프로젝트로 이관 되어. XE4버전에서 통합된다. Windows 8 개발은 지원되지만 MetoUI에 최적화 되어 있지 않으며, Windows 8 RT는 지원되지 않는다.

2013년 4월 발표된 델파이 XE4 버전은 델파이 프리즘의 지원이 중단되었고, iOS개발 지원 위하여 LLVM기반의 Delphi ARM optimized compiler가 추가되었으며 ARC를 지원한다.

2013년 9월 발표된 델파이 XE5 버전은 Android(v2.2 / ARM) 개발 지원이 추가되었다.

관련 소프트웨어[편집]

오픈소스 기능

델파이 언어의 특징[편집]

델파이는 마이크로소프트 윈도 기반하에서 모든 부분을 프로그래밍할 수 있는 강력한 언어로 높은 생산성과 간결한 코드가 대표적인 장점이며 C 이외에도 저수준의 시스템 프로그래밍이 가능한 소수의 언어이다. 델파이의 일부로 취급되는 경향이 강해 개발사가 주도적으로 언어의 변화를 이끄는 특징이 있다.

또 현존하는 네이티브 언어(native language) 중 가장 빠른 컴파일 속도도 델파이만의 장점이다. 대표적인 개발 도구로 볼랜드/코드기어의 델파이, 카일릭스가 있다. 이외에도 프리 파스칼도 고유한 오브젝트 파스칼 외에 델파이를 컴파일할 수 있도록 지원한다. 델파이는 향후 멀티플랫폼을 비전으로 삼고 윈도 운영 체제 이외에 다른 플랫폼들을 지원하는 방향으로 개발이 진행되고 있다. 현재 개발이 가능한 플랫폼으로는 OS XiOS가 있으며, 안드로이드가 지원 계획이 확정 되어 있다.

이전의 오브젝트 파스칼과의 차이[편집]

델파이 컴파일러의 지속적인 언어 확장을 통해 이전의 오브젝트 파스칼(터보 파스칼)의 제한을 서서히 벗어나기 시작하며 델파이에서 사용하는 언어를 오브젝트 파스칼이 아닌 델파이 프로그래밍 언어로 부르게 된다.

아래는 이전의 오브젝트 파스칼에서 지원하지 않으나 델파이 컴파일러가 지원하는 특징이다.

  • 멀티 플랫폼(Windows 32/64bit, OSX, iOS, Android) 지원
  • 클래스 내의 선언부
  • 클래스 사이의 친구관계 막기
  • 최종 상속자
  • 레코드가 메소드를 포함
  • 인라인 함수
  • 연산자 오버로드
  • for 문의 반복자 사용
  • 제네릭_프로그래밍 지원
  • 유니코드(UTF-16) 지원
  • 익명의 함수 지원
  • Helper를 통한 타입 확장

같이 보기[편집]

C++빌더(C++Builder)는 코드기어(옛 볼랜드)의 C++ 기반 RAD 개발 툴이다. 델파이와 많은 부분을 공유하며, 델파이의 C++ 버전으로 취급되기도 한다. 델파이에서 개발된 많은 구성요소들을 C++ 코드로 그대로 사용할 수 있다. 실제로 델파이로 작성된 비주얼 컴포넌트 라이브러리를 별도로 다시 작성하지 않고 그대로 사용하고 있다.

C++빌더는 드래그-앤드-드롭 비주얼 개발환경을 지원하며, 위지윅 GUI 빌더를 포함하는 IDE를 가지고 있다.

C++빌더는 원래 마이크로소프트 윈도용으로 개발되었으나, Qt 기반의 크로스플랫폼 비주얼 구성요소 라이브러리 볼랜드 CLX를 지원했던 적이 있다. 이 라이브러리를 사용해 개발한 경우 카일릭스로 컴파일 할 수 있다. 하지만 이후 볼랜드는 카일릭스 개발을 중단하고 더이상 CLX 라이브러리를 지원하지 않는다.

2003년 볼랜드는 C++빌더의 후속작인 C++빌더 X를 준비하였다. 이는 J빌더와 같은 기반을 공유하며 기존의 제품과 많은 차이를 나타낸다. 하지만 이 프로젝트는 상업적으로 성공하지는 못했다. 따라서 델파이 개발 환경의 일부로 포함될 것이라고 볼랜드 사가 2004년에 선언했다.

C++빌더 2006까지는 볼랜드 디벨로퍼 스튜디오에 포함되어 있으며 이후의 버전은 개별적인 C++빌더 제품 및 코드기어 래드 스튜디오에 포함된 패키지 제품 두가지로 판매되고 있다.

볼랜드로부터 독립 조직으로 분리된 코드기어엠바카데로에 인수된 이후 2008년에 출시된 버전인 C++빌더 2009에서는 유니코드 지원, TR1, Boost, C++0x 등 C++의 최신 표준 및 트렌드를 광범위하게 지원하여 비주얼 C++ 2008 버전에 비해 표준 준수도가 더 높다.[출처 필요] 2009년 출시된 버전인 C++빌더 2010 에서는 윈도 7 개발을 지원한다.





비주얼 컴포넌트 라이브러리(Visual Component Library), 줄여서 VCL은 델파이의 오브젝트 파스칼 언어로 설계된 Win32용 라이브러리이다. 볼랜드가 개발했으며, 델파이 외에 C++빌더 환경에서도 사용할 수 있다.

VCL은 볼랜드사의 비주얼 RAD 툴과 쉽게 연계되어 사용할 수 있는 장점을 갖고 있다. 2009년부터 완전한 유니코드를 지원하고 있다.

VCL4PHP와 같이 VCL을 모방한 라이브러리가 생기기도 하였다.


+ Recent posts