Wednesday, May 13, 2009

form's syncretize

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
form2.ManualDock(Form1.Panel1,nil,alNone) ;
end;

button2.click events:
form2.manualdock(nil,nil,alnone);

Sunday, May 10, 2009

Delphi中的集成VBS脚本语言应用

Delphi中的集成VBS脚本语言应用

罗焱 从薇 王正浩


摘 要:使用ActiveX Scripting技术,可以在应用程序中集成使用脚本语言。本文介绍如何应用这一技术在Delphi应用程序中添加VBScript支持。
关键词:ActiveX脚本描述;Delphi;VBScript

1.引言
  Delphi语言是Borland公司开发的一种功能强大的编程语言,它基于串口和面向对象,并兼有VC的强大功能和VB的快速开发、易学易用的优点,具有开发效率高、界面制作美观方便、可实现各种操作功能等特点。VBS全称Visual Basic Script,是一种简单易学,功能强大的脚本语言,应用极为广泛。
本文介绍了通过ActiveX Scripting技术在Delphi中调用和操作VBS的方法,实现了Delphi和VBS的混合编程,充分发挥了两者各自的优势。

2.基本原理
2.1 ActiveX技术的基本概念
在Delphi中无法直接调用VBS,而利用ActiveX技术可以解决这个问题。ActiveX是Microsoft公司于1996年提出的一项技术,它以COM(Component Object Model,组件对象模型)为基础,使得不同的进程(特别是网络进程)之间可以相互通信。ActiveX控件是Microsoft公司提供的一种用于模块集成的协议,是可移植的软件模块,适用于各种开发语言,因而与开发平台无关。ActiveX控件由一些遵循ActiveX规范的可执行代码组成,比如一个.exe,.dll或.ocx文件。在程序中加入ActiveX控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。ActiveX控件保留了一些普通Delphi控件的属性、事件和方法,其特有的方法和属性大大地增强了程序设计者的能力和灵活性。
2.2 ActiveX脚本描述(ActiveX Scripting)
使用ActiveX技术中的ActiveX脚本描述(ActiveX Scripting)技术,可以从客户端或者服务器端操纵ActiveX控制和Java程序,传递数据,协调它们之间的操作。
ActiveX Scripting体系由一个COM接口族组成,这些接口定义了一个把脚本引擎和宿主程序连接起来的协议。在ActiveX Scripting的世界里,脚本引擎只是一个组件对象,它能够动态地执行脚本程序。宿主应用程序可以将它的Automation接口暴露在脚本引擎的名字空间中,可在动态执行的脚本中像访问程序中的变量那样访问应用程序的对象。
应用程序根据要解析的Script语言来创建和初始化脚本引擎,然后把应用程序连接在引擎上。然后把脚本代码提交给脚本引擎,脚本代码就可以执行了。
  ActiveX Scripting利用WSH,即Windows Scripting Host来做为脚本语言的工作环境。WSH是在系统内植入的一个基于32位Windows平台、并独立于语言的脚本运行环境,WSH架构于ActiveX之上,通过充当ActiveX的脚本引擎控制器为Windows用户充分利用威力强大的脚本指令语言扫清了障碍。

3.调用VBS在Delphi中的实现
  要在Delphi中调用VBS首先需要在DELPHI集成环境中安装ActiveX控件。
  要导入Activex控件,先选中Delphi菜单中的Component,选择导入ActiveX控制,安装Microsoft Script Control,就在Delphi环境中安装了ActiveX控件,然后在程序代码中加上这样一句:use MSScriptControl_TLB就可以调用VBS代码了。
  代码其余部分参见下列代码示范:
 l_ScriptControl:=TScriptControl.Create(nil); //创建Script控制对象
l_ScriptControl.AllowUI:=True;
l_ScriptControl.Language:='VBScript'; //确定Script语言
v := VarArrayCreate([0, 0], varVariant);
v[0] := InputVarArrays;
Params: = PSafeArray(TVarData(v).VArray);
l_scriptCode:=Tstringlist.Create;
try
l_scriptCode.LoadFromFile(VBScript_filename+'.vbs'); //导入VBS文件程序
if l_scriptCode.Count=0 then exit;
l_ScriptControl.AddCode(l_scriptCode.Text);
result:=l_ScriptControl.Run(VBScript_filename, Params); //运行VBS程序
finally
l_ScriptControl.Free; //最后释放所有的VBS对象
l_scriptCode.Free;
end;
  这样就可以成功的调用一个VBS程序进行所需的操作了。但这只是做了最基本的操作,离实际的需求还有一段距离。比如说如果希望为了提高代码重用性和效率,可以使用事先写好的一些公用VBS函数,如一些基本数学函数。但是上面的例子只能调用一个VBS文件,文件名即函数名,有极大的局限性。
为了解决上面的问题,有相应的解决办法。如下面的程序所示:
……//循环检查要装入的VBS文件是否存在
l_scriptCode:=Tstringlist.Create;
l_ScriptControl:=TScriptControl.Create(nil);
try
l_ScriptControl.AllowUI:=True;
l_ScriptControl.Language:=L_VBScript;
v := VarArrayCreate([0,0], varVariant);
v[0] := InputVarArrays;
Params: = PSafeArray (TVarData(v).VArray);
//循环装入需要的VBS文件,并检查文件代码是否为空
for l_i := 0 to VBScript_filenames.Count-1 do
begin
l_scriptCode.LoadFromFile(VBScript_filenames.Strings[l_i] +’.vbs’);
if l_scriptCode.Count=0 then exit;
l_ScriptControl.AddCode(l_scriptCode.Text);
end;
//正常调用VBS程序
 OutputDataSets :=l_ScriptControl.Run(VBScript_filenames.Strings[0],Params);
finally
l_ScriptControl.Free;
l_scriptCode.Free;
end;
  来比较一下两段程序的不同,首先是第二个程序可以载入多个文件,其中第一个文件与要执行的主函数同名,其余的文件包含了该主函数可能会调用的一些基本函数,为此还增加了检查函数文件及其代码的工作。
  这样就可以很轻松的使用事先写好的一些程序,象搭积木一样,让用户不必学习深奥的编程知识,有熟练的编程技巧,就可以轻松使用VBS进行自己想要的操作。同时遇到以后功能扩展的需要,也可以编写符合要求的VBS函数进行我们需要的操作了。
4.总结
随着计算机和信息技术的不断发展,计算机的软件应用变得越来越普遍,但是要设计适应要求的通用型软件还是有很大的难度。本文介绍了利用Active Scripting技术在Delphi中集成使用VBS的方法,目的就是为了利用脚本语言为应用程序提供二次编程的能力,从而大大的提高软件的适用性。Delphi和VBScript都是非常强大的开发工具,如果能够很好地把它们结合起来,相信能够开发出越来越多功能强大、适用性强的商业软件。

参考文献:
[1] 吕思伟,潘爱民.ActiveX Scriptng技术(一)一(三).微电脑世界 1999-01~03
[2] Steve Teixeora,Xavier Pacheco著 任旭钧,王永生,冯译波等译 Delphi5开发人员指南 机械工业出版社 2000年7月第一版
[3] .Introduction to ActiveX Controls,Microsoft Corp.,MSDN,1998年8月
[4]. http://www.microsoft.com/,Microsoft公司,包括MSDN、MSJ等技术资源

Wednesday, May 06, 2009

splash form

procedure TForm1.FormCreate(Sender: TObject);
begin
with tform2.create(self) do
try
show;
update;
sleep(10000);
finally
Free;
end;
end;
form2 has been setted available

Saturday, May 02, 2009

use other unit

unit2.
unit Unit2;

