|
发表于 8-12-2005 10:34 PM
|
显示全部楼层
原帖由 weisely 于 8-12-2005 08:42 PM 发表
这个方法有用过, 可是就是嫌那个win1 的window框框太难看了.
如果wait window 的message是个variable, 就不知道 win1 应该有多长, 才能够和message 的长度配合
我很喜欢在Loading 报表的时候, 用wait ...
可以考慮做一個 form, 放一個 label, auto size = true
並根據 label.width 來更改 form.width, label.top / left 等等
* 如果是 WordWrap = true, width 不會更改, 字會變成多行 |
|
|
|
|
|
|
|
发表于 8-12-2005 10:52 PM
|
显示全部楼层
原帖由 weisely 于 8-12-2005 08:42 PM 发表
我很喜欢在Loading 报表的时候, 用wait window 来告诉用户系统正在处理那一条record.
我曾經用 wait wind 來顯示 current record / max record, 可是, 當我的資料有 100'000 records 或以上時,
浪費了很多時間.
後來我用 x % 來顯示, 並且在 x 不變時不會 wait wind, 速度快了十倍以上...
原來, wait wind 多了也會很浪費時間的.
例如 :
local lPer, lDisp, lCurrent, lMax
lPer = -1
lDisp = 0
lCurrent = 0
select table
count to lMax
SCAN
lCurrent = lCurrent + 1
lPer = int(lCurrent / lMax * 100)
if lPer <> lDisp
lDisp = lPer
wait wind str(lDisp, 3) + ' %' nowait
endif
...
ENDSCAN
需要注意的是這裡是用 int, 應為 1%, 2%, 3%, ... 最多會做 100 次 wait wind,
如果是 1.01%, 1.02%, ... 會有可能做到 10000 次... |
|
|
|
|
|
|
|
发表于 8-12-2005 10:52 PM
|
显示全部楼层
wait wind test, 可以把 max1 改為其他數字
CLEAR
MAX1 = 1000
TIME1 = SECONDS()
FOR I = 1 TO MAX1
WAIT WINDOW STR(I) NOWAIT
ENDFOR
? 'Time for '+STR(MAX1) + ' wait wind '
?? SECONDS() - TIME1
TIME1 = SECONDS()
local lPer, lDisp, lMax, lCurrent
lPer = -1
lDisp = 0
lCurrent = 0
lMax = MAX1
FOR I = 1 TO MAX1
lCurrent = lCurrent + 1
lPer = int(lCurrent / lMax * 100)
if lPer <> lDisp
lDisp = lPer
wait wind str(lDisp, 3) + ' %' NOWAIT
ENDIF
ENDFOR
? 'Time for 100 wait wind '
?? SECONDS() - TIME1
[ 本帖最后由 flashang 于 8-12-2005 10:55 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 9-12-2005 09:00 AM
|
显示全部楼层
我用 sharp.width 来做 progress bar
nPercent = nRec / tRec
If nPercent = int(nPercent)
Thisform.shpProgress.Width = nPercent * 300
Thisform.lblPercent.Caption = Str(nPercent*100,3,0)+'%'
EndIf |
|
|
|
|
|
|
|
发表于 7-1-2006 09:46 AM
|
显示全部楼层
我想当我按Form里的Close时,整个Program就会关闭。请问因该怎样做? |
|
|
|
|
|
|
|
发表于 7-1-2006 11:20 AM
|
显示全部楼层
原帖由 tstan135 于 7-1-2006 09:46 AM 发表
我想当我按Form里的Close时,整个Program就会关闭。请问因该怎样做?
你是指你的 form 是 modal form, 關掉後整個 exe 就會關閉, 連 menu 也不能用了 ?
試試 read events 在你的 main.prg (set 為 main)
例如
main.prg
READ EVENTS
DO FORM LOGIN |
|
|
|
|
|
|
|
发表于 7-1-2006 12:36 PM
|
显示全部楼层
原帖由 flashang 于 7-1-2006 11:20 AM 发表
你是指你的 form 是 modal form, 關掉後整個 exe 就會關閉, 連 menu 也不能用了 ?
試試 read events 在你的 main.prg (set 為 main)
例如
main.prg
READ EVENTS
DO FORM LOGIN
对!我就是要当我关闭modal form 时,整个 _screen 也同时关闭。
我用 menu 来做 main 的,在 cleanup 里加了 read events 还是不可以。 |
|
|
|
|
|
|
|
发表于 7-1-2006 11:46 PM
|
显示全部楼层
不就是在form的Unload那里加上
on shutdown
quit
行不通吗 ?
[ 本帖最后由 weisely 于 7-1-2006 11:48 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 11-1-2006 09:14 AM
|
显示全部楼层
补充 weisely 的,我的还有这行在 set main 的 prg 档里。
ON SHUTDOWN QUIT
ON KEY CTRL+F4 CANCEL
ON KEY ALT+F4 QUIT
或者把 QUIT 换成 ByeBye()
Procedure ByeBye
If MessageBox('Confirm ?',36,'Exit Program')=6
Quit
Endif
Return |
|
|
|
|
|
|
|
发表于 11-1-2006 10:04 AM
|
显示全部楼层
原帖由 flashang 于 7-1-2006 11:20 AM 发表
你是指你的 form 是 modal form, 關掉後整個 exe 就會關閉, 連 menu 也不能用了 ?
試試 read events 在你的 main.prg (set 為 main)
例如
main.prg
READ EVENTS
DO FORM LOGIN
根据 flashang 的做法 , 然后 在 modal form ->Quit button-> click ->
Clear events
Release THISFORM |
|
|
|
|
|
|
|
发表于 28-2-2006 05:03 PM
|
显示全部楼层
请问各位狐友,在VFP里如何define及pass Structure Parameter(pioSendReques和pioRecvReques)去Winscard.DLL的ScardTransmit Function呢?
VB Code :
*** Structure Declaration ***
Public Type SCARD_IO_REQUEST
dwProtocol As Long
cbPciLength As Long
End Type
*** DLL declaration
Public Declare Function SCardTransmit Lib "Winscard.dll" (ByVal hCard As Long, pioSendRequest As SCARD_IO_REQUEST, ByRef SendBuff As Byte, ByVal SendBuffLen As Long, pioRecvRequest As SCARD_IO_REQUEST, ByRef RecvBuff As Byte, ByRef RecvBuffLen As Long) As Long
VFP Code :
Declare Long SCardTransmit in WinScard.dll Long hCard, SCARD_IO_REQUEST pioSendRequest, Long @ SendBuff, Long SendBuffLen, SCARD_IO_REQUEST pioRecvRequest, Long @ RecvBuff, Long @ RecvBuffLen
谢谢
[ 本帖最后由 xiaoye 于 28-2-2006 05:05 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 2-3-2006 01:55 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 3-3-2006 12:26 AM
|
显示全部楼层
沒有 smartcard reader, 試不到... |
|
|
|
|
|
|
|
发表于 3-3-2006 04:55 PM
|
显示全部楼层
请问 什么是 Sedna ?? 有相关资料吗 ?? 谢谢......... |
|
|
|
|
|
|
|
发表于 3-3-2006 09:49 PM
|
显示全部楼层
原帖由 enry98 于 3-3-2006 04:55 PM 发表
请问 什么是 Sedna ?? 有相关资料吗 ?? 谢谢.........
Sedna是VFP的upgrade,Sedna将不会有很大的语言提升而着重于VFP的伸展性(Extensibility)和以下Microsoft新产品的兼容性(Interoperability)
.NET Framework 2.0 with Visual Studio 2005 (code named Whidbey)
SQL Server 2005 and SQL Server 2005 Express (code named Yukon)
Windows Vista (code named Longhorn)
Windows Communication Foundation (code named Indigo)
Windows Presentation Foundation (code named Avalon)
Office 12 (XML file formats)
下载Sedna Feature Overview和http://foxcentral.net/microsoft/SouthwestFox2005_Keynote.ppt以更了解Sedna |
|
|
|
|
|
|
|
发表于 3-3-2006 10:05 PM
|
显示全部楼层
原帖由 flashang 于 3-3-2006 12:26 AM 发表
沒有 smartcard reader, 試不到...
谢谢您及白兄的回复。
希望其他狐友能帮到我。 |
|
|
|
|
|
|
|
发表于 4-3-2006 11:30 AM
|
显示全部楼层
在VFP里如何define及pass Structure Parameter
你是说pointer to structure吧,必須将structure里的東西以string串起來。
譬如SCARD_IO_REQUEST的定義是:
- typedef struct {
- DWORD dwProtocol;
- DWORD cbPciLength;
- } SCARD_IO_REQUEST;
复制代码
狐里就大概酱(大概而已):
- Declare Long SCardTransmit in WinScard.dll Long hCard, String @ pioSendRequest, Long @ SendBuff, Long SendBuffLen, String @ pioRecvRequest, Long @ RecvBuff, Long @ RecvBuffLen
- dwProtocol = 123
- cbPciLength = 456
- pioSendRequest = num2dword(dwProtocol) + num2dword(cbPciLength)
- pioRecvRequest = SPACE(20)
- SCardTransmit(hCard, @pioSendRequest, @SendBuff, SendBuffLen, @pioRecvRequest, @RecvBuff, @RecvBuffLen)
- FUNCTION num2dword (lnValue)
- #DEFINE m0 256
- #DEFINE m1 65536
- #DEFINE m2 16777216
- LOCAL b0, b1, b2, b3
- b3 = Int(lnValue/m2)
- b2 = Int((lnValue - b3*m2)/m1)
- b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
- b0 = Mod(lnValue, m0)
- RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)
复制代码
请先參考http://fox.wikis.com/wc.dll?Wiki~ApiStructures~WIN_COM_API
内中的Lightweight Api Structures是不错的例子。上面的num2dword就是从那抄来。
也參考 Passing Parameters to Dynamic-Link Libraries
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_foxhelp9/html/f3cc247e-24a4-4dcd-a30d-44c649d677b0.asp
裏面有一个GetSystemTime的例子。但不懂为何SYSTEMTIME只用16 byte但例子却準備了40 byte的空间,是例子错了,抑或裏邊有什麽奧妙之处?所以上面pioRecvRequest只用8 byte,我也跟着放大变成20
[ 本帖最后由 fxam 于 4-3-2006 07:45 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 4-3-2006 05:20 PM
|
显示全部楼层
原帖由 fxam 于 4-3-2006 11:30 AM 发表
你是说pointer to structure吧,必須将structure里的東西以string串起來。
譬如SCARD_IO_REQUEST的定義是:
[code]
typedef struct {
DWORD dwProtocol;
DWORD cbPciLength;
} SCARD_IO_REQUEST; ...
* Test GetSystemTime
DECLARE INTEGER GetSystemTime IN win32api STRING @
cBuff=SPACE(16)
GetSystemTime(@cBuff)
? 'Year : '
?? ASC(SUBSTR(cBuff, 1, 1)) + ASC(SUBSTR(cBuff, 2, 1)) * 256
? 'Month : '
?? ASC(SUBSTR(cBuff, 3, 1)) + ASC(SUBSTR(cBuff, 4, 1)) * 256
? 'Sec : '
?? ASC(SUBSTR(cBuff, 13, 1)) + ASC(SUBSTR(cBuff, 14, 1)) * 256
? DATETIME()
?? ' '
?? SECONDS()
證實 16 個 bytes 就足夠了.
如果用 space(40), 之後的都是空格
[ 本帖最后由 flashang 于 4-3-2006 05:24 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 8-3-2006 07:46 AM
|
显示全部楼层
證實 16 個 bytes 就足夠了.
如果用 space(40), 之後的都是空格
謝謝測試。
我也已邮给微軟詢問。 |
|
|
|
|
|
|
|
发表于 8-3-2006 12:16 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|