Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Làm sao hiện quá trình thực hiện lệnh!
#1
Tôi đang muốn khi chương trình đang chạy một số dòng lệnh, sẽ có một bảng hiện ra cho biết tiến trình thực hiện (ví dụ như hình)

[Hình: hinh2.jpg]

PRO giúp nhé.
Chữ ký của haquocquan Guest, you are welcome!
ღღღღღTài sản của haquocquan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
Thanh tiến trình, hay còn gọi là progress bar. Dùng để diễn tả tiến trình hoàn thành công việc của form/ đoạn code. Tuy vậy, bạn có để ý khi cài win XP đến còn 7 phút, thì chờ rất lâu không?
Thật ra, thanh tiến trình không liên tục như mình tưởng, và mình hoàn toàn có thể thiết kế bằng cách vẽ 1 label lớn, vẽ 1 label bên trong có chiều rộng bằng 0, tâu màu nền cho label nhỏ. Giả sử bạn có 10 câu lệnh, mỗi khi hoàn thành 1 câu lệnh, cho chiều rộng label nhỏ bằng chiều rộng label lớn chia 10, tăng dần như thế cho tới khi label nhỏ có chiều rộng bằng label lớn, là hoàn thành 100%.

Cái mình đề cập ở trên là cách làm và nguyên lý hoạt động của 1 progress bar. Thực tế, windows có hỗ trợ cho chúng ta 1 active X cho cái progress bar này. Xin trích lại 1 bài viết của a.p.r.pillai post trên trang msaccesstips.com :
Trích dẫn:Posted By a.p.r.pillai On 04 Jan 2008. Under Forms Tags: progressmeter

Continued from previous article: Progress Meter



We will try the Progress Bar Control on the sample Form that we have already designed earlier, for using with Macros.



NB: This method for Macros found working only on Microsoft Access 2000. When tried in MS-Access 2003 it totally ignores updating the Progress Bar Control, even with the database Formats MS-Access 2000, 2002 and 2003. If any readers found a solution to this problem please share it with me too.



However, you can use this method with our earlier Program replacing the sysCmd() lines for transaction level processing, to view the Progress Bar on your own Form rather than on the Status Bar.



1/ Open the ProgressMeter Form in Design View.


2/ Select ActiveX Control Option from Insert Menu.


3/ Select Microsoft Progress Bar Control, Version 6.0 from the displayed list.


4/ Draw a Progress Bar on the Form as shown in the image below. You have to do some resizing to make it look like the sample below. You can make it any size and shape you prefer.

[Hình: ProgressBar2-751878.jpg]

5/ Progress Bar in Design View


Select the Progress Bar Control (if you have deselected it) and display the Property Sheet (View – - > Properties).


6/ Change the following Property Values are shown below:


Name = PB2


Visible = False


7/ Create a label at the left side of the ProgressBar. Display its Property Sheet and change the following values:


Name = lblStatus


Visible = False


8/ Select the Command Button on the Form, display the Property Sheet and change the On Click Property.


On Click = Spl_Report



Spl_Report is a Macro in which we have sequenced our processing steps and the Progress Bar will show the current status of its activity.


9/ Save the Form after the changes.


10/ Select Options from Tools Menu. Uncheck the Status Bar under the Show Option group on View Tab. Click Apply and Click OK to close the control.


11/ If you have a Macro running several steps of Queries, Macros and Code, make a copy and rename it as Spl_Report and we will modify it for our demo. A sample Macro Image is given below for reference.

[Hình: ProgressBar22-780286.jpg]

Spl_Report Macro Image



The first two steps on the Macro's Action Field have their values set as No.



The third line Calls the ProgMeter2(1,5,"PB2") Function with the RunCode macro command with three parameters to initialize the Progress Meter. Values of the parameters represents the following:


1 = indicating that the Progress Bar must be initialized.


5 = This is the maximum number of steps of Queries, other macros or Functions that we are going to run.


PB2 = The Name of the Progress Bar Control drawn on the Form.


12/ The Function must be called after every Query running step to update the Progress Bar. But, subsequent calls to the function ProgMeter2(0) needs only with 0 (zero) as Parameter indicating that it is the Progress Meter's updating step.


13/ Insert one row each after every Query on the Macro, Copy and paste the RunCode macro line on the inserted rows calling the Function ProgMeter2(0)


