Q&A

  • 한수배우겠습니다.( 예외처리 )
openpicturedialog를 사용해서 그림을 불러오려는데요



그림파일포멧 이외의 파일을 선택하면 'Unknown picture file extention(.확장자)'



에러가 뜹니다.



비베에서는 on error go to 해서 exception이 발생하는 경우에는 무조건 에러메시지를



제가 만들어서 예외처리가 용이했는데요.



델파이에서는 그게 아닌듯.



에러의 종류까지 알아야하는건가요? ( except on E:EDivByZero do 처럼.. )



모든 에러를 하나로 통제하는방법은 없는걸까요...



어쨌든, 파일포멧 에러가 발생하면 이것을 어떻게 예외처리합니까?



procedure TForm1.Button1Click(Sender: TObject);

begin

if opendlg.Execute then

try

image1.Picture.LoadFromFile(opendlg.FileName);

except

on E:??? do

begin

showmessage('그림파일이 아닙니다.');

end;

end;

end;



델파이 상의 에러처리는 예외가 발생하면



try 밑의 절을 읽지 않고 except 밑의 절을 읽어야 하는거 아닌가요?



unknown 어쩌고 저쩌고의 에러를 꼭 디스플레이한다음에 except 밑의 절을 띄우던데...



참, 헷갈리네요...





