Bueno, en un proyecto he tenido que copiar un fichero de un sitio a otro,
si bueno teniamos la funcion MyCopyFile() que teniamos implementada en
Fivewin de la siguiente manera:
Code:
DLL32 FUNCTION MYCOPYFILE( lpExistingFileName AS STRING, lpNewFileName AS STRING, bFailIfExists AS LONG) AS LONG;
PASCAL FROM "CopyFileA" LIB "kernel32.dll"
Dicha función, para copiar ficheros de 1 o 2 megas, funciona muy bien, porque
da tiempo a nuestra aplicación que no se vuelva con un '( No responde )'.
Si no lo crees, muy simple, intenta copiar un fichero de 100 Megas, y me cuentas Wink
Básicamente, es porque nosotros HEMOS PERDIDO TOTALMENTE el control sobre nuestra
aplicación, y no podemos recibir/enviar mensajes a Window en que punto estamos.
Esto tiene fácil solución, nos hacemos nuestra propia función CopyFile().
El mayor inconveniente es que tenemos que hacerla Wink, y eso, es un paso atrás.
¿ Como podemos hacerlo entonces ? Muy simple usando la función CopyFileEx(), disponible en el API win32.
Dicha función no funciona bajo los Windows 98 o similares, estáis advertidos, o eso dicen las malas lenguas.
Bien, sin más dilaciones vamos a realizar la implementación, y eso si,
aqui vamos a usar C, por cuestión de velocidad.
Nuestro prototipo
CopyFileEx( Fichero_Origen, Fichero_Destino, bCodeblock ) --> nResult
Fichero_Origen y Fichero_Destino no necesitan explicación.
bCodeblock , es un bloque de código que nos va a pasar ;
{ |nPorcentaje, nTotal, nTransferido | MyFunction( nPorcentaje, nTotal, nTransferido ) }
Un ejemplo de llamada;
Code:
if ( COPYFILEEX ( cFile_Path_MDB , cFile_Path_Repara+"\TPVMAL.MDB", {|x,y,z| pasa(x,y,z) } ) == 0 )
? "MAL"
endif
Ah!, Ahora puedes ver, que encima vamos a poder montar una progressbar ,
por ejemplo, para ir mostrando el % que va quedando, es el primer parámetro,
que simplemente resulta de ;
nPorcentaje = nTransferido * 100 / nTotal
Lo he pasado como parámetro al codeblock, porque de esta manera, ya lo tienes
calculado a nivel de C, no perdiendo más tiempo.
Lo importante es que puedes crear una funcion como;
Code:
STATIC s_lCancel := .F.
#define PROGRESS_CONTINUE 0
#define PROGRESS_CANCEL 1
STATIC FUNCTION PASA( nPorcentaje, nTotal, nTransferido )
static nPasa := 0
if nPasa > 10
SysRefresh()
nPasa := 0
endif
nPasa++
oProgress:SetPos( nPorcentaje )
return( if( s_lCancel, PROGRESS_CANCEL, PROGRESS_CONTINUE ) )
Uy! ¿ Pero que ven tus ojitos!! ? Si , PUEDES CANCELAR también lo que
estas copiando, Wink , muy útil si quieres cancelar un archivo de 500 Megas,
por ejemplo, créeme.
En este caso, por ejemplo, puedes poner un botón similar a esto;
REDEFINE BUTTON oBtn ACTION ( s_lCancel := .T. ) ID 110 OF oWnd
El cambiar el estado de la variable static s_lCancel, simplemente hará
que cuando el codeblock se vuelva a ejecutar, lo cancelará.
Ahora bien, todo esto no es posible sin el codigo fuente de C, asi
que dejo paso al codigo fuente;
Code:
#pragma BEGINDUMP
#include
#include
#include "hbapi.h"
#include "item.api"
#include "hbapiitm.h"
#include "hbvm.h"
#include "hbapiitm.h"
/*
Convertimos un valor LARGE_INTEGER a double
*/
double clarge2int( DWORD Lo, DWORD Hi )
{
double dblLo, dblHi;
double ret;
if( Lo < 0 ){
dblLo = 2 ^ 32 + Lo ;
} else {
dblLo = Lo;
}
if( Hi < 0 ) {
dblHi = 2 ^ 32 + Hi;
} else {
dblHi = Hi;
}
ret = ( dblLo + dblHi);
return( ret );
}
DWORD CALLBACK CopyProgressRoutine(
LARGE_INTEGER TotalFileSize,
LARGE_INTEGER TotalBytesTransferred,
LARGE_INTEGER StreamSize,
LARGE_INTEGER StreamBytesTransferred,
DWORD dwStreamNumber,
DWORD dwCallbackReason,
HANDLE hSourceFile,
HANDLE hDestinationFile,
LPVOID pCallback_Progress
)
{
double TotalSize = clarge2int( TotalFileSize.u.LowPart, TotalFileSize.u.HighPart );
double TotalBytesTrans = clarge2int( TotalBytesTransferred.u.LowPart, TotalBytesTransferred.u.HighPart );
double percent = TotalBytesTrans * 100 / TotalSize ;
if( pCallback_Progress ) {
hb_vmPushSymbol( &hb_symEval );
hb_vmPush( pCallback_Progress );
hb_vmPushDouble( percent,1 );
hb_vmPushDouble( TotalSize,1 );
hb_vmPushDouble( TotalBytesTrans,1 );
hb_vmSend( 3 );
return( hb_parni( -1 ) );
}
return PROGRESS_CONTINUE;
}
HB_FUNC( COPYFILEEX )
{
LPCTSTR lpExistingFileName = hb_parc( 1 );
LPCTSTR lpNewFileName = hb_parc( 2 );
LPPROGRESS_ROUTINE lpProgressRoutine = ( void * )CopyProgressRoutine ;
LPBOOL pbCancel = NULL;
DWORD dwCopyFlags;
BOOL ret;
PHB_ITEM pCallback_Progress;
if( ! ISNIL( 3 ) ) {
pCallback_Progress = hb_itemNew( hb_param( 3, HB_IT_ANY ) );
}
ret = CopyFileEx( lpExistingFileName, lpNewFileName, lpProgressRoutine, pCallback_Progress, pbCancel, NULL );
hb_retni( ret );
hb_itemRelease( (PHB_ITEM) pCallback_Progress );
}
#pragma ENDDUMP
Lo que más me a costado no a sido la implementación de la funcion en si
misma, si no, convertir un LARGE_INTEGER en un valor double.
No es una función portable del API de Windows para Harbour, es una adaptación
a una necesidad en concreto, si lo queréis hacer compatible con el API de
Windows, ahí tenéis un punto de partida, por mi parte no pienso mejorarla
más, simplemente necesitaba esa funcionalidad y el APi de Window me la proporciona.
Gracias por la info pero la verdad no creo que me sirva de mucho. Pero ya que estoy comento algo.
Escrito por Caren a las Julio 26, 2007 01:39 PM强烈推荐:最好的翻译公司在上海,提供日语翻译、英语翻译、韩语翻译等多语种的语言翻译服务。上海翻译公司在行业翻译领域如经济翻译、法律翻译等颇有建树,公司还具体提供澳大利亚移民的证件翻译服务。
Escrito por kimi a las Octubre 17, 2007 10:20 AM网络营销软件
网络营销软件
网络营销软件
群发软件
群发软件
---
群发软件
博客群建软件
网络营销软件
论坛群发软件
网站排名软件
群发软件
推广小助手破解版
论坛群发
网站排名软件
群发软件
推荐给你很好的群发软件和信息群发软件和供求群发软件
推荐给你很好的群发软件和信息群发软件和供求群发软件博客群发软件网络营销软件网络营销软件
网站排名软件网站排名软件网站优化软件信息群发软件信息群发软件信息群发软件论坛群发软件网站推广软件网站推广软件博客群发软件博客群发软件
群发软件
网络营销软件
论坛群发
网站推广软件
群发软件群发软件博客群发软件论坛群发软件网络营销软件论坛群发软件
信息群发软件推广软件网站推广软件网络营销软件网站推广软件群发软件网站排名软件网站推广软件博客群发软件论坛群发软件群发软件网站排名软件网站推广软件博客群发软件论坛群发软件
网站排名软件
群发软件
博客群发软件
网站排名软件
网站推广软件
群发软件信息群发软件
免费论坛群发软件
论坛群发软件
网站排名软件
免费博客群发软件
网站推广软件
群发软件
博客群发软件
网站排名软件
网站推广软件
群发软件信息群发软件
免费论坛群发软件
论坛群发软件
网站排名软件
免费博客群发软件
博客群发软件
信息群发软件
论坛群发软件
信息群发软件
博客群发软件
qq群发软件
邮件群发软件
博客群建软件
企业名录搜索软件
信息群发软件
邮件群发软件
论坛群发软件
博客群发软件
网站推广软件
网络营销软件
全能营销破解版
网络营销软件
论坛群发软件
论坛群发软件
论坛群发软件
网络营销软件
信息群发软件
信息群发软件
信息群发软件
群发软件
论坛群发软件
上海华苑电子有限公司成立于1994年,是国内较早从事卡片生产、销售的[url=http://www.cardhy.com]上海制卡[/url]公司,产品主要包括有[url=http://www.cardhy.com]智能卡[/url],RFID电子标签[url=http://www.cardhy.com/show_products]考勤卡[/url],[url=http://www.cardhy.com/show_products]读卡器[/url],[url=http://www.cardhy.com/products]积分卡[/url],[url=http://www.cardhy.com/products]会员卡[/url], [url=http://www.cardhy.com]射频卡[/url],印刷卡,[url=http://www.cardhy.com]贵宾卡[/url]等产品,欢迎浏览公司网站 [url=http://www.cardhy.com]www.cardhy.com[/url]。
上海华苑电子有限公司成立于1994年,是国内较早从事卡片生产、销售的上海制卡公司,产品主要包括有智能卡,RFID电子标签考勤卡,读卡器,积分卡,会员卡, 射频卡,印刷卡,贵宾卡等产品,欢迎浏览公司网站 www.cardhy.com。
中国知名的租赁服务供应商,可提供电脑租赁、办公设备租赁、会议设备租赁、舞台设备租赁、金融租赁、融资租赁、人才租赁通讯设备租赁、健身器材租赁、乐器租赁、宴会用品租赁等。名宏中国租赁城提供租赁业全面解决综合的解决方案。租赁服务热线02165151202
我们这里为你提供你寻找的BB霜,隔离霜,眼影,唇彩,对繁忙而追求美丽的女性朋友迅速改善皮肤问题,我们这里代理韩国化妆品BB霜,隔离霜,眼影,唇彩等等。
上海嘉迪国际货运公司是经中国民航总局批准,工商局核准的企业,航空公司一级代理商,本上海空运公司主要承办空运进出口货物的国际运输代理业务。还有报关,清关,转关,报验业务,竭诚为广大客户献上最真诚的服务。服务热线13585896404
本空运公司服务理念:订舱前拼的是价格,订舱后凭的是服务
本公司优势:空运价格低,空运服务好
I'm agree with you.
organic skin care product
homemade skin care
care principal skin victoria
wholesale skin care products
care dove skin
aveeno skin care
Thats right.
angelina jolie baby
tubgirl
jennifer nettles
laffytaffy
askjolene
leah remini nude
letoya luckett
Thats right.
Registration key for driver detective 6.
Tonya harding sex tape
lock of love hair donation
bilara
patricia farinelli
Thats right.
artic monkeys mp3
avril lavigne take me away mp3
anthem part 2 mp3
califormia pierce
kevin garnett
jen moss
万利深圳空调维修,空调维修公司.
提供深圳空调加雪种,深圳空调加氟
深圳空调安装
深圳空调拆装
深圳美的空调维修
深圳华宝空调维修
深圳海尔空调维修
深圳LG空调维修
深圳新科空调维修
深圳志高空调维修
深圳三菱空调维修
深圳澳柯玛空调维修
深圳格力空调维修
深圳春兰空调维修
深圳奥克斯空调维修
深圳大金空调维修
深圳日立空调维修
深圳松下空调维修
深圳三星空调维修
深圳索尼空调维修
深圳中央空调维修拆装
万利深圳空调维修,空调维修公司.
提供深圳空调加雪种,深圳空调加氟
深圳空调安装
深圳空调拆装
深圳华宝空调维修
深圳海尔空调维修
深圳LG空调维修
深圳新科空调维修
深圳志高空调维修
深圳三菱空调维修
深圳澳柯玛空调维修
深圳格力空调维修
深圳春兰空调维修
深圳奥克斯空调维修
深圳大金空调维修
深圳日立空调维修
深圳松下空调维修
深圳三星空调维修
深圳索尼空调维修
深圳中央空调维修拆装
深圳空调维修,空调维修深圳空调加雪种,深圳空调加氟深圳空调安装深圳空调拆装深圳装修公司深圳装饰公深圳装修深圳装饰
深圳搬家公司搬家公司 深圳搬家公司空调维修
深圳吊车公司深圳搬家公司深圳搬家深圳装饰公司深圳空调加雪种
深圳装修,深圳装修公司,深圳家庭装修,深圳厂房装修,深圳写字楼装修
深圳吊装公司
深圳搬厂公司
深圳罗湖搬家公司
深圳福田搬家公司
深圳南山搬家公司
深圳盐田搬家公司
深圳宝安搬家公司
深圳龙华搬家公司
深圳龙岗搬家公司
深圳布吉搬家公司
深圳尾板车出租
深圳空调安装公司
深圳货车出租