您的位置:首页 > 编程语言 > Delphi

DELPHI 7 学习笔记

2014-06-11 14:33 260 查看
[ 2013-05-13 ]

【字符串操作】

AnsiStartsText('DATA ', strCommand) —— 如果字符以此打头,需引用 StrUtils

SameText(strCommand, 'QUIT') —— 判断两个字符相同

s:='0001000200030004';

s1:= LeftStr(s,4); //结果为0001

s2:= RightStr(s,4);//结果为0004

LeftStr / RightStr 只对英文有效,中文需当成两个字节,所以中文不能用,需要加WideString

1,LeftStr(Str,2)=He;//从Str字符串变量的最左边(第一个字符包括第一个字符)开始截取2个字符;

2,RightStr(Str,2)=ld;//从Str字符串变量的最右边(第一个字符包括第一个字符)开始截取2个字符;

3,MidStr(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串;

另外有一个函数Copy

4,Copy(Str,2,2)=el;//从Str字符串变量的中第2个字符开始取长度为2个字符的字符串;(类似于MidStr);

a := trim('DATA sdasd大家好');

b := Rightstr(a, Length(WideString(a))-5 );

第一个参数为要进行处理的字符串,第二个参数为从何处开始删除,第三个参数为删除的字符个数。

S := 'I Like Reading CPCW.';

Delete(S, 16, 1); // 代码将删除S变量中的“C”字符

【ListBox操作】

ListBox1.Items.Add('服务器启动成功!') —— 添加一行内容

[ 2013-05-19 ]

报错:access violation at address 004d76f1 in module 'ys.exe'.read of address 00000004

解决:这个错误往往是你的指针没有初始化,或者已经被释放以后,再调用其指向的内容或者对象造成的。

[ 2013-05-31 ]

1.Insert INTO Select语句

语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。

Sample:

insert into TBL_QUESTION_RT(PROJID, EXAMID, SECTIONID, QUESID, EXAMINEEID, QUESANSWER, EXAMINEEANSWER, QUESSCORE, EXAMINEESCORE, SEQUENCEID, ISMARK )

Select PROJID, "'+ExamineeObj.ExamID+'" as EXAMID , SECTIONID, QUESID, "'+ ExamineeObj.ExamineeID +'" as EXAMINEEID, QUESANSWER, "" as EXAMINEEANSWER, QUESSCORE, 0 as EXAMINEESCORE, SEQUENCEID, "0" as ISMARK

from TBL_QUESTION

insert into TBL_QUESTION_RT(PROJID, EXAMID, SECTIONID, QUESID, EXAMINEEID, QUESANSWER, EXAMINEEANSWER, QUESSCORE, EXAMINEESCORE, SEQUENCEID, ISMARK )

Select "P1006" as PROJID, "P1006E01" as EXAMID , SECTIONID, QUESID, "C100009" as EXAMINEEID, QUESANSWER, "" as EXAMINEEANSWER, QUESSCORE, 0 as EXAMINEESCORE, SEQUENCEID, "0" as ISMARK

from TBL_QUESTION

2.Select INTO FROM语句

语句形式为:Select vale1, value2 into Table2 from Table1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。

两者区别:

insert into 下,是将选择好的结果集一个一个插入一个已存在的表内。

   select * into 是将一个选择出来的结果集保存到一个即将创建的表内。

[ 2013-06-05 ]

MessageBox使用指南

1、函数原型及参数

function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;

hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。

Text:欲显示的信息字符串。

Caption:对话框标题字符串。

Type:对话框类型常量。

该函数的返回值为整数,用于对话框按钮的识别。

2、类型常量

对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。

(1)按钮组合常量

MB_OK = $00000000;         //一个确定按钮

MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮

MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮

MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮

MB_YESNO = $00000004;        //一个是按钮,一个否按钮

MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮

(2)缺省按钮常量

MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮

MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮

MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮

MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮

(3)图标常量

MB_ICONHAND = $00000010;        //“×”号图标

MB_ICONQUESTION = $00000020;      //“?”号图标

MB_ICONEXCLAMATION = $00000030;    //“!”号图标

MB_ICONASTERISK = $00000040;      //“i”图标

MB_USERICON = $00000080;        //用户图标

MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标

MB_IConERROR = MB_ICONHAND;      //“×”号图标

MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标

MB_ICONSTOP = MB_ICONHAND;       //“×”号图标

(4)运行模式常量

MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序

MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作

MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序

MB_HELP = $00004000;       //Help Button

3、函数返回值

0            //对话框建立失败

idOk = 1        //按确定按钮

idCancel = 2      //按取消按钮

idAbout = 3       //按异常终止按钮

idRetry = 4       //按重试按钮

idIgnore = 5      //按忽略按钮

idYes = 6        //按是按钮

idNo = 7        //按否按钮

MessageBox(Self.Handle, '您确定要删除吗?', '删除确认', MB_YESNO+MB_DEFBUTTON2+MB_ICONQUESTION+MB_SYSTEMMODAL) = 6

[ 2013-06-07 ]

Panel背景颜色设置问题

设置了颜色,但没有起效,解决办法:

答:在设计时,首先把Panel的parentcolor设置为true,然后在设置为false,然后把parengground设置为true,然后在设置为false,这样处理过后Panel在就可以了。

[ 2013-06-13 ]

TList包含对象指针列表。

Tlist用于存储和维护对象列表。TList引入属隆和方法以执行以下操作:

(1)在列表中增加或删除对象。

(2)在列表中重排对象。

(3)在列表中定位和获得对象。

(4)在列表中对对象进行排序。

属性列表

Capacity 标识TList对象维护的指针数组的大小。

Count 表明在列表中使用的项的数量。

Items 列出对象的引用。

List 标识组成Items的指针数组。

方法列表

~TList 删除与TList对象有关的内存。

Add 在列表的末尾插入有关的内存。

Clear 从列表中删除所有项。

Delete 删除Index参数标识的项。

Error 产生EListError异常。

Exchange 交换Items数组中两项的位置。

Expand 增加列表的Capacity。

First 返回Items[0]。

IndexOf 返回Items数组中一指针的索引。

Insert 增加一对象至Items数组中。

Last 返回Items[Count-1]。

Move 在Items数组中改变某一项的位置。

Pack 从Items数组中删除所有的零项。

Remove 从Items数组中删除Items参数的第一个引用。

Sort 在列表中执行QuickSort。

TList 创建一个新的TList对象。

[ 2013-06-16 ]

SQLServer语句中字符需要单引号,但DELPHI也是单引号,所以在DELPHI中需要用两个单引号表示单引号。

[文件操作:]

MEMO内容写入文件:Memo1.Lines.SaveToFile(FormatDateTime('yyyy-mm-dd-hh时mm分ss秒',Now) + '.txt');

procedure TForm1.Button1Click(Sender: TObject);

var

saveedit:TStringList;

begin

saveedit := Tstringlist.Create;

saveedit.Text := edit1.Text;

saveedit.SaveToFile(ExtractFilePath(Application.ExeName)+'自己想要的文件名.txt');

saveedit.Free;

end;

const

cnsFilename='c:\1.txt';

var

F:Text;// 以文本的形式,也可以以其他形式。

begin

AssignFile(F,cnsFilename);

try

if FileExists(cnsFilename) then

Append(F)

else

Rewrite(F);

Writeln(F,'hellow world.');

finally

CloseFile(F);

end;

end;

[ 2013-06-17 ]

ListView有个属性叫 RowSelect,设为true,则列表可选定高亮。

[ 2013-06-19 ]

InputBox 是调用了 InputQuery, InputQuery 是通过一个 var 参数获取新字串:

var str: string;

begin

InputQuery('输入窗口标题', '输入提示', str);

ShowMessage(str); //显示输入的内容

end;

theIP := Inputbox('修改考试机','请修改选定的考试机IP:', ListView1.Selected.SubItems[0]);

[ 2013-06-21 ]

关于 ClientDataSet1 的用法

移动

第一个 ClientDataSet1.First

上一个 ClientDataSet1.Prior

下一个 ClientDataSet1.Next

最后一个 ClientDataSet1.Last

定位

ClientDataSet1.FindKey('键值');

ClientDataSet1.Locate(字段,值,选项)

....

插入

ClientDataSet1.Insert

编辑

ClientDataSet1.Edit

删除

ClientDataSet1.Delete

取值

Edit1.Text:=ClientDataSet1.FieldByName('字段名').Asstring

赋值

ClientDataSet1.FieldByName('字段名').Asstring:='字符串'

也可以用其他的方法

ADOQUERY和ADOTABLE一样

与TTable、TQuery一样,TClientDataSet也是从TDataSet继承下来的,它通常用于多层体系结构的客户端。 TClientDataSet最大的特点是它不依赖于BDE(Borland Database Engine),但它需要一个动态链接库的支持,这个动态链接库叫DBCLIENT.DLL。在客户端,也不需要用TDatabase构件,因为客户端并 不直接连接数据库。

由于TClientDataSet是从TDataSet继承下来的,所以,它支持诸如编辑、搜索、浏览、纠错、过滤等功 能。由于TClientDataSet在内存中建立了数据的本地副本,上述操作的执行速度很快。也正是由于TClientDataSet并不直接连接数据 库,因此,客户程序必须提供获取数据的机制。在Delphi 4中,TClientDataSet有三种途径获取数据:

.从文件中存取数据。

.从本地的另一个数据集中获取数据。

.通过IProvider接口从远程数据库服务器获取数据。

在一个客户程序中,可以同时运用上述三种机制获取数据。

你可以拖一个TDataSetProvider控件,然后将查询到TADOQuery控件中的数据通过TDataSetProvider控件加载到数据集中。

qry3.SQL.Text:=sql;

qry3.Open;

DataSetProvider2.DataSet:=qry3;

Mem1.Data:=DataSetProvider2.Data;

sql是sql语句,qry3是TADOQuery控件名,DataSetProvider2是TDataSetProvider控件名,Mem1是数据集名

************ 动态ADO ************

//自动调整服务器路径

AppPath := ExtractFilePath(Application.ExeName);

CopyFile(PAnsiChar(AppPath+'db\ATS_EXAM.dat'),PAnsiChar(AppPath+'db\ATS_'+GlobalItem.ExamId+'.dat'),True);

DataModule1.ADOConnection1.Connected:=false;

DataModule1.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+AppPath+'DB\ATS_'+GlobalItem.ExamId+'.dat;Persist Security Info=False';

DataModule1.ADOConnection1.Connected:=true;

************ 两边加单引号 ************

给字符串两边加单引号并返回.

声明:function QuotedStr(const S: string): string;

************ 文件COPY ************

CopyFile(PAnsiChar(UC_Var.AppPath+'Data\'+UC_Const.ExamFile_Template),PAnsiChar(UC_Var.AppPath+'Data\'+ExamId+'.mdb'),True);

[ 2013-06-24 ]

在操作MDB数据库时,不能用MEMO作为字段名,因为这是保留字

[ 2013-07-01 ]

将一个数组打乱顺序,即乱序的算法如下(又叫洗牌算法):

Array20 : array[1..20] of String;

//初始化数组

procedure TForm1.InitValue();

var

i : integer;

begin

for i:=1 to 20 do

begin

Array20[i] := inttostr(i);

end;

end;

//随机得到新数组

procedure TForm1.tmprandom();

var

i,j : integer;

swp:string;

begin

randomize;

for i:=1 to 20 do

begin

j := 1 + random(20);

swp := Array20[i];

Array20[i] := Array20[j];

Array20[j] := swp;

end;

end;

[ 2013-07-07 ]

显示布尔型的值: IntToStr(Ord(LblA.AutoSize))

[ 2013-07-13 ]

显示当前时间: Label3.Caption := FormatDateTime('yyyy-MM-dd hh:nn:ss',Now());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: