 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
clmao
註冊時間: 2006-04-15 文章: 57
第 16 樓
|
發表於: 星期三 六月 07, 2006 9:06 pm 文章主題: |
|
|
hdm大大:
謝謝指導!
您的程式與我大同小異,多一個於FORM INIT設定current_recno之初值,
但是,我個人電腦跑起來仍然會有兩段顯示反白列,
正在找其他效能較好電腦測試。
謝謝! |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 17 樓
|
發表於: 星期三 六月 07, 2006 10:42 pm 文章主題: |
|
|
clmao :
我的程式測試的結果是ok的, 跟電腦快慢應沒關係.
你的程式碼有點複雜...,看起來和我設定的屬性與方法還是有差別,
例如 你的程式瑪:
thisform.Pageframe1.Page1.grid1.column18.dynamicforecolor="iif(this.activeRow=RECNO(),thisform.set_color(5,1,IIF(tg_all.model='01', THISFORM.SET_COLOR(1,1, IIF(tg_all.model='02', THISFORM.SET_COLOR(2,1, IIF(tg_all.model='03', THISFORM.SET_COLOR(3,1,THISFORM.SET_COLOR(4,1))))"
(p.s this.activeRow=RECNO() 似乎怪怪的....)
以上和我建議的方式不同,你應該有改善的空間,加油 !! |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 18 樓
|
發表於: 星期四 六月 08, 2006 1:41 pm 文章主題: |
|
|
hdm大大:
我試了一下,發現:
1.我的筆數有七千多筆,當THISFORM.Refresh 時,會全部重新設定一次
2.用this.activeRow時不必先設屬性,他本身就有
3.若是將grid1. HightLightrow=.t. 設為.F.時,全部的延遲就會相同
現在的問題是,不要讓它THISFORM.Refresh 時,就重新設定一次
因為以後的筆數可能會有2萬筆 |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 19 樓
|
發表於: 星期四 六月 08, 2006 2:33 pm 文章主題: |
|
|
clmao
1.我試了22萬筆(我的範例,2個column)速度ok(你可把THISFORM.Refresh改成THISFORM.grid1.Refresh)
2 activeRow 經過 sort 後 不一定等於 recno()
建議你把程式碼檢查/精簡一下,其它的盡在不言中....祝好運囉 !! |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 20 樓
|
發表於: 星期四 六月 08, 2006 4:32 pm 文章主題: |
|
|
hdm大大:
我發現到
如果改為
thisform.grid1.SetFocus
ThisForm.CurrentRec = RECNO()
就是於取得RECNO()前
先設定setfocus
那麼
就不需要This.Refresh
如此速度就會提升至瞬間
謝謝大大指導! |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 21 樓
|
發表於: 星期四 八月 24, 2006 10:18 pm 文章主題: |
|
|
hdm大大及各位大大:
很抱歉,有一個問題要請教您。
就是延續此一問題(顏色)
我有三個FORM,每一個FORM內至少有三個以上的GRID
這三個FORM均是顯示同一個TABLE,但是顯示不同資料(FORM1和FORM3一樣、FORM2不一樣)
FORM1呼叫執行FORM2,FORM2再呼叫執行FORM3。
現在有一問題是:
當呼叫執行到FORM3時,畫面會出現閃爍,就是好像游標一直跑,
但是GRID內的資料不會有變化,只是會一直閃爍,不知各位大大是否有遇到過此一問題?
謝謝!
忘了說明:
如有這時滑鼠游標在GRID上任一位置上,按住滑鼠左鍵,閃爍情形就會暫停。
請問各位大大要如何處理?謝謝! |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 22 樓
|
發表於: 星期五 八月 25, 2006 9:26 am 文章主題: |
|
|
clmao:
不好意思,從你提供的內容無法"猜"出可能原因...
建議你針對form3逐步檢查一下程式,
例如把與顯示有關的程式部份暫時設成 comment/不作用 再測看看. |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 23 樓
|
發表於: 星期五 八月 25, 2006 5:52 pm 文章主題: |
|
|
hdm 寫到: | clmao:
不好意思,從你提供的內容無法"猜"出可能原因...
建議你針對form3逐步檢查一下程式,
例如把與顯示有關的程式部份暫時設成 comment/不作用 再測看看. |
hdm大大:
我有將FORM3裡面有關GRID內所有顏色變化的部分修改。
如此,就不會閃爍。
應該是說:
例如:
thisform.Pageframe1.Page1.grid1.column18.dynamicforecolor="iif(this.activeRow=RECNO(),thisform.set_color(5,1,IIF(tg_all.model='01', THISFORM.SET_COLOR(1,1, IIF(tg_all.model='02', THISFORM.SET_COLOR(2,1, IIF(tg_all.model='03', THISFORM.SET_COLOR(3,1,THISFORM.SET_COLOR(4,1))))"
中間的SET_COLOR()的方式,
我將他改掉不用。
而是直接用rgb(255,255,255)取代時,畫面就不會閃爍。
但是我的程式內的顏色並無法減少,一定要用SET_COLOR()處理。
另外我嘗試將程式COPY一份至另一資料夾。
同時執行。
則,執行到FORM2時,畫面就會有閃爍情形發生。
對了!我呼叫其他FORM都是使用DO FORM FORM2方式。
而FORM1沒有作任何CLOSE或暫停的動作!
不知各位大大有什麼好方法?謝謝大大指導!謝謝hdm大大! |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 24 樓
|
發表於: 星期六 八月 26, 2006 9:15 am 文章主題: |
|
|
只需加1行程式碼到set_color(),即可知道問題所在
function set_color
lpara a,b,c
return rgb(255,255,255) && 加此行測試是否ok
***元程式瑪
............
.........
........
return xxx |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 25 樓
|
發表於: 星期一 八月 28, 2006 10:15 pm 文章主題: |
|
|
hdm 寫到: | 只需加1行程式碼到set_color(),即可知道問題所在
function set_color
lpara a,b,c
return rgb(255,255,255) && 加此行測試是否ok
***元程式瑪
............
.........
........
return xxx |
hdm大大:
因為我的顏色較為複雜,所以我的SET_COLOR程式內容類似下列方式:
IF cou_i=18
WITH THISFORM.GRID1.COLUMN18.comb_all1
DO case
case B_VAL=1
.TEXT1.FORECOLOR=RGB(0,0,128)
.TEXT2.FORECOLOR=RGB(0,0,128)
.TEXT3.FORECOLOR=RGB(0,0,128)
.TEXT5.FORECOLOR=RGB(255,0,0)
CASE B_VAL=2
.TEXT1.FORECOLOR=RGB(116,0,232)
.TEXT2.FORECOLOR=RGB(116,0,232)
.TEXT3.FORECOLOR=RGB(116,0,232)
.TEXT5.FORECOLOR=RGB(255,0,0)
CASE B_VAL=3
.TEXT1.FORECOLOR=RGB(0,111,0)
.TEXT2.FORECOLOR=RGB(0,111,0)
.TEXT3.FORECOLOR=RGB(0,111,0)
.TEXT5.FORECOLOR=RGB(255,0,0)
CASE B_VAL=5
.TEXT1.FORECOLOR=RGB(255,255,255)
.TEXT2.FORECOLOR=RGB(255,255,255)
.TEXT3.FORECOLOR=RGB(255,255,255)
.TEXT5.FORECOLOR=RGB(255,255,255)
otherwise
.TEXT1.FORECOLOR=RGB(0,0,0)
.TEXT2.FORECOLOR=RGB(0,0,0)
.TEXT3.FORECOLOR=RGB(0,0,0)
.TEXT5.FORECOLOR=RGB(255,0,0)
ENDCASE
RETURN .FORECOLOR && 回傳原背景色
ENDWITH
ENDIF
****
所以我是要RETURN .FORECOLOR
但是這一部份沒有閃爍
我有設另外一個SET_COLOR2,內容如下:
IF cou_i=1
WITH THISFORM.GRID1.COLUMN1
DO case
case B_VAL=1
.BACKCOLOR=RGB(255,255,128)
CASE B_VAL=2
.BACKCOLOR=RGB(255,255,255)
CASE B_VAL=3
.BACKCOLOR=RGB(128,255,128)
CASE B_VAL=4
.BACKCOLOR=RGB(128,255,255)
CASE B_VAL=5
.BACKCOLOR=RGB(252,137,131)
CASE B_VAL=6
.BACKCOLOR=RGB(238,201,145)
CASE B_VAL=7
.BACKCOLOR=RGB(249,134,249)
CASE B_VAL=8
.BACKCOLOR=RGB(155,227,199)
CASE B_VAL=9
.BACKCOLOR=RGB(210,172,184)
CASE B_VAL=10
.BACKCOLOR=RGB(196,204,179)
otherwise
.BACKCOLOR=RGB(0,0,0)
ENDCASE
RETURN .BACKCOLOR && 回傳原背景色
ENDWITH
ENDIF
*******
使用到的就會有閃爍情形。
謝謝大大指導! |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 26 樓
|
發表於: 星期二 八月 29, 2006 9:36 am 文章主題: |
|
|
當 cou_i<>1 時 沒有指定傳回值是否會出問題?
加2行程式碼到SET_COLOR2 試試,內容如下:
IF cou_i=1
WITH THISFORM.GRID1.COLUMN1
DO case
case B_VAL=1
.BACKCOLOR=RGB(255,255,128)
CASE B_VAL=2
.BACKCOLOR=RGB(255,255,255)
CASE B_VAL=3
.BACKCOLOR=RGB(128,255,128)
CASE B_VAL=4
.BACKCOLOR=RGB(128,255,255)
CASE B_VAL=5
.BACKCOLOR=RGB(252,137,131)
CASE B_VAL=6
.BACKCOLOR=RGB(238,201,145)
CASE B_VAL=7
.BACKCOLOR=RGB(249,134,249)
CASE B_VAL=8
.BACKCOLOR=RGB(155,227,199)
CASE B_VAL=9
.BACKCOLOR=RGB(210,172,184)
CASE B_VAL=10
.BACKCOLOR=RGB(196,204,179)
otherwise
.BACKCOLOR=RGB(0,0,0)
ENDCASE
RETURN .BACKCOLOR && 回傳原背景色
ENDWITH
else && 新加第1行
return rgb(255,255,255) && 新加第2行
ENDIF |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 27 樓
|
發表於: 星期二 八月 29, 2006 8:37 pm 文章主題: |
|
|
hdm大大:
其實IF cou_i=1是在判斷要針對哪一個欄位作顏色處理。
所以IF cou_i=1可能會有十幾個IF條件。
我曾經改寫為SET_COLOR3,內容如下:
LPARAMETERS B_VAL,cou_i,grid_i
pm01=STR(grid_i,1)
pm02=IIF(cou_i<10,STR(cou_i,1),STR(cou_i,2))
IF B_VAL>10
B_VAL=B_VAL-(INT((B_VAL - 2)/8)*8)
ENDIF
WITH THISFORM.GRID&pm01..COLUMN&pm02
DO case
case B_VAL=1
.BACKCOLOR=RGB(255,255,128)
CASE B_VAL=2
.BACKCOLOR=RGB(255,255,255)
CASE B_VAL=3
.BACKCOLOR=RGB(128,255,128)
CASE B_VAL=4
.BACKCOLOR=RGB(128,255,255)
CASE B_VAL=5
.BACKCOLOR=RGB(252,137,131)
CASE B_VAL=6
.BACKCOLOR=RGB(238,201,145)
CASE B_VAL=7
.BACKCOLOR=RGB(249,134,249)
CASE B_VAL=8
.BACKCOLOR=RGB(155,227,199)
CASE B_VAL=9
.BACKCOLOR=RGB(210,172,184)
CASE B_VAL=10
.BACKCOLOR=RGB(196,204,179)
otherwise
.BACKCOLOR=RGB(0,0,0)
ENDCASE
RETURN .BACKCOLOR
ENDWITH
*****
我一直覺得有問題的會不會是:
顏色的設定部分,我一直設在GRID的INI
例如:
thisform.grid1.column1.DynamicBackColor="IIF(sele09>0,THISFORM.SET_COLOR2(tg_all.back_col+2,1),IIF(thisform.currentrec=RECNO(),RGB(255,255,128),THISFORM.SET_COLOR2(2,1)))"
那麼,他是會一直的更新?
還是要設在哪裡?
謝謝大大的指導,感謝您! |
|
回頂端 |
|
 |
hdm
註冊時間: 2005-11-23 文章: 23 來自: Taipei
第 28 樓
|
發表於: 星期三 八月 30, 2006 9:30 am 文章主題: |
|
|
當 cou_i<>1 或 cou_i<>18 時 沒有指定傳回值是否會出問題?
你有加前面我建議的2行程式碼到SET_COLORx 試過嗎?
在函數中若沒指定傳回值,VFP預設傳回 .T. ,可能不是你要的RGB值. |
|
回頂端 |
|
 |
clmao
註冊時間: 2006-04-15 文章: 57
第 29 樓
|
發表於: 星期三 八月 30, 2006 9:39 pm 文章主題: |
|
|
hdm大大:
我找到一個原因了!
就是:如果執行時,將執行視窗最大化時,就不會有閃爍問題。
但是相對的帶來一個問題是:最大化要人工處理。
即使是設FORM的WINDOWSTATE屬性為MAX也沒有用。
不知大大是否有良方?
謝謝大大費心! |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|