Q&A

  • 예약어에 대해...(2)
답변 감사드립니다.
그런데 Self는 Form 자신을 의미하는 것 아닌지요?

nWidth := Self.Width;
nWidth := Width;

이렇게 입력하면 폼의 넓이가 구해지는데 제가 알고 싶은 것은

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Showmessage(Edit1.Text);
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  Showmessage(Edit2.Text);
end;

위의 예에서 Edit1.text, Edit2.text로 각각 표기하지 않고 한가지로 표현할 수

있는, PB에서 This.text와 같은 것은 무엇인지요? Form내의 어떤 Componet

로도 인식될 수 있는 예약어입니다.

답변주시면 감사하겠습니다.
3  COMMENTS
  • Profile
    정형준 2002.12.14 14:56
    지난번 답이 좀 비껴나갔군요. ^^
    아래에 먼저 답변해 주신 분들의 답변을 참고하시면 될것 같습니다.

    조금 더 덧붙이자면...

    델파이는 이벤트 핸들러를 처리하는데 있어
    비주얼 베이직이나 파워빌더와는 다른 방법을 사용합니다.

    예를들어 비주얼 베이직에서는 Sub의 이름의 구성을 가지고 이벤트 핸들러를 구분합니다.
    그래서 Sub의 이름을 임으로 변경하면 General Procedure로 바뀌죠.

    그러나 델파이는 이벤트 핸들러를 가르키는 방법을 씁니다.
    예를 들면
    "버튼A의 클릭 이벤트는 'aaaa' 라는 프로시져를 사용한다." 처럼요.
    만약
    "버튼B의 클릭 이벤트도 'aaaa' 라는 프로시져를 사용해라." 라고 지정하시면

    두개의 버튼이 한개의 프로시져를 클릭 이벤트의 핸들러로 공유하며 사용하게 됩니다.
    ( dfm 파일을 보시면 이해가 빠릅니다. 텍스트파일이므로 쉽게 보실 수 있습니다. 예전엔 바이너리 파일로 되어있어서 보기 힘들었지만...)

    버튼 클릭의 이벤트 핸들러는 TObject type의 파라미터가 필요합니다.
    기본 값으로 Sender라고 나오는...

    'aaaa' 라는 프로시져의 TObject type의 파라미터(주로 Sender)는
    버튼A의 클릭일 때는 버튼A가 되고
    버튼B의 클릭일 때는 버튼B가 됩니다.

    이러한 것들을 이해하시면
    델파이의 오브젝트 인스펙터에서 이벤트 부분이 콤보박스로 되어있는 이유를
    아시게 될것입니다.
    이런 이유로 객체의 동적 생성과
    동적으로 생성된 객체에게 이벤트를 연결하는 일들이 무척 쉽고 자유롭습니다.

    델파이 조금 더 해보시면 금방 눈치 채실 수 있습니다.

    도움이 되셨기를 바랍니다.
  • Profile
    열심히 2002.12.13 22:18
    답은 님이 쓰신글 안에 있네요..

    이벤트가 일어날때 어느 컴퍼넌트가 이 이벤트를 일으킨것인지

    아래의 Sender., 오브젝트 타입이지요...

    이놈이 넘겨져 옵니다..그럼 이둘을 합쳐보지요..

    각각의 컴퍼넌트(TEdit)에 onChange 이벤트를 폼이 생성될떄 할당해줘도
    되구요..직접 object insfector에 onChange 이벤트에 아래의 이벤트를 넣어줘
    도 되구요..후자의 방법으로 했을시에 코딩은 *.dfm파일에 있습니다..

    자동으로 폼이 생성될때 이벤트에 관한 부분도 어루 만져 주지요...

    역시 난 델파이가 좋앙....

    procedure TForm1.Edit1Change(Sender: TObject);
    begin
      if Sender is TEdit then
        Showmessage((Sender as TEdit).Text);

    end;





  • Profile
    하기 2002.12.13 21:08
      Showmessage((Sender as TEdit).Text);
    이렇게 하면 되지 않을까염???
    그럼 수거 하세염...


    • 박진규
    • 2002.12.13 20:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 정형준
      2002.12.14 14:56
      지난번 답이 좀 비껴나갔군요. ^^ 아래에 먼저 답변해 주신 분들의 답변을 참고하시면 될것 같습니다. ...
    • 열심히
      2002.12.13 22:18
      답은 님이 쓰신글 안에 있네요.. 이벤트가 일어날때 어느 컴퍼넌트가 이 이벤트를 일으킨것인지 아래...
    • 하기
      2002.12.13 21:08
        Showmessage((Sender as TEdit).Text); 이렇게 하면 되지 않을까염??? 그럼 수거 하세염... ...
    • 바프
    • 2002.12.13 20:15
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김준휘
    • 2002.12.13 19:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.12.13 21:23
      요부분이요 라고 한 부분에다 조건을 하나 넣어 주면 될것 같은데염      amt := str...
    • 김지엽
      2002.12.14 01:29
      DB2에서는 FETCH가 어떤 뜻으로 쓰이는지 모르겠지만, ORACLE에서 FETCH 예약어는 ROW COUNT와 관련있는게 ...
    • 김상수
    • 2002.12.13 18:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.13 22:09
      DBGrid에 아이템인덱스 프로퍼티가 있는걸로 알구요.. 쿼리상으로도 알수 있습니다.. select rownum,...
    • LuckyBoy
      2002.12.16 22:42
      님의 질문만으로는 정확히 어떠한 에러가 어느 상황에서 어떻게 나는 지를 님밖에 모르게 질문을 하셨군요...
    • 우영범
      2002.12.13 18:59
      GetClass 함수를 이용하면 가능합니다. initialization부에 반드시 해당 폼을 등록(RegisterClasses)해야 ...
    • 박진규
    • 2002.12.13 06:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정형준
      2002.12.13 17:50
      있습니다. Self 라는... 아무것도 안써도 됩니다. 다음은 자기의 넓이를 구하는 소스인데요 &nbs...
    • 열심히
      2002.12.13 23:34
      쿼리에 대한 공부는 자기가 프로그램을 하면서 필요한게 있을때마다 방법을 찾아서 해결하는수 밖에 없...
    • Do young
      2002.12.13 23:07
      ~미씨 . 많이보던 쿼리문땜시 들켰네여. 쿼리문은 많이 해봐야 되는디.. 넘 급하게 생각치말구 .. ...
    • 정형준
      2002.12.13 17:44
      프로그래밍을 하다보면 OS를 인격체로 여기게 되죠. 마찬가지로 SQL 또는 Stored Procedure나 Trigger ...
    • KDDG_ZZOM
      2002.12.13 09:10
      저경우는 집에다 퍼스널 오라클 인스톨해서 그냥 이것저것 해봤는데... 어떻게 공부해야되는건 본인이 얼...
    • KDDG_ZZOM
      2002.12.13 09:06
      트랜잭션을 관리하는걸 물어본건가요? 트랜잭션을 관리할려면 DataBase콤포넌트를 가지고 이용하시면 될...
    • 이상협
    • 2002.12.13 04:36
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 01:08
      님 그에러라면 에러메세지를 잘 살펴보심이.... List에 0번쨰 인덱스는 범위를 벗어난거래내요//....
    • Galaxy
      2002.12.13 19:54
      안녕하세요 수고 많습니다. 님께서 작성한 퀴리에서 파라미터가 몇개라고 생각 합니까?   &...
    • ^ㅡ^
      2002.12.13 07:34
      //답변이 될지 모르겠네요 var   I : Integer; begin    I := Length(FieldbyN...
    • 미러
    • 2002.12.13 04:09
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 01:12
      델파이에서 처리할수 있습니다... Access DB는 모르지만 델파이에서 님이 말씀하신대로 처리할수 있습니...
    • 이추형
      2002.12.20 22:21
      일단은 델파이에서 필드개수에 대한 제약은 없습니다. 단지 정해진 버퍼에 의해 데이타를 가져오기때문에 ...
    • 최용일
      2002.12.13 20:36
      안녕하세요. 최용일입니다. 클라이언트를 인디로 안바꾸셔도 됩니다. OnExecute이벤트에서 읽으시면...
    • 도니
      2002.12.13 21:35
      검색했을때..최용일님의 답변이 많아서.. 답변해주실꺼라...생각했는데..역시나..^^ 감사합니다..
    • 김보영
    • 2002.12.13 02:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.13 20:26
      안녕하세요. 최용일입니다. RTTI 함수들을 사용하세요... uses     ......, Ty...
    • 정형준
      2002.12.13 18:37
      이렇게 해보세요.     ShowMessage(IntToStr(Integer(False))); 여기서 힌트를 ...
    • 백진욱
      2002.12.17 02:46
      이상로님 말씀처럼 윈도 2000일경우 폼의 폰트속성에서 Charset 속성을 HANGEUL_CHARSET 로 설정해주...
    • 신강섭
      2002.12.17 00:50
      그건 개발할때 폰트를 한글로 마춰서 개발하면 2000이 됐건 98됬건 아무상관 없습니다. 착오없으시...
    • 심재용
      2002.12.16 10:41
      개인적으로는 win 2000  을 계속사용하시길 추천합니다. 이유인 즉 win98 이 너무 불안정해서 o...
    • 이상로
      2002.12.13 02:28
      OS가 2000이상인 경우에는 Font Dialog의 언어 선택이 굴림체등을 선택해도 자동으로 한글로 바뀌지 않아...
    • 김용덕
      2002.12.13 02:26
      안녕하세요. 저도 그런 경우가 있긴 했는데, 그건 Main Form의 폰트때문입니다. Main Form의 Font를 굴림...
    • 하기
      2002.12.13 01:44
      화면도 무지크게 늘어납니다 ====> 아마도 그건 Scaled때문이 아닐까 싶네요... 폰트가 깨진다는 말은...
    • 질문걸
    • 2002.12.13 00:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2002.12.13 00:56
      아마도 Hint를 말씀하시는것 같군요... 해당 컴포넌트의 Properties에 보시면 Hint라는것이 있을꺼여염 ...