みなさんの知恵をお貸しください。よろしくお願いします。
ドライブコンボボックスで選択したドライブの空き容量を、
取得したいと考えているのですが、DiskFreeを使ってスマートに
表現できないでしょうか?
こんにちは。
フォーム上に
・DriveComboBox1(TDriveComboBox)
・Label1(TLabel1)
を配置して、下記のようにソースを組むのは如何でしょう。
Size が、ドライブの空き容量になります。
Integer 型だと 2GB までしか取得できませんが、
Extended 型だと正常取得できます。
1024 より大きい限りは 1024 で割っていくことで、単位をあわせています。
DiskFree で -1 が出力されるとドライブは存在しないので、その表示もしています。
単位を定義している場所の'TB'は、ちょっとした洒落のつもりです。
でも、10年後は洒落じゃなくなっているのでしょうね…。
procedure TForm1.DriveComboBox1Change(Sender: TObject);
var
Size : Extended;
Fig : string;
FigList : array[0..4] of string;
i : Integer;
begin
//空き容量取得
Size:= DiskFree(Ord(DriveComboBox1.Drive)-64);
//単位定義
FigList[0]:='Byte';
FigList[1]:='KB';
FigList[2]:='MB';
FigList[3]:='GB';
FigList[4]:='TB';
//単位変換
i:=0;
while (Size>=1024) and (i<=4) do
begin
Size:= Size / 1024;
Inc(i);
end;
Fig:= FigList[i];
//ラベルに表示
if Size>=0 then
Label1.Caption:= Format('%4.1f %s',[Size, Fig])
else if Size=-1 then
Label1.Caption:= 'Error: Drive is not found.'
else
Label1.Caption:= 'Error: ???';
end;
おおさわさんありがとうございます。
非常にわかりやすく、ソースまで組んでいただき感謝しています。
これを参考にしてやってみます。
本当にありがとうございました。
ツイート | ![]() |