4  COMMENTS
  • Profile
    Mr.Q 2000.07.23 09:18
    on EInvalidGraphic do 하시면됩니다.

    디자인타임시, 예외오류메세지창이 뜰때, 읽어보면

    예외명이 나옵니다.



    그리고, 여러가지 경우의 예외처리를 하려면,

    except

    on .. do

    on .. do

    하면되는것 같습니다. 도움말에서 'except'를 참고하세요





    최준연 wrote:

    > openpicturedialog를 사용해서 그림을 불러오려는데요

    >

    > 그림파일포멧 이외의 파일을 선택하면 'Unknown picture file extention(.확장자)'

    >

    > 에러가 뜹니다.

    >

    > 비베에서는 on error go to 해서 exception이 발생하는 경우에는 무조건 에러메시지를

    >

    > 제가 만들어서 예외처리가 용이했는데요.

    >

    > 델파이에서는 그게 아닌듯.

    >

    > 에러의 종류까지 알아야하는건가요? ( except on E:EDivByZero do 처럼.. )

    >

    > 모든 에러를 하나로 통제하는방법은 없는걸까요...

    >

    > 어쨌든, 파일포멧 에러가 발생하면 이것을 어떻게 예외처리합니까?

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if opendlg.Execute then

    > try

    > image1.Picture.LoadFromFile(opendlg.FileName);

    > except

    on EInvalidGraphic do

    > begin

    > showmessage('그림파일이 아닙니다.');

    > end;

    > end;

    > end;

    >

    > 델파이 상의 에러처리는 예외가 발생하면

    >

    > try 밑의 절을 읽지 않고 except 밑의 절을 읽어야 하는거 아닌가요?

    >

    > unknown 어쩌고 저쩌고의 에러를 꼭 디스플레이한다음에 except 밑의 절을 띄우던데...

    >

    > 참, 헷갈리네요...

    >

    >

  • Profile
    최준연 2000.07.23 09:25
    Mr.Q wrote:

    > on EInvalidGraphic do 하시면됩니다.

    > 디자인타임시, 예외오류메세지창이 뜰때, 읽어보면

    > 예외명이 나옵니다.

    >

    > 그리고, 여러가지 경우의 예외처리를 하려면,

    > except

    > on .. do

    > on .. do

    > 하면되는것 같습니다. 도움말에서 'except'를 참고하세요

    >

    >



    procedure TForm1.Button1Click(Sender: TObject);

    var

    myerrorstring: string;

    begin

    if opendlg.Execute then

    try

    image1.Picture.LoadFromFile(opendlg.FileName);

    except

    on E:Einvalidgraphic do

    begin

    showmessage('tt');

    end;

    end;

    end;



    에서요...



    그래도 Einvalidgrahphic Unknown Picture file extension 하고 에러가 는걸요...



    에러메시지의 확인을 누르고 f9로 계속 진행하면요, 그때서야 tt가 출력되는데,



    왜 자꾸 try 밑의 절을 읽는것일까요....



    tt만 뜨게 하려면 어케해야는쥐....



    갑갑합니당...

  • Profile
    Mr.Q 2000.07.23 09:39
    최준연 wrote:

    > Mr.Q wrote:

    > > on EInvalidGraphic do 하시면됩니다.

    > > 디자인타임시, 예외오류메세지창이 뜰때, 읽어보면

    > > 예외명이 나옵니다.

    > >

    > > 그리고, 여러가지 경우의 예외처리를 하려면,

    > > except

    > > on .. do

    > > on .. do

    > > 하면되는것 같습니다. 도움말에서 'except'를 참고하세요

    > >

    > >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > myerrorstring: string;

    > begin

    > if opendlg.Execute then

    > try

    > image1.Picture.LoadFromFile(opendlg.FileName);

    > except

    > on E:Einvalidgraphic do

    > begin

    > showmessage('tt');

    > end;

    > end;

    > end;

    >

    > 에서요...

    >

    > 그래도 Einvalidgrahphic Unknown Picture file extension 하고 에러가 는걸요...

    >

    > 에러메시지의 확인을 누르고 f9로 계속 진행하면요, 그때서야 tt가 출력되는데,

    >

    > 왜 자꾸 try 밑의 절을 읽는것일까요....

    >

    > tt만 뜨게 하려면 어케해야는쥐....

    >

    > 갑갑합니당...



    컴파일러에서 디버깅중에라도 예외발생시 무조건 예외메세지를 보여줍니다.

    그순간 예외를 일으키는 코드 해당줄에 아마도 중단점이 생길겁니다.

    if opendlg.Execute then

    try

    image1.Picture.LoadFromFile(opendlg.FileName);

    컴파일러는 지끔 여기까지 와서 예외가 일어나자 예외메세지를 보여준겁니다.

    여기서 디버깅이 잠시 멈추고, f9등으로 진행을 하면.. 다음 줄을 처리합니다.

    except

    on E:Einvalidgraphic do

    begin

    showmessage('tt'); 요기까지 왔죠? 여기서 메세지창 ok하면,

    그 다음줄로 넘어가는겁니다.



    그런데, 델파이에서 run해서 동작중인 윈도말고,

    저장시킨 exe파일을 윈도우상에서 실행해보면, 예외메세지가 뜨진 않습니다.



    그리고, E:EinvalidGraphi이 아닌것 같은데요. 그냥 EInvalidGraphic인것 같은데.

    둘다 똑같은건가?!







  • Profile
    최준연 2000.07.23 23:26
    비베에서는 예외처리를 하면 Run 시킬때도 그게 적용이 되어서 에러를 제어할수 있는데



    델파이에서는 exe파일을 실행시켜보니 try except가 먹히더군요..



    그런줄 정말 몰랐습니다.



    답변, 감사합니다.

    • 사람
    • 2000.07.24 06:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • kanis
    • 2000.07.24 06:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.07.24 20:03
      kanis wrote: > ADO를 사용해서 프로그램을 만들구, 또 설치프로그램도 만들었습니다. > 그런데.... mdac...
    • 나현희
      2000.07.25 02:22
      에구 에구... 담번에 알아 보시네. 그럴줄 알았다면 그냥 바로 물어볼걸... launch application dialog ...
    • 황현
    • 2000.07.24 06:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오광배
      2000.07.29 02:39
      박종삼 wrote: > 서버소켓에 특정 IP 번호를 대입시킬 방법은 없나요.. > > ServerSocket1.Socket.Conn...
    • Mr.Q
      2000.07.24 05:38
      김미좌 wrote: > 알려주시면 감사하겠습니다. 우선 호출하는 폼의 KeyPreview속성을 true로 놓고 KeyDo...
    • 김미좌
      2000.07.24 06:01
      답변감사합니다. 그런데 님의 말씀대로 했는데.... 실행이 되지않습니다 왜그럴까요 호출하는폼은 mdim...
    • Mr.Q
      2000.07.24 07:19
      김미좌 wrote: > 답변감사합니다. > 그런데 님의 말씀대로 했는데.... > 실행이 되지않습니다 > 왜그럴...
    • 김미좌
      2000.07.24 16:30
      답변감사합니다
    • 박상문
    • 2000.07.24 02:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.07.24 09:29
      박상문 wrote: > > 안녕하세요 > 현재 excel 로 작성된 data를 델파이 에서 끌어 올려고 합니다 > ...
    • 델초보
    • 2000.07.24 02:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정지호
      2000.07.24 19:03
      델초보 wrote: > 최준연님 답변에 감사드립니다. > 그런데 ShellExecute함수 사용하는 방법을 좀더 구체...
    • 최준연
    • 2000.07.24 00:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.24 02:31
      최준연 wrote: > Dbnavigator의 취소 버튼기능을 구현해보려합니다. > 문제는 마지막 세번째 procedure의...
    • 델초보
    • 2000.07.23 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최준연
      2000.07.24 00:20
      델초보 wrote: > 제가 넘 초보질문을 하나요? T.T > 폼에서 버튼이나 글씨를 클릭하면 익스플로러로 HTML...
    • 최준연
      2000.07.24 00:04
      사발우성 wrote: > 안뇽 하십니꺼 사발임당..^^ > > 올만에 질문임당...한2주.....^^ > > 지가엽.. ...
    • 사발우성
      2000.07.24 00:25
      헐 내용 없다니깐.....--+
    • 샘나라
      2000.07.27 11:50
      정말 감사합니다. (^^)(__) 꾸벅~~ 님들 덕에 연결하는데 성공했네요. 에거~~ 이렇게 간단한걸...
    • ADO광신자-왕자^^;
      2000.07.24 20:30
      안녕하세요..영원한 델초보 어린왕자입니다요.. 델5.0이니깐 ADO컴포넌트 쓰심이 어떠실런지.. TADOTable...
    • 최준연
      2000.07.24 00:00
      샘나라 wrote: > 델파이로 MS-Access DB를 연결해서 DB Grid에 나타내려고 합니다. > Table 컴포넌트와 D...
    • 최준연
      2000.07.23 23:42
      델초보 wrote: > SP -> SPSearch 를 작성하고 결과를 변수에 넣으려 하는데 에러가 나서 질문을 > 올립...
    • 최준연
    • 2000.07.23 23:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오광배
      2000.07.29 03:32
      최준연 wrote: > 정말 기본적인 문제인것 같은데 잘 안되는걸요... > > 버튼 클릭했을때에 데이타가 이...
    • 최준연
    • 2000.07.23 21:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 23:43
      최준연 wrote: > SetFocus를 단지 커서하나만 두는것이 아니라 텍스트 전체를 블록지정한 형태로 구현 > ...
    • 최준연
      2000.07.24 00:26
      Mr.Q wrote: > 최준연 wrote: > > SetFocus를 단지 커서하나만 두는것이 아니라 텍스트 전체를 블록지정...
    • 최준연
    • 2000.07.23 09:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 09:29
      최준연 wrote: > 예를들어서, 테이블에 다음과같은 두개의 필드가 있습니다. > > 이름 -- char(20) > ...
    • 최준연
      2000.07.23 09:35
      Mr.Q wrote: > > DBImage컴포를 쓰세요. datasource를 지정하고, > datafield에 이미지가 저장되있는 b...
    • Mr.Q
      2000.07.23 09:49
      최준연 wrote: > Mr.Q wrote: > > > > DBImage컴포를 쓰세요. datasource를 지정하고, > > datafield...
    • 최준연
    • 2000.07.23 09:03
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 09:18
      on EInvalidGraphic do 하시면됩니다. 디자인타임시, 예외오류메세지창이 뜰때, 읽어보면 예외명이 나옵...
    • 최준연
      2000.07.23 09:25
      Mr.Q wrote: > on EInvalidGraphic do 하시면됩니다. > 디자인타임시, 예외오류메세지창이 뜰때, 읽어보...
    • Mr.Q
      2000.07.23 09:39
      최준연 wrote: > Mr.Q wrote: > > on EInvalidGraphic do 하시면됩니다. > > 디자인타임시, 예외오류메...
    • 최준연
      2000.07.23 23:26
      비베에서는 예외처리를 하면 Run 시킬때도 그게 적용이 되어서 에러를 제어할수 있는데 델파이에서는 ex...
    • 왕초보
    • 2000.07.23 07:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 08:26
      -.-; 거의 모든 에러가, 스트링변수를 숫자형변수로 변환해주지 않아서 생긴것이고 나머지는 오타입니다...