|
많은 분들의 만류(?)에도 불구하고 어쩔수없이 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;
|