加载中…
个人资料
白忙剩人
白忙剩人
  • 博客等级:
  • 博客积分:0
  • 博客访问:31,008
  • 关注人气:12
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
评论
加载中…
留言
加载中…
访客
加载中…
好友
加载中…
博文
标签:

转载

分类: IT技术-Office
这个资料好,是我需要的
本问所有资料来自于 Excel2003 VBA帮助文件,张荣整理,适用于DELPHI,VB的高级语言操作Excel用

ExcelApplication.WorkBook.SaveAs(filename,FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout ,Local)

1、Filename: Variant 类型,可选。该字符串表示要保存的文件名。可包含完整路径。如果不指定路径,Microsoft Excel 将
阅读  ┆ 评论  ┆ 转载原文 ┆ 收藏 
标签:

体育

分类: 杂文
昨晚躺在沙发上看世界杯,不知不觉就睡着了.梦里中国队闯进了世界杯,穿着传统的白色队服和仿佛 穿着蓝色队服意大利比赛,意大利一如既往的在自己半场防守,中国队在裁判的帮助下点球领先.我在梦里笑了,中国队按照惯例先赢一个后一定最后会输得很惨。果然,最后中国队被打的千疮百孔。1:5大败。我在梦里微笑着安心的睡着了。梦里感叹这梦真像真的一样。
  清晨醒来,一看时间都8:30了,唉!又错过了昨晚红色西班牙和橙色荷兰的比赛,懊恼不已。看看新闻吧。打开手机腾讯新闻客户端(广告)。什么!!西班牙1:5输给了荷兰?是梦没醒还是小编发错了新闻?? 看图片,这明明是中国队的传统白色队服嘛!难道是我打开新闻的方式不对?点开大图片,还真是西班牙。唉!西班牙你输的不冤,谁让你cosplay中国队!
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

最强大脑

魔方墙

找茬

娱乐

分类: 娱乐
看到最强大脑魔方墙找茬网友说可以用对眼找.我研究了10分钟成功了.不需要什么训练每个人都能办到.方法如下:
1.闭上右眼,然后竖起手指 并调整手、眼和屏幕的距离,使得 两个手指(也可以用纸片)刚好挡住右边的图,即左眼只能看到左边的图,
 2.手指不懂,睁开右眼闭上左眼,看看是否正好右眼只能看到右边的图
3,手指不动,双眼睁开,调整两眼,很容易的 两幅图并成一副了.
4.的确颜色不同时,会发生调色现象.那个点是亮的很容易找出来.
如下图



阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

delphi

tts

it

分类: IT技术-Delphi
这个其实很久很久以前就实现过了,但就是因为太久了,基本上忘完了.昨天重新研究了一下,为了以后不再再重新研究,所以做个简单记录.
  1. 导入封装TTS引擎





阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
一个简单的函数.
function DelAllChar(var s: string; ch: Char): string;
var
  i: integer;
begin
  i := 1;
  repeat
    i := posEx(ch, str, i);
    delete(str, i, 1);
  until i = 0;
  Result := str;