interface
uses Dialogs, StrUtils;
procedure sayhelloto(yourname:string);
implementation
procedure sayhelloto(yourname:string);
var hello:string;
begin
hello:=yourname+',hello!';
ShowMessage(hello);
end;
end.
unit1.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,StrUtils;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Caption:=ReverseString(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Unit2.sayhelloto('liqing');
end;

end.

Thursday, April 30, 2009

sth that operate webbrowser

WebBrowser 操作记要
WebBrowser1.GoHome; //到浏览器默认主页
WebBrowser1.Refresh; //刷新
WebBrowser1.GoBack; //后退
WebBrowser1.GoForward; //前进
WebBrowser1.Navigate('...'); //打开指定页面
WebBrowser1.Navigate('about:blank'); //打开空页面
--------------------------------------------------------------------------------
//打开空页面, 并写入...

WebBrowser1.Navigate('about:<头><标题>标题><身体>页面内容');
--------------------------------------------------------------------------------
//读取网页脚本中的变量:

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
i: Integer;
begin
s := WebBrowser1.OleObject.document.Script.str;
i := WebBrowser1.OleObject.document.Script.num;
ShowMessage(s); //Hello
ShowMessage(IntToStr(i)); //99

//也可以这样读:
s := WebBrowser1.OleObject.document.parentWindow.str;
i := WebBrowser1.OleObject.document.parentWindow.num;
ShowMessage(s); //Hello
ShowMessage(IntToStr(i)); //99
end;
假如网页中有这样的语句:


--------------------------------------------------------------------------------

//调用网页脚本中的函数:

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.OleObject.document.parentWindow.MB(); //HTML-Js

//如需指定脚本语言, 需要:
WebBrowser1.OleObject.document.parentWindow.execScript('MB()','JavaScript'); //HTML-Js
end;
假如有这样的脚本:


--------------------------------------------------------------------------------

//判断网页及内部框架网页是否全部下载完毕

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.Application = pDisp then
begin
Text := '网页下载完毕!';
end;
end;

--------------------------------------------------------------------------------

//改变背景色或背景图片:
WebBrowser1.OleObject.document.body.bgcolor := '#FF0000';
WebBrowser1.OleObject.document.body.background := '...图片地址';
--------------------------------------------------------------------------------
//操作有 ID 标签的对象:
var
s: string;
begin
s := WebBrowser1.OleObject.document.getElementByID('span1').innerText;
ShowMessage(s); //这是 span1 标签中的内容

//或者:
s := WebBrowser1.OleObject.document.parentWindow.span1.innerText;
ShowMessage(s); //这是 span1 标签中的内容

//隐藏它:
WebBrowser1.OleObject.document.parentWindow.span1.style.display := 'none';
end;
假如网页中有这样的内容:
这是 span1 标签中的内容


--------------------------------------------------------------------------------

//获取网页源代码
var
s: string;
begin
s := WebBrowser1.OleObject.document.body.innerHTML; //body内的所有代码
s := WebBrowser1.OleObject.document.body.outerHTML; //body内的所有代码, 包含body标签
s := WebBrowser1.OleObject.document.documentElement.innerHTML; //html内的所有代码
end;

//获取网页全部源代码
uses ActiveX;
var
ms: TMemoryStream;
begin
if not Assigned(WebBrowser1.Document) then Exit;
ms := TMemoryStream.Create;
(WebBrowser1.Document as IPersistStreamInit).Save(TStreamAdapter.Create(ms), True);
ms.Position := 0;
Memo1.Lines.LoadFromStream(ms, TEncoding.UTF8);
// Memo1.Lines.LoadFromStream(ms, TEncoding.Default); {GB2312 等双字节}
ms.Free;
end;
--------------------------------------------------------------------------------
//WebBrowser 中的右键菜单

//先要添加ApplicationEvents1,指定其Message事件

//屏蔽右键菜单
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
with Msg do
begin
if not IsChild(WebBrowser1.Handle, hWnd) then Exit;
Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
end;
end;

//替换右键菜单
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var mPoint: TPoint;
begin
if IsChild(WebBrowser1.Handle, Msg.Hwnd) and
((Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_RBUTTONUP)) then
begin
GetCursorPos(mPoint); //得到光标位置
PopupMenu1.Popup(mPoint.X, mPoint.Y); //弹出popupmenu1的菜单
Handled:=True;
end;
end;
--------------------------------------------------------------------------------
//新页面写入
begin
WebBrowser1.Navigate('about:blank');
WebBrowser1.OleObject.Document.Writeln('ok');
end;

//从流中写入:
var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
Memo1.Lines.SaveToStream(ms);
ms.Position := 0;
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
ms.Free;
end;

//禁止提示脚步错误
procedure TForm1.WebBrowser1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
WebBrowser1.Silent := True;
end;

//禁止弹出窗口
procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
Cancel := True;
end;

Tuesday, April 28, 2009

Autohidden form which effect like qq

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, StdCtrls; //第1步,加ExtCtrls, ComCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Timer2: TTimer;

procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);

private
{ Private declarations }
//第2步 自定义函数GetFormNameAt, 它可获得当前鼠标指针下面的窗体的名称
function GetFormNameAt(const Pos: TPoint): string;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
//*****************************************************************************
//以下是第3步程序代码
function Tform1.GetFormNameAt(const Pos: TPoint): string;
var
w: TWinControl;
begin
//得到鼠标指针下的VCL可视组件
w:= FindVclWindow(Pos);
if (w <> nil) then
begin
//当W的上级Parent不为空时就继续往上找
while w.Parent <> nil do
w:= w.Parent;
//最后返回窗体的名称Name
Result:= w.Name;
end
else
Result:= '';
end;
//******************************************************************************
procedure TForm1.Timer1Timer(Sender: TObject);
var
winPos: TPoint;
t: integer;
b: boolean;
begin
b:= false;
if (form1.Top <= 3) then
begin
b:= true;
t:= 0;
end
else if form1.Left + form1.Width - Screen.Width >= 0 then
begin
b:= true;
t:= form1.Top;
end
else
t:= form1.Top;
if b then
begin
//得到当前鼠标指针的在屏幕上的坐标
GetCursorPos(winPos);
//当鼠标指针下的窗体的Name等于form1.name时
if form1.Name = GetFormNameAt(winPos) then
{在此我们可以为form1取一个特别的名称,以防有别的窗体名称与它相同}
begin
//停用Timer2
form1.timer2.Enabled:= false;
//form1的Top与屏幕对齐
form1.Top:= t;
if t <> 0 then
form1.Left:= Screen.Width - form1.Width;
end
else begin
form1.Timer2.Enabled:= true;
end;
end;
end;
//******************************************************************************
procedure TForm1.Timer2Timer(Sender: TObject);
// 当 top 距屏幕上侧 20 像素时,自动隐藏
begin
if form1.Top <= 20 then
begin
//将form1向上移,在屏幕上方露出3像素
form1.Top:= -(form1.Height - 3);
if (form1.Left + form1.Width > Screen.Width) then
form1.Left:= Screen.Width - form1.Width;
end
// 当 left 距屏幕下侧 20 像素时,自动隐藏
else if form1.Left + form1.Width - Screen.Width >= -20 then
//将form1向右移,在屏幕右方露出4像素
form1.Left:= Screen.Width - 4;
end;
end.

Delphi中ShellExecute的妙用

功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

  有几个API函数都可以实现这些功能,但是在大多数情况下ShellExecute是更多的被使用的,同时它并不是太复杂。下面举例说明它的用法。

开始一个新的应用程序
   ShellExecute(Handle, 'open', PChar('c:\test\app.exe'), nil, nil, SW_SHOW);

打开记事本,并打开一个文件(系统能识别记事本应用程序的路径,因此我们不必使用绝对路径)
   ShellExecute(Handle, 'open', PChar('notepad'), PChar('c:\test\readme.txt'), nil, SW_SHOW);

打印一个文档
   ShellExecute(Handle, 'print', PChar('c:\test\test.doc'), nil, nil, SW_SHOW);

   注意:可能你会看到word暂时的被打开,但它会自动关闭。

打开一个HTML页面
   ShellExecute(Handle, 'open', PChar('http://www.festra.com/'), nil, nil, SW_SHOW);

你能通过一个已经注册的文件类型来打开应用程序
   ShellExecute(Handle, 'open', PChar('c:\test\readme.txt'), nil, nil, SW_SHOW);

用windows Explorer 打开一个目录
   ShellExecute(Handle, 'explore', PChar('c:\windows)', nil, nil, SW_SHOW);

运行一个DOS命令并立即返回
   ShellExecute(Handle, 'open', PChar('command.com'), PChar('/c copy file1.txt file2.txt'), nil, SW_SHOW);

运行一个DOS命令并保持DOS窗口存在
   ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k dir'), nil, SW_SHOW);


ShellExecute详解

ShellExecute函数用于打开或者打印一个指定的文件。指定的文件必须是可执行文件或者文档文件。
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
)

* Params(参数解释)
Hwnd
指定父窗口句柄。这个窗口接收工程产生的所有消息。例如:一个工程可以通过消息框报告错误。
lpOperation
以一个以null结束的字符串描述操作的执行。以下的操作字符串是有效的:

行号 参数 含义
1 “open” 函数打开由lpFile指定的文件。这个文件必须是可执行文件或者文档文件。文件夹必须是可打开的文件夹。
2 “print” 函数打印由lpFile指定的文件。这个文件应该是文档文件。如果指定的文件是可执行文件,函数将以open的方式打开这个文件。
3 “explore” 函数将搜索由lpFile指定的文件夹。

lpOperation参数如果为null,函数将以open的方式打开由lpFile指定的文件。
lpFile
以一个null结束的字符串描述打开或者打印指定的文件,或者打开或者搜索指定的
文件夹。函数可以打开一个指定的文件或者文件夹,也可以打印一个文档文件。
lpParameters
如果lpFile指定的是一个可执行文件,lpParameters以一个以null结束的字符串指定该执行文件传给应用软件的参数。
行号 参数 含义
1 SW_HIDE 隐藏这个窗体,并激活其他窗体。
2 SW_MAXIMIZE 最大化指定的窗体。
3 SW_MINIMIZE 最小化指定的窗体,并按顺序激活最上层的窗体。
4 SW_RESTORE 激活并显示窗体。如果窗体为最小化或者最大化,窗体恢复到原始大小和位置。应用程序当恢复一个最小化的窗体时将指定标记。
5 SW_SHOW 以当前的大小和位置激活并显示窗体。
6 SW_SHOWDEFAULT
7 SW_SHOWMAXIMIZED 激活并最大化显示窗体。
8 SW_SHOWMINIMIZED 激活并最小化现实窗体。
9 SW_SHOWMINNOACTIVE 最小化窗体,保持其激活状态。
10 SW_SHOWNA 以当前状态显示窗体,保持其激活状态。
11 SW_SHOWNOACTIVATE 以当前的大小和位置显示窗体,并保持其激活状态。
12 SW_SHOWNORMAL 激活并显示一个窗体。如果窗体为最大化或者最小化,窗体恢复到原始的大小和位置。当窗体第一次显示的时候,应用程序记录标记。
如果lpField指定的是一个文档文件,lpParameters应该为null。
lpDirectory
以一个以null结束的字符串指定文件开始运行的默认目录。
nShowCmd
如果lpField指定了一个可执行文件,nShowCmd指定这个文件在被打开时如何显示。这个参数可以是以下值中的任何一个:

如果lpField指定的是文档文件,nShowCmd应该为0。

* return Values(返回值)
如果函数执行成功,返回值是已经运行的工程的实例句柄,或者动态数据交换服务器应用程序的句柄。
(具体返回值列表从略,请参考Delphi在线帮助)
* Remarks(注释)
被lpFile参数指定的文件必须是一个可执行文件或者文档文件。如果文件是一个文档文件,ShellExecute函数将根据lpOperation参数决定打开或者打印这个文件。如果是可执行文件,ShellExecute函数将打开它,即使lpOperation参数被指定为printing。
你可以使用ShellExecute打开活着搜索一个文件夹。可以使用以下任意一种方式打开一个文件夹:
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
或者
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
使用下面的调用搜索文件夹:
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL)
如果lpOperation参数为null,函数将打开由lpFile指定的文件。如果lpOperation参数为”open”或者”explore”,函数将强制打开窗体或者资源管理器。


注:在新窗口打开网页的办法
ShellExecute(self.Handle, PChar('open'), PChar('explorer'), PChar(URL), nil, SW_MAXIMIZE);
Q: 如何打开一个应用程序?
ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW) ;

