随笔分类 - DELPHI
摘要:总结了一些经验,现贴出于大家讨论。 1、构件的使用 开始我一直使用Indy,但最近在开发一个100-350并发用户的服务器端时发现了Indy问题,由于用户的访问非常繁重,服务器工作两周后出现了70多的废连接。导致服务器响应变的慢。而且我观察到有时INDY能自动释放这些废连接,有时多到200多都不释放。后来我改DXSock 3.0构件,代码没有作任何改动,服务从6月1日到今天没有重启...
阅读全文
摘要:转贴于 华夏黑客同盟 http://www.77169.org Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对 TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是多线程编 程的全部,我写此文的目的在于对此作一个补充。 线程本质上是进程中一段并发运行的...
阅读全文
摘要:本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅。所有代码均亲自测试 delphi7下测试有效。图片均为自己制作。 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以仅仅是看上去会一些,明白了2+2的时候,其实我还不知道1+1。 开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解. ...
阅读全文
摘要:var s:string; begin s:=Edit1.Text; insert( '1 ', S,Edit1.SelStart+1); Edit1.text:=s; end;
阅读全文
摘要:View Code 总结一下SQL语句中引号('')、quotedstr()、('''')、format()在SQL语句中的用法以及SQL语句中日期格式的表示(#)、('''')在Delphi中进行字符变量连接相加时单引号用(''''''),又引号用('''''''')表示首先定义变量var AnInt:integer=123;//为了方便在此都给它们赋初值。虽然可能在引赋初值在某些情况下不对AnIntS
阅读全文
摘要:编写Delphi应用程序时,经常会遇到一些ActiveX控件[注:扩展名为OCX的控件或DLL的类型库],它们为应用程序的开发提供了简单的操作途径。然而,这些程序在发布的同时,面临ActiveX控件注册问题。解决途径:一、用安装程序制作打包文件,往往会给增加程序本身的大小,系统重装时,则必须重新安装它;二、用程序本身进行代码编写函数的形式处理它。使用方法分为两种:一、直接把可视化的ActiveX控件放到程序中;二、运行时根据需要实时建立。如果是直接使用,则应用程序在初始化的过程中会自动寻找、创建所需的ActiveX控件,如果控件没有注册,初始化程序会产生一个异常,捕捉并处理这个异常。在程序Fo
阅读全文
摘要:这里为读者提供一些实用的开发技巧和某些常见问题的解决途径。很多程序设计人员都有这样的体会,那就是往往自己冥思苦想某个问题的时候,旁人的一句点拨就可以拨云见日,灵感突现。因此下面以FAQ的形式列举了在开发过程中可能会遇到的问题,以飨读者。1.1 关于Delphi的BDEDelphi操作数据库主要是利用BDE来进行。BDE是基于32位Windows内核的数据库引擎和连接工具,支持现有的大多数数据库。它具有如下一些特点:1. 为多种数据库格式提供统一的应用程序接口,包括任何ODBC数据源。2. 适应C/S数据库应用的开发,程序设计人员可以访问所有本地和服务端的数据,并且很容易实现应用的向上兼容性。3
阅读全文
摘要:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Label3: TLabel; label1: TLabel; Label2: TLabel; Labname: TLabel; Labhp: TLabel; Labmp: TLabel; Button1: TButton; Label4: TLabel; Lablevel: TLabel; procedur
阅读全文
摘要:Socket服务端编程中最重要的也是最难处理的工作便是客户请求的处理和数据的接收和发送,如果每一个Socket服务器应用程序的开发都要从头到尾处理这些事情的话,人将会很累,也会浪费大量时间。试想,如果有一个通用的程序把客户请求处理和数据的接收、发送都处理好了,程序员只需要在不同的应用中对接收到的数据进行不同的解析并生成返回的数据包,再由这个通用程序将数据包传回客户端,这样,程序设计的工作将会轻松许多。 用Delphi进行过三层数据库应用开发的程序员一定对Borland公司的Borland Socket Server(ScktSrvr.exe)不陌生。这是一个典型的Socket服务器程序,认真读
阅读全文
摘要:一、WSAStartup函数int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData );使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函
阅读全文
摘要:function GetBiHua(chnstr:string):integer;constBiHuaTable=#10#7#10#10#8#10#9#11#17#14#13#5#13#10#12#15+#10#6#10#9#12#8#10#10#8#8#10#5#10#14#16#9+#12#12#15#15#7#10#5#5#7#10#2#9#4#8#12#13+#7#10#7#21#10#8#5#9#6#13#8#8#9#13#12#10+#13#7#10#10#8#8#7#8#7#19#5#4#8#6#9#10+#14#14#9#12#15#10#15#12#12#8#9#5#15#1
阅读全文
摘要:消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeTMsg = packed recordhwnd: HWND; / /窗口句柄message: UINT; / /消息常量标识符wParam: WPARAM ; // 32位消息的特定附加信息lParam: LPAR
阅读全文
摘要:{=========================================================================功 能: 网络函数库时 间: 2002/10/02版 本: 1.0=========================================================================}unit Net;interfaceusesSysUtils,Windows,dialogs,winsock,Classes,ComObj,WinInet;//得到本机的局域网Ip地址Function GetLocalIp(var Loc
阅读全文
摘要:ClientDataSet组件支持很多特性,其中一些与三级结构有关,而且还可以用在其他环境中。该组件说明了一个数据库完全映象在内存中,这使得可以进行动态的操作,如建立一个索引,其他数据集合通常不支持该特性。例如,为了对查询分类,我们通常是重新执行它。为了索引一个局部表格,需要定义索引。只有ADO数据集合有一些与ClientDataSet一样的动态索引功能。索引并不是ClientDataSet提供的全部功能。当我们拥有了索引之后,可以基于它定义组,可能是多级别的分组。对于确定一个记录在组中的位置(头、尾或中间位置),甚至有专门的支持。在组或整个数据表格中,我们可以定义总计;也就是说,可以动态计算
阅读全文
摘要:在Dephi中提供了一个抽象的数据类型TStream来支持对流式数据的操作。这些数据通常来自文件、数据库、内存对象、OLE对象等,TStream提供了统一、简洁的方法来进行数据的读写。在通常情况下,我们并不需要直接使用TStream类,对流式数据的读写封装在VCL控件的方法中。但是如果这些方法无法满足我们的要求,就需要自己手动控制数据的读写。 一、 TStream的常用的方法和属性:1. function Read(var Buffer; Count: Longint): Longint; virtual; abstract 2. function Write(const Buffer; Co
阅读全文
摘要:这应该不算是什么技巧,估计有数据库方面程序的DELPHI程序员都知道;本来没有写想到需要把它写成一篇贴子,但前不久看个别刚入门的兄弟的代码时。才发展他们还在刀耕火种,为此才想把它写出来算是对入门的兄弟们的一点帮助,让大侠们见笑了; 我们都知道TCLIENTDATASET有把对它其中的数据所做的修改记录下来的功能;如果需要还可以将 修改回复到以前的某个状态,而且结合DATASETPROVIDER还可能自动完成改动到SQL映射,将改动成批提交到数据库中 这个特性对于写数据库程序来说非常有用。其实我所说的保存CLIENTDATASET的数据也是利用这个特性来实现的; 代码很简单:unit uCDSS
阅读全文
摘要:procedure OBDCDelete(ODBCName:string);var registerTemp:TRegistry;begin registerTemp := TRegistry.Create; with registerTemp do begin try RootKey:=HKEY_LOCAL_MACHINE; if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then begin //注册一个DSN名称 DeleteValue(ODBCName); end ; closeKey; regis
阅读全文
摘要:unit WLFtp; interface uses Windows, Messages, Variants,SysUtils, Classes, Wininet, Dialogs; type TWLFtp = class(TObject) private FInetHandle: HInternet; // 句柄 FFtpHandle: HInternet; // 句柄 FHost: string; // 主机IP地址 FUserName: string; // 用户名 FPassword: string; // 密码 FPort: integer; // 端口 FCurrentDir: s
阅读全文
摘要:此方法不适用于9x系统我们知道在NT及以上操作系统提供了一个函数VirtualAllocEx,利用这个函数我们可以在其它进程中申请一块内存,其定义如下function VirtualAllocEx(hProcess: THandle; lpAddress: Pointer; dwSize, flAllocationType: DWORD; flProtect: DWORD): Pointer; stdcall;其中hProcess为要申请内存的进程的句柄,可以用如下方法得到指定的窗口所属的进程的进程句柄.Function GetProcessHandle: THandle;varWndHand
阅读全文
摘要:由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组件的安装方法介绍一下。 1只有一个DCU文件的组件。DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布。一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误。也正是因为没有源码,给使用者带来了不便,那就是一旦Delphi版本升级,此组件就不能再使用了,当然有的作者给出了几种版本的DCU文件,用户根据需要选择使用。这样的组件的安装方法是:在Component菜单中,选择install component,在对话框中的"into existing package
阅读全文