|
공윤경 님이 쓰신 글 :
: 많은 분들의 만류(?)에도 불구하고 어쩔수없이 OpenDialog를 만들어야할 팔자에 놓여진공윤경이라고 합니다.
: 제가 일하는곳은 일본이구요. 당연히 초짜인 저는 시키면 시키는대로...
: 게다가. 아직 제 의견을 담당자를 설득할정도의 일어 실력이 안되어나서리 ㅠㅠ
: 일단 담당자는 여러나라에서 쓰는 플그램을 만들려하고 일본어가 안되는 컴터에서는 일단 일본어는 안보이고 영어로 표시되게 하는데....Tnt컴포넌트인가? 그건 쓰지 않는게 좋다고 합니다.
:
: 아무튼 그래서 오픈다이알로그를 만들고있는데요
: 드라이브콤보박스에서 A드라이브라던가 비어있는 드라이브를 선택했더니 에러가 나더라구요
: I/O error 21 이라는데
: 밑에 검색해보니 이런 소스가 있는데요
: 빌더에선..어찌..해야하나요?
:
: _______________________________________________________________________
: 델파이 소스입니다.
: 전 아래와 같은 방법으로 체크했습니다.
: 다음과 같은 함수를 선언한 후 호출해 보세요.........
:
: procedure TForm1.DriveComboBox1Click(Sender: TObject);
: var
: currentdrv: char;
: defaultdrv: integer;
: begin
: defaultdrv := DriveComboBox1.Items.IndexOf('C: ['+GetVolumeName('C')+']');
: currentdrv := DriveComboBox1.Text[1];
:
: case GetDriveType(PChar(currentdrv + ':\')) of
: DRIVE_REMOVABLE :
: begin
: if not DiskInDrive(currentdrv) then begin
: showmessage('디스켓이 없습니다.');
: DriveComboBox1.ItemIndex := defaultdrv;
: end;
: end;
: DRIVE_CDROM :
: begin
: if not DiskInDrive(currentdrv) then begin
: showmessage('CD-Title이 없습니다.');
: DriveComboBox1.ItemIndex := defaultdrv;
: end;
: end;
: DRIVE_REMOTE :
: begin
: if not DiskInDrive(currentdrv) then begin
: showmessage('remote drive를 연결할 수 없습니다.');
: DriveComboBox1.ItemIndex := defaultdrv;
: end;
: end;
: end;
: end;
:
: function DiskInDrive(const Drive: char): Boolean;
: var
: DrvNum: byte;
: EMode: Word;
: begin
: result := false;
: DrvNum := ord(Drive);
: if DrvNum >= ord('a') then dec(DrvNum,$20);
: EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
: try
: if DiskSize(DrvNum-$40) <> -1 then result := true
: else messagebeep(0);
: finally
: SetErrorMode(EMode);
: end;
: end;
|