我的一片天

我的一片天
posts - 27, comments - 12, trackbacks - 0, articles - 16
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理

Delphi

Delphi
     摘要: 建立带返回值的Server端的ActiveX  阅读全文

posted @ 2011-06-28 22:24 xyz 阅读(312) | 评论 (0)  编辑 |

posted @ 2011-06-02 11:52 xyz 阅读(520) | 评论 (0)  编辑 |

     摘要: 直接生成HTML文件,用TABLE,TR,TD标签作为列,最后把文件扩展名存成XLS,直接点击就可以在装了EXCEL的系统下打开。
这种方式生成的文件也支持公式的使用。跟在EXCEL的用法一样。
  阅读全文

posted @ 2011-05-26 09:44 xyz 阅读(548) | 评论 (0)  编辑 |

     摘要: TRect(x1,y1,x2,y2)所框选的范围

宽度w=x2-x1

高度h=y2-y1



在范围内最右的X坐标值=x1+宽度w-1=x2-1

在范围内做下的Y坐标值=y1+宽度w-1=y2-1



因此范围值中的x2和y2所在的区域是不属于框选的范围内的。



比如 (1,1) ~ (100,80) 的Rect范围,框选的范围为 x=1~99,y=1~79
  阅读全文

posted @ 2009-11-29 20:16 xyz 阅读(276) | 评论 (0)  编辑 |

posted @ 2009-10-26 01:58 xyz 阅读(1419) | 评论 (0)  编辑 |

posted @ 2009-10-16 16:31 xyz 阅读(281) | 评论 (0)  编辑 |

     摘要: 1.设置TWSocketServer的port作为监听端口.

2.对于来自客户端的连接,必须先对TWSocketClient进行继承。

TTcpSrvClient = class(TWSocketClient)
public
//自定义的属性

end;

3.设置TWSocketServer的部分属性

.Port:=inttostr(usePort); //动态指定,来自www.cnitblog.com/xkz
.Banner:=''; //清除客户端连接后的自动信息
.BannerTooBusy:='';
.ClientClass:= TTcpSrvClient; //指定继承后的类,当客户端连入时,自动创建及释放

4.在ClientConnect(Sender: TObject; Client: TWSocketClient;
Error: Word)事件中,设置客户端有数据  阅读全文

posted @ 2009-10-07 22:40 xyz 阅读(2791) | 评论 (0)  编辑 |

     摘要: 在服务器端,Delphi将自动为每一个阻塞方式的连接分配一个新的线程,并通过TServerClientThread来操纵每一个线程。所以不能通过对象库中的向导来创建线程对象,只能手工建立一个TServerClientThread的派生类,然后重载ClientExcute方法。Procedure TServerThread.ClientExcute;  阅读全文

posted @ 2009-09-18 16:46 xyz 阅读(1799) | 评论 (0)  编辑 |

     摘要: DTS是SQL Server中用于完成一系列数据调度的工具,由于它的特殊性,在程序中操作DTS包是件麻烦的事情。
但是微软还算很厚道,留了一个接口,让用户在自己开发的程序中,可以无障碍的使用DTS包。本文讲述的就是如何在Delphi中操作DTS包。

  阅读全文

posted @ 2009-07-30 16:00 xyz 阅读(393) | 评论 (0)  编辑 |

     摘要: Indy10把参数由AThread换成AContext后,用法已经不同.

OnConnect中获取来源IP
AContext.Connection.Socket.Binding.PeerIP;

OnExecute中处理客户端来的数据
Var
aThread:TIdMappedPortContext;
s:string;
begin
aThread:=TIdMappedPortContext(aContext);
s:=aThread.netdata;
//.....(处理过程)

end;

OnOutboundData中处理服务端过来的数据
Var
aThread:TIdMappedPortContext;
s:string;
begin
aThread:=TIdMappedPortContext(aContext);
s:=aThread.netdata;
//..  阅读全文

posted @ 2009-04-17 00:03 xyz 阅读(1541) | 评论 (0)  编辑 |

     摘要: Delphi中用临界区线程同步
多线程程序中,如果各个线程要访问同一个资源,如同一个变量
这时就要使用线程同步技术,才不会使线程之间产生冲突和干扰
线程同步有多种办法,使用临界区是其中最简单,也是效率最高的办法(CPU占用时间最少)
使用临界区代码如下:
先声明一个TRTLCriticalSection类型的全局变量
var
MyCs: TRTLCriticalSection;
在程序开始或建立线程之前,初始化
InitializeCriticalSection(MyCs);//初始化临界区
在程序结束或所有线程结束后,删除它
DeleteCriticalSection(MyCs);//删除临界界
再在线程中要同步的地方加入
EnterCriticalSection(MyCs); //进入临界区
try
//程序代码
finally
LeaveCriticalSection(MyCs); //  阅读全文

posted @ 2008-08-23 22:28 xyz 阅读(1060) | 评论 (0)  编辑 |

     摘要: 由于DELPHI不允许unit单元的循环引用,而类的成员在定义时,必须要用interface里的类型,因此要实现类成员的互相引用,必须用变通的方法.

  阅读全文

posted @ 2008-08-18 18:27 xyz 阅读(1437) | 评论 (0)  编辑 |

     摘要:
var
i:integer;
begin
for i:=0 to 10 do
begin
ary[i]:=0;
end;
end;

貌似简单的一段代码,却不简单。调试时,发现i居然是从11开始的,但是如果多声明一个j变量,变成
for i:=0 to 10 do
begin
j:=i;
ary[i]:=0;
end;

在这里j 完全没用,但是调试的时候却能使i正确地等于0.开始以为是程序哪里的内存操作过界造成的,但是即使是一个很简单的程序也是这样,折腾了半天不得其解。


通过搜索,才知道这个DELPHI的优化处理造成的,只要在 Project->options->compile中把Optimization项的沟去掉就一切都正常了。
  阅读全文

posted @ 2008-08-18 16:17 xyz 阅读(845) | 评论 (1)  编辑 |

     摘要: 最近在编写一个游戏的脱机客户端,发现使用Socket.SendBuf发送时,总是会出现部分内容发送不出去。

通过搜索,终于找到原因所在。

原来在调用Socket.SendBuf(buf,count)后,立即freeMem(buf),造成socket还没来得及把buf发送完,就被free掉了。

因此把要发送的buf定义成全局变量,再程序开始创建,并在程序结束后释放。
  阅读全文

posted @ 2008-07-19 21:49 xyz 阅读(4068) | 评论 (0)  编辑 |