14/ At the end of the Macro steps add one more line to call the Function ProgMeter2(2), with the parameter value 2 indicating that the work is over and to turn off the ProgressBar.


15/ If you have added more steps later in the Macro and forgot to modify the initializing value (second parameter 5) the program will ignore further updating calls and wait for the terminating parameter 2 for closing the Progress Bar.


16/ Save the Spl_Report Macro after the above changes.


17 Copy and Paste the following VB Code into a Global Module in your Project and save it.


Mã:
Public Function ProgMeter2(ByVal xswitch As Integer, Optional ByVal Maxval As Integer, Optional ByVal strCtrl As String)
    '----------------------------------------------------------
    'Program : Progress Bar Demo2
    'Author  : a.p.r. pillai
    'Date    : 02/01/2008
    '----------------------------------------------------------
    Static mtrCtrl As Control, i As Integer, xmax As Integer
    Static lbl As Label, frm As Form
    Dim position As Integer, xtime As Date

    On Error GoTo ProgMeter2_Err

    If xswitch = 1 Then
     'init control
        Set frm = Screen.ActiveForm
        Set mtrCtrl = frm.Controls(strCtrl)
        Set lbl = frm.Controls("lblstatus")
        mtrCtrl.Visible = True
        lbl.Visible = True
        xmax = Maxval
        i = 0
        DoEvents
    ElseIf xswitch = 0 Then
        i = i + 1
        if i > xmax then
              goto ProgMeter2_Exit
        end if
        position = i * (100 / xmax)
        mtrCtrl.Value = position
        DoEvents
    ElseIf  xswitch = 2 Then
        mtrCtrl.Visible = False
        lbl.Visible = False

        Set mtrCtrl = Nothing
        i = 0
        xmax = 0
        Exit Function
    End If

    ProgMeter2_Exit:
    Exit Function

    ProgMeter2_Err:
    MsgBox Err.Description, , "ProgMeter2"
    Resume ProgMeter2_Exit
    End Function



18/ The Program Logic is the same as of SysCmd() we have used for updating the Status Bar in our earlier example. The only difference is our program updates the Progress Bar on a Form. The built-in Function SysCmd() have other implementations too, with different set of Parameters.


Open the ProgressMeter Form in Normal View. Click on the [Process Orders] Command Button to Run the process steps in Spl_Report Macro.



The Progress Bar will now show up on the Form with the message Working� at the left side Label.



The image of a sample run is given below.



sample run image of Progress Bar

[Hình: ProgressBar3-798930.jpg]

You can implement this method on any Form, like on your Control Screen or on a separate report running parameter Form. When you call the Function ProgMeter2() use the Name that you have given to the Progress Bar Control as third parameter to the Function in place of PB2, that we have used for our example: ProgMeter2(1,5,"PB2"). Subsequent call to the Functions needs only one parameter value 0 for updating the control at each step and 2 to close the Progress Bar at the end.



Further improvement on the design of the Form and the Code is required to prevent Users from closing the Form by accident or straying away from the Form for doing something else making the Form inactive etc. In such situations the program may run into Error.



As I have mentioned at the beginning you can use this function for your VB Routines that updates Table at record level.

Như mình đã nói, progress bar thật ra chỉ là paint lại hình ảnh sau mỗi tiến trình. Vì vậy nếu bạn run 1 query lớn thì nó phải đợi run query, hay 1 lệnh nào đó tốn nhiều thời gian, thì nó chờ lệnh đó xong mới hiện tiếp tục. Điều này nếu bạn thường cài win sẽ thấy rõ, kể cả microsoft cũng không có cách nào khác cả! big green


File đính kèm
.zip   ProgressMeter.zip (Kích cỡ: 309.57 KB / Tải về: 139)
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn haquocquan , Cafe Via He , hieuvn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tự động hiện Form khi loading hết thời gian ChiMai 1 49 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
  Query hiện lên trên form? feeling 4 167 09-11-16, 09:49 PM
Bài mới nhất: toancvp
  Chỉ hiện form feeling 2 118 05-10-16, 02:15 PM
Bài mới nhất: jeck09nt
  Click đúp chuột hiện form và cập nhật dữ liệu theo số phiếu Ranju 1 133 05-10-16, 11:02 AM
Bài mới nhất: lmthu
  [Help] Hiện các nội dung các file văn bản và hình ảnh trên Form thdanh 2 144 22-07-16, 10:26 PM
Bài mới nhất: ongke0711

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