注册 登录
编程论坛 VB6论坛

求教VB的控制台程式执行时显示进度条?

wube 发布于 2015-03-18 09:55, 952 次点击
VB的控制台程式执行时的Dos视窗,如何做出像VC执行时显示进度条?如图...
只有本站会员才能查看附件,请 登录
9 回复
#2
风吹过b2015-03-18 21:37
这个真不会,以前Qbasic时,有定位命令,

VB6,你输出退格键试试。
#3
wube2015-03-18 21:55
以前有人教過用VC做這個,所以反過來想,如果把VC用的指令拿到VB來當API去搞,也許。。。
不過據我問人的結果,前幾行好搞,就用VB產生BAT檔,並去執行它就行了。有echo on
但是進度條就比較麻煩了,雖說可以用API取取得視窗句柄,但是要在定點重複寫字,就不會了,
用SHELL COMMAND也是會返回視窗句柄。

網路上是回說是能做但是很麻煩,還不如改用別種語言來做。
#4
wp2319572015-03-19 08:30
c下如此(一种模拟状态)  vb下还没弄过控制台

程序代码:

#include <stdio.h>
#include <windows.h>

int main(void)
{
    int i,j;
    for(i=1;i<=100;i++)
    {
        printf("当前运行了%6.2lf%% .",(double)i/100.0*100);
        for(j=0;j<20;j++) printf("\b");
        Sleep(200);
    }
    printf("\n");
    return 0;

}
#5
lianyicq2015-03-19 15:10
看看这个http://visualbasic.有没有帮助.
#6
wube2015-03-19 15:15
以下是引用lianyicq在2015-3-19 15:10:16的发言:

看看这个http://visualbasic.有没有帮助.


感觉有戏....等我把C调试完再来试试看...
#7
wube2015-03-19 16:08
先跟着范例做,基本上可以做出来,但是要进度条那功能,就还要再研究研究.
#8
lianyicq2015-03-19 16:14
只要知道如何对窗口输入输出就好办了,进度条试试
...
ConsolePrint 后面跟字符串,得到的进度百分比要转换为字符。另外还有一个光标位置问题,只能在固定位置显示百分比,只有把百分比格式化为固定位数,下次显示前用退格字符清掉。

[ 本帖最后由 lianyicq 于 2015-3-19 16:29 编辑 ]
#9
wube2015-03-19 19:13
这有中文的资料...
http://shikhsnu.

偷懒做出来,但是数字部分还是要想怎退格.
只有本站会员才能查看附件,请 登录
#10
wxyu2472015-03-21 20:10
程序代码:

Option Explicit

Const STD_INPUT_HANDLE = -10&
Const STD_OUTPUT_HANDLE = -11&
Const STD_ERROR_HANDLE = -12&

Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleW" (ByVal hConsoleOutput As Long, ByVal lpBuffer As Long, ByVal nNumberOfCharsToWrite As Long, ByVal lpNumberOfCharsWritten As Long, ByVal lpReserved As Long) As Long
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleW" (ByVal hConsoleInput As Long, ByVal lpBufferas As Long, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, ByVal pInputControl As Long) As Long
Private Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long

Dim hin As Long
Dim hout As Long
Dim herr As Long

Sub Cout(s As String)
    WriteConsole hout, StrPtr(s), Len(s), 0, 0
End Sub

Function Cin() As String
Dim buf As String
Dim n As Long
Dim f As Long
    buf = Space(1024)
    f = ReadConsole(hin, StrPtr(buf), 1024, n, 0)
    Cin = Left(buf, n)
End Function

Private Sub Command1_Click()
Dim s As String
Dim n As Long
    Cout "请输入定时器速度,单位毫秒:"
    FlushFileBuffers hin
    s = Cin
    Cout s
    Timer1.Interval = CInt(s)
    Timer1.Enabled = True
End Sub

Private Sub Form_Load()
    AllocConsole
    hin = GetStdHandle(STD_INPUT_HANDLE)
    hout = GetStdHandle(STD_OUTPUT_HANDLE)
    herr = GetStdHandle(STD_ERROR_HANDLE)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    FreeConsole
End Sub

Private Sub Timer1_Timer()
Static n As Long
    n = n + 1
    Cout vbCr & "进度:" & n & "%  "
    If n >= 100 Then
        Timer1.Enabled = False
        n = 0
    End If
End Sub

1