none
讀數據的小問題 RRS feed

  • 問題

  • 各位前輩們好,小弟剛剛再測試一個程式  程式碼如下:

    Private Sub Command4_Click()

    For P = 0 To 2
        Image1(P).Picture = LoadPicture("c:\IC" & P & ".bmp")
    Next P

    For k = 1 To 2

    For i = 0 To Picture1(0).ScaleHeight - 1
        For j = 0 To Picture1(0).ScaleWidth - 1

            get_color1 = GetPixel(Picture1(0).hdc, i, j)
            gray_value1 = get_color1 And &HFF&
            gray_sum1 = gray_sum1 + gray_value1
            gray_square1 = gray_square1 + (gray_value1 ^ 2)
       
            get_color2 = GetPixel(Picture1(k).hdc, i, j)
            gray_value2 = get_color2 And &HFF&
            gray_sum2 = gray_sum2 + gray_value2
            gray_square2 = gray_square2 + (gray_value2 ^ 2)
       
            gray_corr = gray_corr + (gray_value1 * gray_value2)
            nn = nn + 1
        Next j
    Next i

    r = (nn * gray_corr - gray_sum1 * gray_sum2) / ((nn * gray_square1 - gray_sum1 ^ 2) * (nn * gray_square2 - gray_sum2 ^ 2)) ^ 0.5

        Label1(k).Caption = Format(r, "0.0%")

    Next k

    End Sub

     

    結果Label1(1)跟Label1(2) 居然會是相同的數值,於是我就設中斷點(粗體那一行)察看r值

    然後看兩次r值果然是不一樣,最後Label1(1)跟Label1(2) 當然也不一樣

    於是我就又正常在run一遍,結果又一樣了= = 請問前輩們這是怎麼回是呀??  謝謝

     

    2011年8月11日 上午 09:08

解答

  • 因為你沒把 CPU 空下來讓螢幕更新。

       

      Label1(k).Caption = Format(r, "0.0%")
      ' 強制更新
      Label1(k).Refresh
    Next k
    
    ' 或
    
      Label1(k).Caption = Format(r, "0.0%")
      ' 讓 CPU 做其他事
      DoEvents
    Next k
    
    


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年8月11日 下午 01:00

所有回覆

  • 因為你沒把 CPU 空下來讓螢幕更新。

       

      Label1(k).Caption = Format(r, "0.0%")
      ' 強制更新
      Label1(k).Refresh
    Next k
    
    ' 或
    
      Label1(k).Caption = Format(r, "0.0%")
      ' 讓 CPU 做其他事
      DoEvents
    Next k
    
    


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年8月11日 下午 01:00
  • 回覆心冷前輩,小弟依照您的解說試了一下,發現用方法一

    Label1(k).Caption = Format(r, "0.0%")
      ' 強制更新
      Label1(k).Refresh
    Next k

    偶爾還是會出現跑出一樣值的情形

    用方法二

      Label1(k).Caption = Format(r, "0.0%")
      ' 讓 CPU 做其他事
      DoEvents
    Next k

    則還是一樣的情形耶

     

    我把他改成

     Label1(k).Caption = Format(r, "0.0%")
      ' 讓 CPU 做其他事
      DoEvents

     Label1(k).Refresh

    Next k

    就正常了,這是為什麼呀??? 

     謝謝心冷前輩一直指點我,受益良多,感恩^^

     

    2011年8月12日 上午 03:12