end;
这个函数非常简单,就是删除掉字符串s中的ch字符. 咋一看函数实现也没什么问题.但当我们对一个1M以上的字符串操作,且字符串里ch很多时,你会发现这个函数居然要执行几分钟.这太让人受不了了.分析原因:原来delete函数每次删除1个ch后,会将之后的所有字符串往前移动1个位置,这样当字符串很大时,每次都会有1m或几m的内存被移动,那ch有1万个还不得移动几万M的内存呀.所以s越长 ch越多,这个函数的耗时成几何上升.
改变算法:
  • 遇到ch不删除,把ch后不是ch的前移到ch处
  • 移动长度为ch后第一个不是ch的位置到后面再次为ch的前一位置
  1. 先用纯pascal实现
    function DelAllCharPas(var s: string; ch: Char): string;
    var
      len: int32;
      s
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
在平常的商业应用中,字符串的操作和处理可以说是用的最多的,可以说平常商业应用,处理字符串效率的高低决定了这个应用效率的高低.而在delphi中字 符串采用的是引用计数机制,这也是delphi常常在字符串处理的测试中领先于其它语言原因.所以delphi在这方面天生适合用于普通商业开发.  既然字符串处理在普通商业开发中如此重要,所以认真研究它是必要的
  1. delphi中字符串的结构:
    • 字符串是一个指针类型,
    • 字符串变量是一个指向字符串首字节的指针
    • 字符串第字编号是1而不是0,即s[1]表示第一个字
    • string类型在delphi2009以后是两byte表示一个字
    • string和widestring是不一样的,string是引用计数的,操作效率更高,而widestring不是
    • ansistring的字是一个byte表示一个字
    • 字符串变量这个指针负偏移12~0都是这个字符串的属性描述
    • 结构如下
      stringRec=record
      codepage:word;//代码页 偏移:-12
      ElementSize:word //字长 偏移:-10
      referenceCount:int32//引用计数 偏移:-8
      Size:int32//字符串长度 偏移:-4
      end;

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
为了便于测试和说明,我们将条件编译的段落分拆成单个函数,最后测试完毕后,整理到前面的《128位大整数扩展和操作符重载》 里去。Let's go baby!
  1. 加法(+ add):
    • 纯psacal:
      function U128AddPas(a, b: uint128): uint128;
      begin
        Int128Rec(Result).Hi := Int128Rec(a).Hi + Int128Rec(b).Hi;
        Int128Rec(Result).Lo := Int128Rec(a).Lo + Int128Rec(b).Lo;
        if ((Int128Rec(Result).Lo <= Int128Rec(a).Lo) or (Int128Rec(Result).Lo <= Int128Rec(b).Lo)) and
          ((Int128Rec(a).Lo > 0) and (Int128Rec(b).Lo > 0)) then Int128Rec(Result).Hi := Int128Rec(Result).Hi + 1;
      end;

    • 汇编:
      function U128Add(x, y: uint128): uint128;
      {$IFDEF CPUX86}
      asm
        //[eax]->x, [edx]->y , [ecx]->result
        //push [eax]
        //push [eax+4]
        //push [eax+8]
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
一、说到在线汇编,就不得不说应用程序的优化.这让我想到经常在各技术论坛看到的各种编程语言语言编译优化的比较,而这些比较很多情况都是固定的重复运算的比较.实际上,这是没有意义的.对于能嵌入汇编的编程语言和能调用库的编程语言来说,这类固定的重复数值运算,要优化都是一样的.没区别.各类编程语言真正的快慢是由下面几个方面决定的.
  1. 常用操作符和函数的优化情况,即语言定义的数据类型的常用操作.例如:
    • 整数类型(byte、int32、int64 等)的+ - * / div mod
    • 浮点类型(real、double、float 等)的+ - * / 等
    • 字符串类型(Pchar,PansiChar,string,ansistring等)各种操作
    • 数据转化:这些预定义数据类型间的相互转化
    • 常用函数本体的优化
  2. 函数调用方式的区别
    • 直接调用比查表调用快的多(cpu调试窗口可以看到要多出10几20跳汇编命令),这也是对象里静态方法比动态方法快,native语言比托管快的原因.同样也是同等情况下C比C++快的原因.
    • 调用传递参数方式不同,大多数情况下register参数传递方式最快
    • 在汇编一级有时可以避开调用而省掉调用成本
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
一、为何要用在线汇编,或何时应该使用在线汇编。
  • 频繁使用的基本操作和函数,这类操作和函数将对程序整体提升
  • 需要极限速度和效率.在系统优化算法优化后还是无法满足要求时,只能借助汇编来提高.
  • 同类cpu架构下不同语言的高效率代码移植.只要是相同cpu架构,比如X86,只要语言支持在线汇编,那么相互移植变得非常简单,切且代码效率一致的高.比如delphi和vc++ 和 gc++ objectc 等等.当然要注意不同语言之间参数传递标准.
二、delphi 在线汇编默认参数传递规范:delphi 可以有3种参数传递规范,默认的是register传递方式。具体来说和在线帮助所说的不完全相同。我也没能完全搞明白,不过在32位下可以容易的通过调试窗口的cpu窗口跟踪观察到。但不幸的是delphixe3 x64位的调试模式始终有问题,不能直接进入调试状态。下面列出我已经确认的参数传递规律(因为和帮助说的不完全一致)。
  1. X86(32位)下
    • 前3个参数分别由 eax edx ecx  传递,当然后面的可以直接使用'@参数名'的方式,或[ebp+偏移]方式
    • 如果参数多余3个,将通过push传递,压栈顺序是从左到右,这时delphi的
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

delphixe3

it

helper

分类: IT技术-Delphi
在C#中有一个很有用的helper保留字,它可以让我们对已有的类添加额外功能,当时就在想delphi有这个保留字就好了,这样许多控件就不需要继承重写了.后来delphi 果然有了这个语法,到delphixe3,这个保留字就很强大了,不但class、record类型可用,现在连pascal基本类型也能使用了。实际上delphixe3 的string类型就是这样使用的。具体可查看System.SysUtils源代码。 那么对整数integer int64等类型可用吗?答案是肯定。

  ThelperUInt64 = record helper for UInt64
  private
  public
    function ToString: string;
    function ToHex(Digits: integer): string;
  end;
这样,就可以在程序中使用如下语法形式了,
var
  ui64:uint64;
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有