線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1239
推到 Plurk!
推到 Facebook!

如何做驱动器信息状态显示!

尚未結案
xxlzl
一般會員


發表:11
回覆:10
積分:4
註冊:2003-11-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-05 17:07:20 IP:61.174.xxx.xxx 未訂閱
想做个驱动器信息状态显示,不知道怎么做?就如下面这样: C:■■■■■□□ 70% 已使用 BCB里只有progressbar,没有其他可以做的,不知道十分使用这个组件? 發表人 - taishyang 於 2004/01/05 17:13:54
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-06 10:34:28 IP:61.218.xxx.xxx 未訂閱
xxlzl你好: 你可以自己做一個,首先create一個form上面放 TLabel TProgressBar TLabel 照上面的順序放就可以做成自己想要的進行流程!!
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-06 11:43:47 IP:218.167.xxx.xxx 未訂閱
你也可以採用 CGauge Baby
xxlzl
一般會員


發表:11
回覆:10
積分:4
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-06 15:57:44 IP:61.174.xxx.xxx 未訂閱
我也是这样做的,加了 label1 progressbar1 label2 三个组件; DWORD sector,byte,cluster,free; long int freespace,totalspace; GetDiskFreeSpace("C:",§or,&byte,&free,&cluster); totalspace=int(cluster)*int(byte)*int(sector)/1024/1024; //计算总容量 freespace=int(free)*int(byte)*int(sector)/1024/1024; //计算可用空间 Label1->caption="c: "; ProgressBar1->Min=0; ProgressBar1->Max=totalspace; ProgressBar1->Smooth=true; ProgressBar1->Position=(totalspace-freespace); Label2->caption=String(freespace/totalspace) "%" "free"; 可不对。
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-06 17:43:48 IP:61.218.xxx.xxx 未訂閱
xxlzl您好:    試試這個方法是不是您要的方法:    
//---------------------------------------------------------------------------    #include 
#pragma hdrstop
#include 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
 AnsiString sdFree;
 __int64 BytesFree = DiskFree(0);
 __int64 BytesTotal = DiskSize(0);     Label1->Caption="c: ";
 ProgressBar1->Min=0;
 ProgressBar1->Max=BytesTotal;
 ProgressBar1->Smooth=true;
 ProgressBar1->Position=(BytesTotal-BytesFree);
 sdFree="可使用空間 " + IntToStr( BytesFree ) +" Byte";
  Label2->Caption="已使用空間"+ IntToStr(BytesTotal-BytesFree)+"Byte";
 ShowMessage( sdFree);        }
//---------------------------------------------------------------------------
如果您要的是使用百分比....自己寫看看 用TCGuage這個元件試試... < class="code">/*生活是一種藝術,用心生活才能享受生活*/ 發表人 - axsoft 於 2004/01/06 18:05:12
xxlzl
一般會員


發表:11
回覆:10
積分:4
註冊:2003-11-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-06 19:12:12 IP:61.174.xxx.xxx 未訂閱
谢谢 axsoft答复; 可你的这个程序运行后,没有状态条的显示。不知道怎么回事?
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-06 20:03:10 IP:61.218.xxx.xxx 未訂閱
引言: 谢谢 axsoft答复; 可你的这个程序运行后,没有状态条的显示。不知道怎么回事?
不就form上面放個TLabel TProgressBar TLabel 上圖就是實際的結果....請檢查相關資料有無Lose 記得要
#include 
/*生活是一種藝術,用心生活才能享受生活*/
irvinehing
初階會員


發表:77
回覆:79
積分:31
註冊:2003-11-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-07 10:31:33 IP:202.174.xxx.xxx 未訂閱
引言: 谢谢 axsoft答复; 可你的这个程序运行后,没有状态条的显示。不知道怎么回事?
ProgressBar的Min, Max值太大了無法顯示。
        AnsiString sdFree;
        __int64 BytesFree = DiskFree(0);
        __int64 BytesTotal = DiskSize(0);            Label1->Caption="c: ";
        ProgressBar1->Min=0;
        ProgressBar1->Max=BytesTotal / 1024 / 1000;
        ProgressBar1->Smooth=true;
        ProgressBar1->Position=(BytesTotal-BytesFree) / 1024 / 1000;
        sdFree="可使用空間 "   IntToStr( BytesFree / 1024 / 1000)  " MB";
        Label2->Caption="已使用空間"  IntToStr((BytesTotal-BytesFree) / 1024 / 1000) "MB";
        ShowMessage( sdFree);
  