ShellExecute(this->m_hWnd,"open","notepad.exe",
"c:\MyLog.log","",SW_SHOW);
Q: 如何打开一个同系统程序相关连的文档?
ShellExecute(this->m_hWnd,"open",
"c:\abc.txt","","",SW_SHOW);
Q: 如何打开一个网页?
ShellExecute(this->m_hWnd,"open","http://www.google.com";,"","", SW_SHOW);
Q: 如何激活相关程序,发送EMAIL?
ShellExecute(this->m_hWnd,"open",
"mailto:nishinapp@yahoo.com","","", SW_SHOW);
Q: 如何用系统打印机打印文档?
ShellExecute(this->m_hWnd,"print",
"c:\abc.txt","","", SW_HIDE);
Q: 如何用系统查找功能来查找指定文件?
ShellExecute(m_hWnd,"find","d:\nish",
NULL,NULL,SW_SHOW);
Q: 如何启动一个程序,直到它运行结束?
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
或:
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //入口参数
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //分配大小
if(CreateProcess("c:\winnt\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}
Q: 如何显示文件或文件夹的属性?
SHELLEXECUTEINFO ShExecInfo ={0};
ShExecInfo.cbSize = sizeof
SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "properties";
ShExecInfo.lpFile = "c:\"; //也可以是文件
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL

Sunday, April 19, 2009

Paper and article website

论文网[http://www.51lw.com(免费论文下载)
论 文 帝国[http://www.papersempire.com(论文资源)
论 文 资料网[http://www.51paper.net(各专业论文下载)
论 文 快车网[http://www.lun-wen.com(各专业论文下载)
毕 业 论文网[http://www.bylw.com(论文发表等,不错的地方)
专 业 论文网[http://www.dtzcb.net/lunwen(专业论文下载,职称考试)
大学生论文库[http://www.syiae.com/lunwen(看看吧挺好)
轻 松 论文网[http://www.paperease.com(论文网站)
易 起 论文网[http://www.17net.net(不错的地方)

<考试资源>
考试163:http://www.test163.com(大量的资格认真考试试题,计算机,英语视听材料)
IT认证考试资源网[http://www.itexamprep.com(大量IT认证考试题库)
中国大学生网[http://www.chinadaxuesheng.com(题库,模拟题,论文,小学大学)
中国考试网网[http://www.sinoexam.com.cn(太多了)
中国考研网[http://www.好好学习,天天校内an.com(想考研究生来看看吧,大量免费资源)
考研网[http://www.kaoyan.net(也是考研的网站,大量免费资源)
中国自考网[http://www.chinazikao.com(自学考试相关资源)
出国考试网[http://www.007test.com(出国考试过关习题等)
天下资源网[http://www.da126.com(出国考试过关习题,英语视听材料等)

<文学艺术>
白鹿书院[http://www.oklink.net(中国最好的网上读书站点,可以投稿赚稿费)
清韵书院[http://www.qingyun.com(有一大型网上读书站点,看看吧)
潇湘书院[http://www.xxsy.net(挺特别的地方,不过品类齐全)
黄金书屋[http://wenxue.myrice.com(网上看书好地方)
新时代书城[http://www.mypcera.com/book(网上看书好地方)
亦凡书库[http://www.yifan.net(网上看书,不错的地方)
校园文学网[http://www.okqq.net(学生读书的好地方)
中国诗人网[http://www.chinapoet.net(看看吧)
山阳书院[http://www.jzinfo.ha.cn/book(挺全的站点)
网天书城[http://www.net-sky.com/book(网上读书,看看吧)
中华电脑书库[http://www.pcbookcn.com(大量计算机方面图书,可以下载)
考试163[http://www.pcbookcn.com(大量考试方面的图书,可以下载)

<外语学习>
择校学习网[http://www.zexiao.com(出国学习外语,咨询等)
163考试网[http://www.test163.com(要过CET的朋友要去看看,还有听力资料啊)
英语之声[http://www.4english.cn(网上学习英语的好地方)
疯狂英语俱乐部[/]http://www.crazyenglish.org想了解疯狂英语吗?)
在线英语杂志[http://www.englishcn.com(不错的地方)
英语写作网[http://www.4ewriting.com(英语协作技巧等)
英语周报[http://www.ew.com.cn(学习英语的好地方)
英语角[http://www.english-corner.com.cn(看看吧)

<简历制作>
飞达简历网[http://www.jianlishop.com(精美的简历设计网站,大量免费资源)
无忧简历网[http://www.51jianli.com(收费简历设计网站)
我的简历网[http://www.wdjl.net(免费提供电子简历)
视频简历网[http://www.cnvhr.com(想试试视频简历吗)
中国简历网[http://www.5520.com(收费简历设计网站)
简历翻译网[http://www.jlok.com(简历翻译到这里,到外企少不了)
点睛简历网[http://www.doteye.com(收费简历设计)
毕业论文完整收集[http://www.xiaonei.com/crasy](最最权威论文)
Someone补:
中文免费论文地址集锦
一、 综合类
1、蓝之韵论文
http://www.21blue.com 门类较全。
2、学生大论文中心
http://www.studa.com/newpaper/
3、蜂朝无忧论文网
http://www.51lunwen.com/main/index.asp
门类很全。
4、论文下载中心
http://www.studa.net/paper/
门类很全。
5、论文帝国
http://www.papersempire.com/
二、 教育类
1、教研论文交流中心
http://www.k12.com.cn/teacher/resource/lunwen/
以中小学教育为主,基础教育、英语教学文章居多。
2、教育教学论文网
http://www.minaol.com/gb/art/ttd/index.asp
以教育论文为主,包含:语文论文 美术论文 物理论文
化学论文 英语论文 历史论文 德育论文 教学论文
数学论文 音乐论文 生物论文 自然论文 体育论文
地理论文 摄影论文 劳动技术 农村教育 毕业论文
素质论文 医学论文 电子电器学 思维科学 计算机论文
活动课教学 书法篆刻论文 创新教育研究 心理健康教育
西部教育论文 信息技术论文
3、教育论文
http://dhzyzz.porcelain-china.com/teach.asp
4、中国园丁网论文大观
http://www.teacher.net.cn/papers
5、北大附小学校教师的文章:
http://www.bdfx.net.cn/5jslw.htm
三、 专业类
1、优秀论文杂志
http://www.interpapers.com/kj/
以科技类为主。
2、论文资料网
http://www.51paper.net/
以财经经济管理类为主。
3、法律图书馆
http://www.law-lib.com/
文如其名。
4、法学论文资料库
http://www.law-lib.com/lw/
文如其名。
5、中国总经理网论文集
http://www.cnceo.com/school/lwj.asp
6、mba职业经理人论坛
http://mba.001.com.cn/mbamba.htm
7、中国农业在线-农业论文
http://www.agrionline.net.cn/keji/lunwenzy/
8、体育论文
http://www.zxty.net/product4.htm
9、财经学位论文下载中心
http://www.forumcn.com/sblw/
10、公开发表论文_深圳证券交易所
http://www.sse.org.cn/sse/yjkw/gkfblw.asp
11、中国路桥资讯网论文资料中心
http://www.lqzx.com/lunwen.htm
12、论文商务中心
http://doc.cei.gov.cn/
13、法律帝国:
http://www.fl365.com/gb/lawthinker/bbs/default.asp
四、 论文写作教学类
1、学术论文
http://www.hrexam.com/advanced1.htm
其实是学术论文的写作网站。
五、 博硕士论文
1、论文统计
http://www.sci.com.cn/
实际上就是万方的论文统计。
2、台湾博硕士论文咨讯网
http://datas.ncl.edu.tw/theabs/00/
3、北京大学学位论文样本收藏
http://www.lib.pku.edu.cn/xwlw.html
4、学位论文 (清华大学)
http://www.lib.tsinghua.edu.cn/new/thesis.html
中国科技论文在线http://www.paper.edu.cn/
论文中国 :http://www.chinawrite.com/
新浪论文网分类:http://dir.sina.com.cn/search_dir/jy/lw/
中国论文联盟:http://www.lwlm.com/
大学生论文库http://www.syiae.com/lunwen
论文资料网:http://www.51paper.net/
论文下载中心:http://www.studa.net/paper/
毕业论文网:http://www.bylw.com/
学位论文:http://www.lib.tsinghua.edu.cn/NEW/thesis.html
无忧论文网:http://www.51lunwen.com/
北京语言文化大学论文库:http://lib.blcu.edu.cn/dt1000/bys/bys.htm

Saturday, April 11, 2009

Funny animate caption in delphi about

Drop a button (TButton named "AnimateButton"), a label (TLabel named "lblText") and an edit (TEdit named "editToAnimate") control on a form (named "AnimationForm").

Handle the button's OnClick event:

procedure TAnimationForm.AnimateButtonClick(Sender: TObject) ;
var
c, charInProcess : char;
word : string;
begin
lblText.Caption := '';

for c in editToAnimate.Text do
begin
for charInProcess in ['a' .. c] do
begin
lblText.Caption := word + charInProcess;
lblText.Refresh;
Sleep(100) ;
Application.ProcessMessages;
end;
word := word + c;
end;

lblText.Caption := word;
end;

Tuesday, April 07, 2009

dynamic create a object in delphi

with TEdit.Create(Self) do
begin
Parent := Self;
Text := 'Hello';
Width := 200;
Top := 100;
Left := 100;
end

Saturday, April 04, 2009

all the function about string in delphi

uses StrUtils;【字符串函数大全】
首部 function AnsiResemblesText(const AText, AOther: string): Boolean;
$[StrUtils.pas
功能 返回两个字符串是否相似
说明 ANSI(American National Standards Institute)美国国家标准协会;不区分大小写
参考 function StrUtils.SoundexProc; var StrUtils.AnsiResemblesProc
例子 CheckBox1.Checked := AnsiResemblesText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiContainsText(const AText, ASubText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否包含子串ASubText
说明 不区分大小写
参考 function StrUtils.AnsiUppercase; function StrUtils.AnsiPos
例子 CheckBox1.Checked := AnsiContainsText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStartsText(const ASubText, AText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否以子串ASubText开头
说明 不区分大小写
参考 function Windows.CompareString
例子 CheckBox1.Checked := AnsiStartsText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiEndsText(const ASubText, AText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否以子串ASubText结尾
说明 不区分大小写
参考 function Windows.CompareString
例子 CheckBox1.Checked := AnsiEndsText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiReplaceText(const AText, AFromText, AToText: string):
string; $[StrUtils.pas
功能 返回字符串AText中用子串AFromText替换成子串AToText的结果
说明 不区分大小写
参考 function SysUtils.StringReplace; type SysUtils.TReplaceFlags
例子 Edit4.Text := AnsiReplaceText(Edit1.Text, Edit2.Text, Edit3.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiMatchText(const AText: string; const AValues: array of
string): Boolean; $[StrUtils.pas
功能 返回字符串数组AValues中是否包含字符串AText
说明 不区分大小写
参考 function StrUtils.AnsiIndexText
例子 CheckBox1.Checked := AnsiMatchText(Edit1.Text, ['a1', 'a2', 'a3',
'a4']);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiIndexText(const AText: string; const AValues: array of
string): Integer; $[StrUtils.pas
功能 返回字符串AText在字符串数组AValues中的位置
说明 不区分大小写;如果不包含则返回-1
参考 function SysUtils.AnsiSameText
例子 SpinEdit1.Value := AnsiIndexText(Edit1.Text, ['a1', 'a2', 'a3', 'a4']);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiContainsStr(const AText, ASubText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否包含子串ASubText
说明 区分大小写
参考 function StrUtils.AnsiPos
例子 CheckBox1.Checked := AnsiContainsStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStartsStr(const ASubText, AText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否以子串ASubText开头
说明 区分大小写
参考 function SysUtils.AnsiSameStr
例子 CheckBox1.Checked := AnsiStartsStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiEndsStr(const ASubText, AText: string): Boolean;
$[StrUtils.pas
功能 返回字符串AText是否以子串ASubText结尾
说明 区分大小写
参考 function SysUtils.AnsiSameStr
例子 CheckBox1.Checked := AnsiEndsStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiReplaceStr(const AText, AFromText, AToText: string):
string; $[StrUtils.pas
功能 返回字符串AText中用子串AFromText替换成子串AToText的结果
说明 区分大小写
参考 function SysUtils.StringReplace; type SysUtils.TReplaceFlags
例子 Edit4.Text := AnsiReplaceStr(Edit1.Text, Edit2.Text, Edit3.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiMatchStr(const AText: string; const AValues: array of
string): Boolean; $[StrUtils.pas
功能 返回字符串数组AValues中是否包含字符串AText
说明 区分大小写
参考 function StrUtils.AnsiIndexStr
例子 CheckBox1.Checked := AnsiMatchStr(Edit1.Text, ['a1', 'a2', 'a3',
'a4']);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiIndexStr(const AText: string; const AValues: array of
string): Integer; $[StrUtils.pas
功能 返回字符串AText在字符串数组AValues中的位置
说明 区分大小写
参考 function SysUtils.AnsiSameStr
例子 SpinEdit1.Value := AnsiIndexStr(Edit1.Text, ['a1', 'a2', 'a3', 'a4']);
━━━━━━━━━━━━━━━━━━━━━
首部 function DupeString(const AText: string; ACount: Integer): string;
$[StrUtils.pas
功能 返回字符串AText的ACount个复本
说明 当ACount为0时返回'
参考 function System.SetLength
例子 Edit3.Text := DupeString(Edit1.Text, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function ReverseString(const AText: string): string; $[StrUtils.pas
功能 返回字符串AText的反序
说明 ReverseString('1234') = '4321'
参考 function System.SetLength
例子 Edit3.Text := ReverseString(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StuffString(const AText: string; AStart, ALength: Cardinal;
const ASubText: string): string; $[StrUtils.pas
功能 返回嵌套字符串
说明 AStart:嵌套开始位置;ALength:嵌套长度;StuffString('abcd', 2, 0, '12') = 'a12bcd'
参考 function System.Copy
例子 Edit3.Text := StuffString(Edit1.Text, SpinEdit1.Value, SpinEdit2.Value,
Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function RandomFrom(const AValues: array of string): string; overload;
$[StrUtils.pas
功能 随机返回字符串数组AValues中的一个元素
说明 之前建议执行Randomize
参考 function System.Random
例子 Randomize; Edit3.Text := RandomFrom(['a1', 'a2', 'a3', 'a4']);
━━━━━━━━━━━━━━━━━━━━━
首部 function IfThen(AValue: Boolean; const ATrue: string; AFalse: string =
'): string; overload; $[StrUtils.pas
功能 返回指定的逻辑字符串
说明 IfThen(True, '是', '否') = '是';IfThen(False, '是', '否') = '否'
参考
例子 Edit3.Text := IfThen(CheckBox1.Checked, Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function LeftStr(const AText: string; const ACount: Integer): string;
$[StrUtils.pas
功能 返回字符串AText左边的ACount个字符
说明 LeftStr('123456', 3) = '123'
参考 function System.Copy
例子 Edit3.Text := LeftStr(Edit1.Text, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function RightStr(const AText: string; const ACount: Integer): string;
$[StrUtils.pas
功能 返回字符串AText右边的ACount个字符
说明 RightStr('123456', 3) = '456'
参考 function System.Copy
例子 Edit3.Text := RightStr(Edit1.Text, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function MidStr(const AText: string; const AStart, ACount: Integer):
string; $[StrUtils.pas
功能 返回字符串AText从AStart开始的ACount个字符
说明 其实就是Copy
参考 function System.Copy
例子 Edit3.Text := MidStr(Edit1.Text, SpinEdit1.Value, SpinEdit2.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SearchBuf(Buf: PChar; BufLen: Integer; SelStart, SelLength:
Integer; SearchString: String; Options: TStringSearchOptions = [soDown]):
PChar; $[StrUtils.pas
功能 返回第一个搜索到的指针位置
说明 这函数常用于文本中搜索字符串
参考
例子
///////Begin SearchBuf
function SearchEdit(EditControl: TCustomEdit; const SearchString: String;
SearchOptions: TStringSearchOptions; FindFirst: Boolean = False): Boolean;
var
Buffer, P: PChar;
Size: Word;
begin
Result := False;
if (Length(SearchString) = 0) then Exit;
Size := EditControl.GetTextLen;
if (Size = 0) then Exit;
Buffer := StrAlloc(Size + 1);
try
EditControl.GetTextBuf(Buffer, Size + 1);
P := SearchBuf(Buffer, Size, EditControl.SelStart, EditControl.SelLength,
SearchString, SearchOptions);
if P <> nil then begin
EditControl.SelStart := P - Buffer;
EditControl.SelLength := Length(SearchString);
Result := True;
end;
finally
StrDispose(Buffer);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SearchOptions: TStringSearchOptions;
begin
SearchOptions := [];
if CheckBox1.Checked then
Include(SearchOptions, soDown);
if CheckBox2.Checked then
Include(SearchOptions, soMatchCase);
if CheckBox3.Checked then
Include(SearchOptions, soWholeWord);
SearchEdit(Memo1, Edit1.Text, SearchOptions);
Memo1.SetFocus;
end;
///////End SearchBuf
━━━━━━━━━━━━━━━━━━━━━
首部 function Soundex(const AText: string; ALength: TSoundexLength = 4):
string; $[StrUtils.pas
功能 返回探测字符串
说明 根据探测法(Soundex)可以找到相进的字符串;http://www.nara.gov/genealogy/coding.html
参考
例子 Edit2.Text := Soundex(Edit1.Text, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SoundexInt(const AText: string; ALength: TSoundexIntLength =
4): Integer; $[StrUtils.pas
功能 返回探测整数
说明 ALength的值越大解码准确率越高
参考
例子 SpinEdit2.Value := SoundexInt(Edit1.Text, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function DecodeSoundexInt(AValue: Integer): string; $[StrUtils.pas
功能 返回探测整数的解码
说明 DecodeSoundexInt(SoundexInt('hello')) 相当于 Soundex('hello')
参考
例子 Edit2.Text := DecodeSoundexInt(SpinEdit2.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SoundexWord(const AText: string): Word; $[StrUtils.pas
功能 返回探测文字数值
说明 没有参数ALength已经固定为4
参考
例子 SpinEdit2.Value := SoundexWord(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function DecodeSoundexWord(AValue: Word): string; $[StrUtils.pas
功能 返回探测文字数值的解码
说明 DecodeSoundexWord(SoundexWord('hello')) 相当于 Soundex('hello')
参考
例子 Edit2.Text := DecodeSoundexWord(SpinEdit2.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SoundexSimilar(const AText, AOther: string; ALength:
TSoundexLength = 4): Boolean; $[StrUtils.pas
功能 返回两个字符串的探测字符串是否相同
说明 Result := Soundex(AText, ALength) = Soundex(AOther, ALength)
参考
例子 CheckBox1.Checked := SoundexSimilar(Edit1.Text, Edit2.Text,
SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SoundexCompare(const AText, AOther: string; ALength:
TSoundexLength = 4): Integer; $[StrUtils.pas
功能 返回比较两个字符串的探测字符串的结果
说明 Result := AnsiCompareStr(Soundex(AText, ALength), Soundex(AOther,
ALength))
参考 function SysUtils.AnsiCompareStr
例子 SpinEdit2.Value := SoundexCompare(Edit1.Text, Edit2.Text,
SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function SoundexProc(const AText, AOther: string): Boolean;
$[StrUtils.pas
功能 调用SoundexSimilar返回两个字符串的探测字符串是否相同
说明 系统变量AnsiResemblesProc的默认值
参考 function StrUtils.AnsiResemblesText
例子 [var AnsiResemblesProc: TCompareTextProc = SoundexProc;]
━━━━━━━━━━━━━━━━━━━━━
首部 function NewStr(const S: string): PString; deprecated; $[SysUtils.pas
功能 返回一个新的字符串指针地址
说明 字符串S为空时返回NullStr
参考 procedure System.New
例子
////////Begin NewStr,DisposeStr
procedure TForm1.Button1Click(Sender: TObject);
var
P: PString;
begin
P := NewStr(Edit1.Text);
Edit2.Text := P^;
DisposeStr(P);
end;
////////End NewStr,DisposeStr
━━━━━━━━━━━━━━━━━━━━━
首部 procedure DisposeStr(P: PString); deprecated; $[SysUtils.pas
功能 释放字符串指针P资源
说明 配合函数NewStr使用
参考 procedure System.Dispose
例子 <如上参见,如下参见>
━━━━━━━━━━━━━━━━━━━━━
首部 procedure AssignStr(var P: PString; const S: string); deprecated;
$[SysUtils.pas
功能 将字符串S更新给字符串指针P
说明 更新值时会释放以前字符串指针的资源
参考 function SysUtils.NewStr;function SysUtils.DisposeStr
例子
////////Begin AssignStr
procedure TForm1.Button1Click(Sender: TObject);
var
P: PString;
begin
P := nil;
AssignStr(P, Edit1.Text);
Edit2.Text := P^;
DisposeStr(P);
end;
////////End AssignStr
━━━━━━━━━━━━━━━━━━━━━
首部 procedure AppendStr(var Dest: string; const S: string); deprecated;
$[SysUtils.pas
功能 在字符串Dest后追加字符串S
说明 相当于Dest := Dest + S;Delphi6已经不建议使用
参考
例子
////////Begin AppendStr
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
S := Edit2.Text;
AppendStr(S, Edit1.Text);
Edit2.Text := S;
end;
////////End AppendStr
━━━━━━━━━━━━━━━━━━━━━
首部 function UpperCase(const S: string): string; $[SysUtils.pas
功能 返回字符串S的大写形式
说明 非小写字符不处理
参考 procedure System.SetLength
例子 Edit2.Text := UpperCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function LowerCase(const S: string): string; $[SysUtils.pas
功能 返回字符串S的小写形式
说明 非大写字符不处理
参考 procedure System.SetLength
例子 Edit2.Text := LowerCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function CompareStr(const S1, S2: string): Integer; $[SysUtils.pas
功能 返回比较两个字符
说明 当S1>S2返回值>0;当S1 参考
例子 SpinEdit1.Value := CompareStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function CompareMem(P1, P2: Pointer; Length: Integer): Boolean;
assembler; $[SysUtils.pas
功能 返回比较两个内存指针
说明 CompareMem(PChar('12a'), PChar('12c'), 2)=True;CompareMem(PChar('12a'),
PChar('12c'), 3)=False
参考
例子 CheckBox1.Checked := CompareMem(Self, Form1, 8);
━━━━━━━━━━━━━━━━━━━━━
首部 function CompareText(const S1, S2: string): Integer; $[SysUtils.pas
功能 返回比较两个字符串
说明 不区分大小写
参考
例子 SpinEdit1.Value := CompareText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function SameText(const S1, S2: string): Boolean; $[SysUtils.pas
功能 返回两个字符串是否相等
说明 不区分大小写
参考
例子 CheckBox1.Checked := SameText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiUpperCase(const S: string): string; $[SysUtils.pas
功能 返回字符串S的大写形式
说明 ANSI(American National Standards Institute)美国国家标准协会;非小写的字符不变
参考 function Windows.CharUpperBuff
例子 Edit2.Text := AnsiUpperCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiLowerCase(const S: string): string; $[SysUtils.pas
功能 返回字符串S的小写形式
说明 非大写字符不处理
参考 function Windows.CharLowerBuff
例子 Edit2.Text := AnsiLowerCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiCompareStr(const S1, S2: string): Integer; $[SysUtils.pas
功能 反回比较两个字符串
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareString
例子 SpinEdit1.Value := AnsiCompareStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiSameStr(const S1, S2: string): Boolean; $[SysUtils.pas
功能 返回两个字符串是否相等
说明 区分大小写
参考 function SysUtils.AnsiCompareStr
例子 CheckBox1.Checked := AnsiSameStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiCompareText(const S1, S2: string): Integer; $[SysUtils.pas
功能 反回比较两个字符串
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareString
例子 SpinEdit1.Value := AnsiCompareText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiSameText(const S1, S2: string): Boolean; $[SysUtils.pas
功能 返回两个字符串是否相等
说明 不区分大小写
参考 function SysUtils.AnsiCompareText
例子 CheckBox1.Checked := AnsiSameText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrComp(S1, S2: PChar): Integer; $[SysUtils.pas
功能 返回比较两个指针字符串
说明 当S1>S2返回值>0;当S1 参考 function System.CompareString
例子 SpinEdit1.Value := AnsiStrComp(PChar(Edit1.Text), PChar(Edit2.Text))
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrIComp(S1, S2: PChar): Integer; $[SysUtils.pas
功能 返回比较两个指针字符串
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareString
例子 SpinEdit1.Value := AnsiStrIComp(PChar(Edit1.Text), PChar(Edit2.Text))
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrLComp(S1, S2: PChar; MaxLen: Cardinal): Integer;
$[SysUtils.pas
功能 返回比较两个指针字符串指定长度
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareString
例子 SpinEdit1.Value := AnsiStrLComp(PChar(Edit1.Text), PChar(Edit2.Text),
SpinEdit2.Value)
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrLIComp(S1, S2: PChar; MaxLen: Cardinal): Integer;
$[SysUtils.pas
功能 返回比较两个指针字符串指定长度
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareString
例子 SpinEdit1.Value := AnsiStrLIComp(PChar(Edit1.Text), PChar(Edit2.Text),
SpinEdit2.Value)
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrLower(Str: PChar): PChar; $[SysUtils.pas
功能 返回指针字符串小写形式
说明 非大写字符不处理
参考 function Windows.CharLower
例子 Edit2.Text := AnsiStrLower(PChar(Edit1.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrUpper(Str: PChar): PChar; $[SysUtils.pas
功能 返回指针字符串大写形式
说明 非小写字符不处理
参考 function Windows.CharUpper
例子 Edit2.Text := AnsiStrUpper(PChar(Edit1.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiLastChar(const S: string): PChar; $[SysUtils.pas
功能 返回字符串S的最后一个指针字符
说明 当字符串S为空串则返回空指针
参考 function SysUtils.ByteType
例子 Edit2.Text := AnsiLastChar(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiStrLastChar(P: PChar): PChar; $[SysUtils.pas
功能 返回指针字符串P的最后一个指针字符
说明 当字符串P为空空指针则返回空指针
参考 function SysUtils.ByteType
例子 Edit2.Text := AnsiLastChar(PChar(Edit1.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function WideUpperCase(const S: WideString): WideString; $[SysUtils.pas
功能 返回双字节字符串的大写形式
说明 WideChar双字节字符
参考 function Windows.CharUpperBuffW
例子 Edit2.Text := WideUpperCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function WideLowerCase(const S: WideString): WideString; $[SysUtils.pas
功能 返回双字节字符串的小写形式
说明 我怎么就测试不出来呢
参考 function Windows.CharLowerBuffW
例子 Edit2.Text := WideLowerCase(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function WideCompareStr(const S1, S2: WideString): Integer;
$[SysUtils.pas
功能 返回比较两个双字节字符串
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareStringW
例子 SpinEdit1.Value := WideCompareStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function WideSameStr(const S1, S2: WideString): Boolean; $[SysUtils.pas
功能 返回两个双字节字符串是否相同
说明 区分大小写
参考 function SysUtils.WideCompareStr
例子 CheckBox1.Checked := WideSameStr(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function WideCompareText(const S1, S2: WideString): Integer;
$[SysUtils.pas
功能 返回比较两个双字节字符串
说明 当S1>S2返回值>0;当S1 参考 function Windows.CompareStringW
例子 SpinEdit1.Value := WideCompareText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function WideSameText(const S1, S2: WideString): Boolean;
$[SysUtils.pas
功能 返回两个双字节字符串是否相同
说明 不区分大小写
参考 function SysUtils.WideCompareText
例子 CheckBox1.Checked := WideSameText(Edit1.Text, Edit2.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function Trim(const S: string): string; overload; $[SysUtils.pas
首部 function Trim(const S: WideString): WideString; overload;
$[SysUtils.pas
功能 返回除去字符串S左右不可见字符
说明 小于#32的字符看作不可见字符
参考 function System.Copy
例子 Edit2.Text := Trim(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function TrimLeft(const S: string): string; overload; $[SysUtils.pas
首部 function TrimLeft(const S: WideString): WideString; overload;
$[SysUtils.pas
功能 返回除去字符串S左边不可见字符
说明 小于#32的字符看作不可见字符
参考 function System.Copy
例子 Edit2.Text := TrimLeft(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function TrimRight(const S: string): string; overload; $[SysUtils.pas
首部 function TrimRight(const S: WideString): WideString; overload;
$[SysUtils.pas
功能 返回除去字符串S右边不可见字符
说明 小于#32的字符看作不可见字符
参考 function System.Copy
例子 Edit2.Text := TrimRight(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function QuotedStr(const S: string): string; $[SysUtils.pas
功能 返回字符串S在pascal中的表现形式
说明 单引号中的一个单引号将转成两个
参考 procedure System.Insert
例子 Edit2.Text := QuotedStr(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiQuotedStr(const S: string; Quote: Char): string;
$[SysUtils.pas
功能 返回字符串S以字符Quote为引号的表现形式
说明 AnsiQuotedStr('hello"world',
'@')='@hello"world@';AnsiQuotedStr('hello"world', '"')='"hello""world"'
参考 function SysUtils.AnsiStrScan
例子 Edit2.Text := AnsiQuotedStr(Edit1.Text, '"');
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiExtractQuotedStr(var Src: PChar; Quote: Char): string;
$[SysUtils.pas
功能 返回以字符Quote为引号的表现形式原形
说明 表现形式非法时Src不变否则为空
参考 function SysUtils.AnsiStrScan
例子
///////Begin AnsiExtractQuotedStr
procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
begin
P := PChar(Edit1.Text);
Edit2.Text := AnsiExtractQuotedStr(P, '"');
Edit3.Text := P;
end;
///////End AnsiExtractQuotedStr
━━━━━━━━━━━━━━━━━━━━━
首部 function AnsiDequotedStr(const S: string; AQuote: Char): string;
$[SysUtils.pas
功能 返回以字符AQuote为引号的表现形式原形
说明 表现形式非法时则返回S
参考 function SysUtils.AnsiExtractQuotedStr
例子 Edit2.Text := AnsiDequotedStr(Edit1.Text, '"');
━━━━━━━━━━━━━━━━━━━━━
首部 function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle =
{$IFDEF LINUX} tlbsLF {$ENDIF} {$IFDEF MSWINDOWS} tlbsCRLF {$ENDIF}):
string; $[SysUtils.pas
功能 返回将给定字符串的行分隔符调整为CR/LF序列
说明
AdjustLineBreaks('1'#13'2'#13)='1'#13#10'2'#13#10;AdjustLineBreaks('1'#10'2'#10)='1'#13#10'2'#13#10
参考 function SysUtils.StrNextChar
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function IsValidIdent(const Ident: string): Boolean; $[SysUtils.pas
功能 返回字符串Ident是否是正确的标识符
说明 标识符::字母|下划线[字母|下划线|数字]...
参考
例子 CheckBox1.Checked := IsValidIdent(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function IntToStr(Value: Integer): string; overload; $[SysUtils.pas
首部 function IntToStr(Value: Int64): string; overload; $[SysUtils.pas
功能 返回整数Value转换成字符串
说明 Format('%d', [Value])
参考 function SysUtils.FmtStr
例子 Edit2.Text := IntToStr(SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function IntToHex(Value: Integer; Digits: Integer): string; overload;
$[SysUtils.pas
首部 function IntToHex(Value: Int64; Digits: Integer): string; overload;
$[SysUtils.pas
功能 返回整数Value转换成十六进制表现结果;Format('%.*x', [Digits, Value])
说明 参数Digits指定字符最小宽度;最小宽度不足时将用0填充
参考 function SysUtils.FmtStr
例子 Edit2.Text := IntToHex(SpinEdit1.Value, SpinEdit2.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToInt(const S: string): Integer; $[SysUtils.pas
功能 返回字符串S转换成整数
说明 字符串非整数表达时将引起异常
参考 procedure System.Val
例子 SpinEdit1.Value := StrToInt(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToIntDef(const S: string; Default: Integer): Integer;
$[SysUtils.pas
功能 返回字符串S转换成整数
说明 字符串非整数表达时则返回默认值Default
参考 procedure System.Val
例子 SpinEdit1.Value := StrToIntDef(Edit1.Text, 0);
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToInt(const S: string; out Value: Integer): Boolean;
$[SysUtils.pas
功能 返回字符串S转换成整数Value是否成功
说明 字符串非整数表达时返回False并且Value将输出为0
参考 procedure System.Val
例子
///////Begin TryStrToInt
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
CheckBox1.Checked := TryStrToInt(Edit1.Text, I);
SpinEdit1.Value := I;
end;
///////End TryStrToInt
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToInt64(const S: string): Int64; $[SysUtils.pas
功能 返回字符串S转换成六十四位整数
说明 字符串非六十四位整数表达时将引起异常
参考 procedure System.Val
例子 SpinEdit1.Value := StrToInt64(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToInt64Def(const S: string; const Default: Int64): Int64;
$[SysUtils.pas
功能 返回字符串S转换成六十四位整数
说明 字符串非六十四位整数表达时则返回默认值Default
参考 procedure System.Val
例子 SpinEdit1.Value := StrToInt64Def(Edit1.Text, 0);
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToInt64(const S: string; out Value: Int64): Boolean;
$[SysUtils.pas
功能 返回字符串S转换成六十四位整数Value是否成功
说明 字符串非六十四位整数表达时返回False并且Value将输出为0
参考 procedure System.Val
例子
///////Begin TryStrToInt64
procedure TForm1.Button1Click(Sender: TObject);
var
I: Int64;
begin
CheckBox1.Checked := TryStrToInt64(Edit1.Text, I);
SpinEdit1.Value := I;
end;
///////End TryStrToInt64
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToBool(const S: string): Boolean; $[SysUtils.pas
功能 返回字符串S转换成逻辑值
说明 字符非逻辑表达时将引起异常
参考 function SysUtils.TryStrToBool
例子 CheckBox1.Checked := StrToBool(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToBoolDef(const S: string; const Default: Boolean):
Boolean; $[SysUtils.pas
功能 返回字符串S转换成逻辑值
说明 字符非逻辑表达时则返回默认值Default
参考 function SysUtils.TryStrToBool
例子 CheckBox1.Checked := StrToBoolDef(Edit1.Text, False);
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToBool(const S: string; out Value: Boolean): Boolean;
$[SysUtils.pas
功能 返回字符串S转换成逻辑值Value是否成功
说明 [注意]0为假非0为真;不是'True'和'False';Delphi6 Bug 如下修正
参考 function SysUtils.AnsiSameText;var SysUtils.TrueBoolStrs;var
SysUtils.FalseBoolStrs
例子
///////Begin TryStrToBool
procedure TForm1.Button1Click(Sender: TObject);
var
B: Boolean;
begin
SetLength(TrueBoolStrs, 2);
SetLength(FalseBoolStrs, 2);
TrueBoolStrs[0] := 'True';
FalseBoolStrs[0] := 'False';
TrueBoolStrs[1] := 'Yes';
FalseBoolStrs[1] := 'No';
CheckBox1.Checked := TryStrToBool(Edit1.Text, B);
CheckBox2.Checked := B;
end;
///////End TryStrToBool
附加
///////Begin TryStrToBool
function TryStrToBool(const S: string; out Value: Boolean): Boolean;
function CompareWith(const aArray: array of string): Boolean;
var
I: Integer;
begin
Result := False;
for I := Low(aArray) to High(aArray) do
if AnsiSameText(S, aArray[I]) then
begin
Result := True;
Break;
end;
end;
var
LResult: Extended;
begin
Result := TryStrToFloat(S, LResult);
if Result then
Value := LResult <> 0
else
begin
Result := True; //修正处
VerifyBoolStrArray;
if CompareWith(TrueBoolStrs) then
Value := True
else if CompareWith(FalseBoolStrs) then
Value := False
else
Result := False;
end;
end;
///////End TryStrToBool
━━━━━━━━━━━━━━━━━━━━━
首部 function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
$[SysUtils.pas
功能 返回逻辑值B转换成字符串
说明 BoolToStr(False, False)='0';BoolToStr(False, True)='-1'
参考 var SysUtils.TrueBoolStrs;var SysUtils.FalseBoolStrs
例子 Edit1.Text := BoolToStr(CheckBox1.Checked, CheckBox2.Checked);
━━━━━━━━━━━━━━━━━━━━━
首部 function LoadStr(Ident: Integer): string; $[SysUtils.pas
功能 返回根据标识Ident的字符串资源
说明 字符串资源是指程序的内部资源
参考 function SysUtils.FindStringResource
例子 Edit2.Text := LoadStr(StrToIntDef(Edit1.Text, 0));
━━━━━━━━━━━━━━━━━━━━━
首部 function FmtLoadStr(Ident: Integer; const Args: array of const):
string; $[SysUtils.pas
功能 返回格式化的字符串资源
说明 字符串资源是指程序的内部资源
参考 function SysUtils.FmtStr;function SysUtils.FindStringResource
例子 ;
━━━━━━━━━━━━━━━━━━━━━
首部 function StrLen(const Str: PChar): Cardinal; $[SysUtils.pas
功能 返回指针字符串的长度
说明 当指针字符串Str为nil时将触发异常
参考
例子 SpinEdit2.Value := StrLen(PChar(Edit1.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function StrEnd(const Str: PChar): PChar; $[SysUtils.pas
功能 返回指针字符串的结尾
说明 当指针字符串Str为nil时将触发异常
参考
例子 Edit2.Text := StrEnd(PChar(Edit1.Text)) - SpinEdit1.Value;
━━━━━━━━━━━━━━━━━━━━━
首部 function StrMove(Dest: PChar; const Source: PChar; Count: Cardinal):
PChar; $[SysUtils.pas
功能 返回将指针字符串Source指定内存数量Count复制覆盖到指针字符串Dest中
说明 Dest没有分配资源将触发异常s
参考 function System.Move
例子
///////Begin StrMove
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: PChar;
begin
vBuffer := '0123456789';
StrMove(vBuffer, PChar(Edit1.Text), SpinEdit1.Value);
Edit2.Text := vBuffer;
end;
///////End StrMove
━━━━━━━━━━━━━━━━━━━━━
首部 function StrCopy(Dest: PChar; const Source: PChar): PChar;
$[SysUtils.pas
功能 返回将指针字符串Source复制到指针字符串Dest中
说明 Dest应已经分配足够的空间非则将触发异常
参考
例子
///////Begin StrCopy
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: PChar;
begin
GetMem(vBuffer, Length(Edit1.Text) + 1);
StrCopy(vBuffer, PChar(Edit1.Text));
Edit2.Text := vBuffer;
FreeMem(vBuffer);
end;
///////End StrCopy
━━━━━━━━━━━━━━━━━━━━━
首部 function StrECopy(Dest:PChar; const Source: PChar): PChar;
$[SysUtils.pas
功能 返回将指针字符串Source复制到指针字符串Dest中的结尾
说明 可以连接指针字符串
参考
例子
///////Begin StrECopy
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrECopy(StrECopy(vBuffer, PChar(Edit1.Text)), PChar(Edit2.Text));
Edit3.Text := vBuffer;
end;
///////End StrECopy
━━━━━━━━━━━━━━━━━━━━━
首部 function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal):
PChar; $[SysUtils.pas
功能 返回将指针字符串Source指定长度MaxLen复制到指针字符串Dest中
说明 Dest应已经分配足够的空间非则将触发异常
参考
例子
///////Begin StrLCopy
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrLCopy(vBuffer, PChar(Edit1.Text), SpinEdit1.Value);
Edit2.Text := vBuffer;
end;
///////End StrLCopy
━━━━━━━━━━━━━━━━━━━━━
首部 function StrPCopy(Dest: PChar; const Source: string): PChar;
$[SysUtils.pas
功能 返回将指针字符串Source复制到指针字符串Dest中
说明 StrLCopy(Dest, PChar(Source), Length(Source))
参考 function SysUtils.StrLCopy
例子
///////Begin StrPCopy
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrPCopy(vBuffer, PChar(Edit1.Text));
Edit2.Text := vBuffer;
end;
///////End StrPCopy
━━━━━━━━━━━━━━━━━━━━━
首部 function StrPLCopy(Dest: PChar; const Source: string; MaxLen:
Cardinal): PChar; $[SysUtils.pas
功能 返回将字符串Source指定长度MaxLen复制到指针字符串Dest中
说明 StrLCopy(Dest, PChar(Source), MaxLen)
参考 function SysUtils.StrLCopy
例子
///////Begin StrPLCopy
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrPLCopy(vBuffer, Edit1.Text, SpinEdit1.Value);
Edit2.Text := vBuffer;
end;
///////End StrPLCopy
━━━━━━━━━━━━━━━━━━━━━
首部 function StrCat(Dest: PChar; const Source: PChar): PChar;
$[SysUtils.pas
功能 返回连接指针字符串Dest和指针字符串Source
说明 StrCopy(StrEnd(Dest), Source)
参考 function SysUntils.StrCopy
例子
///////Begin StrCat
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrPCopy(vBuffer, Edit1.Text);
StrCat(vBuffer, PChar(Edit2.Text));
Edit3.Text := vBuffer;
end;
///////End StrCat
━━━━━━━━━━━━━━━━━━━━━
首部 function StrLCat(Dest: PChar; const Source: PChar; MaxLen: Cardinal):
PChar; $[SysUtils.pas
功能 返回连接指针字符串Dest和指针字符串Source
说明 [注意]MaxLen指定连接后的最大长度不是指针字符串Source的长度
参考
例子
///////Begin StrLCat
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
begin
StrPCopy(vBuffer, Edit1.Text);
StrLCat(vBuffer, PChar(Edit2.Text), SpinEdit1.Value);
Edit3.Text := vBuffer;
end;
///////End StrLCat
━━━━━━━━━━━━━━━━━━━━━
首部 function StrComp(const Str1, Str2: PChar): Integer; $[SysUtils.pas
功能 返回比较两个指针字符串
说明 当S1>S2返回值>0;当S1 参考
例子 SpinEdit1.Value := StrComp(PChar(Edit1.Text), PChar(Edit2.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function StrIComp(const Str1, Str2: PChar): Integer; $[SysUtils.pas
功能 返回比较两个指针字符串
说明 当S1>S2返回值>0;当S1 参考
例子 SpinEdit1.Value := StrIComp(PChar(Edit1.Text), PChar(Edit2.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function StrLComp(const Str1, Str2: PChar; MaxLen: Cardinal): Integer;
$[SysUtils.pas
功能 返回比较两个指针字符串指定长度
说明 当S1>S2返回值>0;当S1 参考
例子 SpinEdit1.Value := StrLComp(PChar(Edit1.Text), PChar(Edit2.Text),
SpinEdit2.Value)
━━━━━━━━━━━━━━━━━━━━━
首部 function StrLIComp(const Str1, Str2: PChar; MaxLen: Cardinal): Integer;
$[SysUtils.pas
功能 返回比较两个指针字符串指定长度
说明 当S1>S2返回值>0;当S1 参考
例子 SpinEdit1.Value := StrLIComp(PChar(Edit1.Text), PChar(Edit2.Text),
SpinEdit2.Value)
━━━━━━━━━━━━━━━━━━━━━
首部 function StrScan(const Str: PChar; Chr: Char): PChar; $[SysUtils.pas
功能 返回在指针字符串Str搜索字符Chr第一个出现的地址
说明 没有找到则返回空指针

get text from file

procedure TForm1.Button1Click(Sender: TObject);
var f:TFileStream;
begin
F:=TFileStream.Create('LZTT.c',fmOpenRead);
memo1.Lines.LoadFromStream(f);
f.Free;end;
procedure TForm1.Button2Click(Sender: TObject);
const filename='lztt.c';
var filecontent:tstringlist;
begin
filecontent:=tstringlist.Create;
if FileExists(FileName) then
begin
FileContent.LoadFromFile(FileName);
label1.caption:=filecontent[0];
FileContent.Free;
end;
end;

Friday, April 03, 2009

repick up delphi

Have not use the delphi language for several years,but now want to pick it up and want to program some useful thing....
the differentce between procedure and function
function is mainly used in the case it must return a value.Where as a procedure may or may not return a value or may return more than one value using the OUT parameter.