xxlzl
一般會員


發表:11
回覆:10
積分:4
註冊:2003-11-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-07 13:11:03 IP:61.174.xxx.xxx 未訂閱
谢谢了哦! 我自己做的那个和你提供的那个 都通过了。可还有三个问题: 1.TCGuage是什么元件,我的BCB6.0上面怎么没啊,在哪里的。 2.IntToStr((BytesFree/BytesTotal)*100) "%" 为什么显示是0% IntToStr(((BytesTotal-BytesFree)/BytesTotal)*100) "%" 为什么显示也是0%。
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-07 18:07:42 IP:61.218.xxx.xxx 未訂閱
因為你用除法除下來有可能是0.xxxxx,可是宣告是int所以曲整數,當然是0
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-08 09:55:13 IP:218.167.xxx.xxx 未訂閱
您可以參考看看     Baby
xxlzl
一般會員


發表:11
回覆:10
積分:4
註冊:2003-11-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-01-08 16:46:31 IP:61.174.xxx.xxx 未訂閱
1.这 CGauge组件,怎么在BCB的 HELP 里面没有介绍它的使用啊 2.我把上面的程序 改了一下,把那__int64 改为 float, label2->caption=string(...);就可以了。 發表人 - xxlzl 於 2004/01/08 16:50:48
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-01-08 17:39:09 IP:61.218.xxx.xxx 未訂閱
這是DDK中取得磁碟容量的寫法相當於DiskFree(),DiskSize()的用法... 只是C++ Builder以經將下面的Code包成DiskFree(),DiskSize()兩個函式了    
    __int64 i64DiskBytes=0,i64FreeBytes=0;
    bool bGetDiskFreeSpaceEx = false;
    HINSTANCE hInstance = ::LoadLibrary("KERNEL32.DLL");
    if(hInstance!=NULL)        // If we got the library
    {
     typedef bool (CALLBACK* MYFUNCPTR)(LPCTSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
     MYFUNCPTR lpfnDLLProc;
     lpfnDLLProc = (MYFUNCPTR)GetProcAddress(hInstance, "GetDiskFreeSpaceExA");
     if(lpfnDLLProc)        // If we got an address to the function
     {
      ULARGE_INTEGER nTotalBytes, nTotali64FreeBytes, nTotalAvailable;
      if((*lpfnDLLProc)(szDriver.c_str(), &nTotalAvailable, &nTotalBytes, &nTotali64FreeBytes))
      {
       i64DiskBytes = nTotalBytes.QuadPart;
       i64FreeBytes = nTotali64FreeBytes.QuadPart;
       bGetDiskFreeSpaceEx = true;
      }
     }
     ::FreeLibrary(hInstance);
    }
    if(!bGetDiskFreeSpaceEx)        // We have to try and use GetDiskFreeSpace()
    {
     ULONG secpercluster, bytespersec, nooffreeclusters, totalnoofclusters;
     if( GetDiskFreeSpace(szDriver.c_str(), &secpercluster, &bytespersec,
         &nooffreeclusters, &totalnoofclusters))
     {
      i64DiskBytes = (totalnoofclusters * secpercluster * bytespersec);
      i64FreeBytes = (nooffreeclusters * secpercluster * bytespersec);
     }
    }
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2004/01/08 17:42:55
CuteBabyBoy
初階會員


發表:18
回覆:97
積分:48
註冊:2003-07-11

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-01-09 09:15:54 IP:218.167.xxx.xxx 未訂閱
CGauge 的元件很容易使用 你試試看吧 CGauge1->MaxValue = 100; CGauge1->MinValue = 0; CGauge1->Progress = 50; Baby
系統時間:2024-07-01 9:09:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!