delphi

实验一Delphi的基础知识2学时

一.实验目的

了解并熟悉Delphi集成开发环境及相关语言基础,了解项目建立的基本过程.二.实验内容

编写一程序,实现两数相加的计算功能,并要求在输入数据时,改变输入框的背景以及字体颜色,鼠标离开输入框时,背景颜色和字体颜色恢复.

三.实验步骤

1.建立窗口.

调整窗口的大小以及标题文本.在窗体对象的Caption属性上更改为"两数相加".2.设计用户简单界面,并设置对象的属性.

在窗口上添加三个Edit组件,三个 Label组件以及两个Button组件.分别设置三个Label组件的Caption属性为"A=","B=","A+B=";三个Edit组件的Text属性为空,设置两个Button组件的Caption属性为"相加","退出".

3.编写单件处理程序.

(1)改变文本框的字体及背景颜色

光标进入本本框对象时,会产生OnEnter事件(事件处理程序的名称为Edit1E

nter,即对象名称加上OnEnter的Enter部分),单击对象查看器的Events标签,双

击OnEnter事件,在事件处理程序中加入当光标进入文本框时背景为红色,而字体

为白色的程序代码,

Edit1.Color :=clRed;

Edit1.Font.Color :=clWhite;

( 2 )恢复文本框的字体及背景颜色

当用户按下Tab键离开本本框时,Edit1对象将产生OnExit事件,因此在OnE

xit事件处理程序中加入光标离开文本框时将背景颜色设为白色,并将字体颜色设

置为黑色的程序代码,

Edit1.Color :=clWhite;

Edit1.Font.Color :=clBlack;

(3)编写两数相加(相加)按钮的程序代码

按下"相加"按钮将触发按钮的OnClick事件,双击该按钮,并在OnClick

事件中编写程序代码.

Var

X,Y,S : integer;

Begin

X:=StrtoInt(Edit1.Text);

Y:=StrtoInt(Edit2.Text);

S:=X+Y;

Edit3.Text:= InttoStr(S);

End;

(4)编写退出按钮的程序代码

双击该按钮,并在OnClick事件处理程序中加入Close命令.4.保存项目.

5.执行并测试.

实验二顺序结构4学时

一.实验目的

通过该实验课的基本训练,使学生能够熟悉有关控件的使用,掌握控件的属性、事件以及方法的使用,能设计用户简单界面.

二.实验内容

1.设计一道单选题,已知晓答案,要求运用控件,设计简单界面,编写一段程序实现.2.设计窗口,对词汇进行管理.如增加、删除词汇,并在词汇输入时可以选择的更改

字体的颜色.

三.实验步骤

1.建立窗口.

2.设计用户简单界面,第一题的界面有多种设计方案.设置好对象属性后,编写单元处理程序.

如单选题: 李白是那个朝代的人物?

A:唐朝B:汉朝C:春秋D:宋朝

界面设置不同,代码编写不同,这里是用RadioGroup组件设计的界面:

procedure TForm1.FormCreate(Sender: TObject);

//双击窗口,进入FormCreate事件,即初始化.在这里设置四个单选项.这段代码可以省略,直接在RadioGroup1的Items属性输入四个选项即可,也可用这段代码编写. begin

RadioGroup1.Items.Add(' A:唐朝');

RadioGroup1.Items.Add(' B:汉朝');

RadioGroup1.Items.Add(' C:春秋');

RadioGroup1.Items.Add(' D:宋朝');

RadioGroup1.ItemIndex:=-1;

end;

界面设计后,程序代码有2种:

第一种:

procedure TForm1.RadioGroup1Click(Sender: TObject);

//双击RadioGroup1,进入Click事件,即鼠标单击响应事件,进行判断

begin

if

RadioGroup1.Items[ RadioGroup1.ItemIndex]=' A:唐朝'

then

Label1.caption:='正确!';

if

RadioGroup1.Items[ RadioGroup1.ItemIndex]<>' A:唐朝'

then

Label1.caption:='错误,请重新选择!';

end;

第二种:

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

case RadioGroup1.ItemIndex of

0: Label1.caption:='正确!';

1: Label1.caption:='错误,请重新选择! ';

2: Label1.caption:='错误,请重新选择!';

3: Label1.caption:='错误,请重新选择!';

end;

end;

这里的界面是用4个radiobutton按纽,一个label,一个Button加一个GroupBox组件构成.

方法一:

procedure TForm1.Button1Click(Sender: TObject);

//注意,这里不能双击GroupBox 进行代码编写,因为radiobutton按纽虽然在GroupBox组件里,但是点击radiobutton按纽并不能激发GroupBox组件的onClick事件,相当于radiobutton 按纽把GroupBox组件的某一部分屏蔽掉了,鼠标进行选择时, GroupBox组件没有任何响应. begin

if radiobutton1.Checked

then label1.Caption:='正确!';

if radiobutton2.Checked

then label1.Caption:='错误,请重新选择!';

if radiobutton3.Checked

then label1.Caption:='错误,请重新选择!';

if radiobutton4.Checked

then label1.Caption:='错误,请重新选择!';

end;

方法二:

procedure TForm1.Button1Click(Sender: TObject);

begin

if radiobutton2.Checked or radiobutton3.Checked or radiobutton4.Checked

then label1.Caption:='错误,请重新选择!'

else

label1.Caption:='正确';

end;

3.保存好项目.

4.执行并进行测试.

第二题的词语管理器的界面设置,举例如下:

添加label1,label2,edit1,listbox1,button1, button2, button3,设置label1,label2的caption属性为词汇输入,词汇表,设置edit1的text 是空,设置button1, button2的caption属性为增加词汇,删除词汇,退出.最后设置listbox1的Items属性,双击后输入词汇,按OK键完成.

双击button1,程序:

procedure TForm1.Button1Click(Sender: TObject);

begin

listbox1.Items.Add(edit1.text);

end;

双击button2,程序:

procedure TForm1.Button2Click(Sender: TObject);

begin

if

listbox1.Items.count=0

then

showmessage('无词汇可删除')

else

listbox1.Items.delete(listbox1.ItemIndex);

end;

双击button3,程序:

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

同时,要使选中的词汇能在编辑框edit1里显示出来,双击listbox,激发Onclick事件,如: procedure TForm1.ListBox1Click(Sender: TObject);

begin

edit1.Text:=listbox1.Items[listbox1.ItemIndex];

end;

字体颜色的改变自己编程,就跟上面的单选按钮一样编程。可以参照第一题完成。置RadioGroup组件,在它的Items属性输入颜色选项:

A.红色

B.灰色

C.蓝色

D.黄色

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

case RadioGroup1.ItemIndex of

0: edit1.Font.Color:= clred;

1: edit1.Font.Color:= clGray;

2: edit1.Font.Color:= clblue;

3: edit1.Font.Color:= clyellow;

end;

保存项目并进行执行测试.

实验三选择结构4学时

一、实验目的

熟悉有关非可视控件的属性、事件以及方法的使用,学会使用分支语句实现程序的流程控制编写程序.

二、实验内容

1.编写一程序,输入年份,判断是否是闰年.闰年的条件是满足以下条件之一: (1)能被4整除,但不能被100整除的分份;

(2)能被100整除,也能被400整除的分份.

2.设置一菜单界面,要求有文件的保存、打开、退出,并包括对编辑组件的复制、粘贴、清除、全选、剪切的命令.

三.实验步骤

(1)判断是否闰年

界面设计:四个组件,两个文本框Label1和Label2,分别显示提示和结果信息;一个Edit组件Edit1,用来输入要进行判断的年份;一个Botton组件Botton1,用来查询结果.

在Botton1的OnClick事件中编写代码如下:

Var

Year : Integer;

Falg: Boolean;

Begin

Year:= StrtoInt(Edit1.text);//将字符串转变成整型

IF year mod 4=0 then

Begin

if year mod 100=0 then

begin

if year mod 400=0 then

falg:=true;

else

falg:=false;

end

else

falg:=true;

end

else

falg:=false;

if falg then

Label2.Caption:= ‘该年份是闰年’;

else

Label2.Caption:= ‘该年份不是闰年’;

end;

保存项目并进行执行测试.

(2)主菜单设计如下:

在主窗体上放置一个MainMenu组件,它是一个不可见组件,不必关心它在窗体上的位置。双击MainMenu组件或者单击MainMenu组件的Itmes属性右边的小按纽,打开菜单设计器。向里面添加菜单项,并设计菜单项的加速键和快捷键。加速键设计是在该菜单项的Caption属性上增加(&某个加速键),快捷键则是选择ShortCut属性设置菜单的快捷键。Delphi允许我们任意设置,但是我们应该遵循一些常用的习惯。如Alt+F表示文件菜单,Alt+E表示编辑菜单,而快捷键Crtl+V表示粘贴,Crtl+C表示复制等。

设计好主菜单后,将Dialogs页上的OpenDialog、SaveDialog组件放置在主窗体上,该两组件属于对话框组件,都是不可视控件,在程序运行时不会自动显示其对话框,而需要用户编写一些代码来显示。两个对话框的显示方式均相同,都是使用Execute方法。Execute 方法的返回值为布尔值,当用户单击对话框中的OK按钮时,返回True;单击对话框中的Cancel按钮时,返回False。用户可根据返回值的不同转去执行不同的事件处理过程。

最后放置Memo组件,它支持剪贴板操作的多种方法:opyToClipboard、PasteFromClipboard等。

编写代码如下:N1、N2、N3、N4、N5、N6、N7、N8、N9、N10分别表示文件、打开、保存、退出、编辑、复制、粘贴、清除,全选、剪切。

procedure TForm1.N2Click(Sender: TObject);

begin

openDialog1.Execute;

end;

procedure TForm1.N3Click(Sender: TObject); begin

saveDialog1.Execute;

end;

procedure TForm1.N4Click(Sender: TObject); begin

close;

end;

procedure TForm1.N6Click(Sender: TObject); begin

memo1.CopyToClipboard;

end;

procedure TForm1.N7Click(Sender: TObject); begin

memo1.PasteFromClipboard;

end;

procedure TForm1.N8Click(Sender: TObject); begin

memo1.ClearSelection;

end;

procedure TForm1.N9Click(Sender: TObject); begin

memo1.SelectAll;

end;

procedure TForm1.N10Click(Sender: TObject); begin

memo1.CutToClipboard;

end;

保存项目并进行执行测试.

实验四循环结构4学时

一、实验目的

综合使用已学知识编写较复杂程序,结合所学知识进行图形图象编程和文件管理。

二、实验内容

1.编写程序,用三种循环语句求100之内所有奇数之和。

2.设计下拉菜单,完成打开、保存图片功能,并实现图片的动态演示。

三.实验步骤

1.求1--100的奇数累加和。

设计界面,在窗体上放入一个b u t t o n组件和e d i t组件,在b u t t o n组件的O n C l i c k事件中编写代码如下:

V a r//w h i l e循环

s,i:I n t e g e r;

i:=1;

s:=0;

w h i l e i<=100d o

b e g i n

s:=s+i;

i:=i+2;

e n d;

v a r//r e p e a t循环

s,i:I n t e g e r;

i:=1;

s:=0;

r e p e a t

s:=s+i;

i:=i+2;

u n t i l i>100;

?c o n t i n u e语句用在循环体中,其作用是强行结束本次循环,转入循环开始处,开始执行下一次循环操作。

?v a r//f o r循环

?i,s:I n t e g e r;

?s=0;

?b e g i n

?f o r i:=1t o100d o

?b e g i n

?i f i m o d2=0t h e n c o n t i n u e;//如果为空,跳过剩余语句,转到下一个循环?s:=s+i;

?e n d;

?e n d;

(2)设计图象文件的下拉菜单,实现图象文件的打开、保存功能。

Image控件――位于组件板Additional上,用以在窗体上显示图象,它在设计时是一个虚框,运行时时虚框是不可见的.它具有重要的属性是Picture属性,用于保存要显示的图象.

跟文本文件打开、保存类似,首先在组件板Standard选项卡中选取Popupmenu组件,添加到窗体中,然后双击该组件,打开菜单设计器。具体过程与主菜单完成相同。

然后向窗体添加OpenPictureDialog、SavePictureDialog组件、Image控件。把Image控件的属性Popupmenu上选择刚设计的Popupmenu组件的名称。这样,Image控件就有了下拉菜单,分别在下拉菜单的打开、保存选项中编写程序如下:

OpenPictureDialog1.Execute;

image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

Save PictureDialog1.Execute;

image1.PictureSaveToFile(SavePictureDialog1.FileName);

(3)实现动画

Timer为定时器对象,可指定莫一特定时间间隔产生定时器时间,例如每秒产生一个定时器事件.我们可以利用定时器每秒触发一次的OnTimer事件的特性,使用DecodeTime函数获取系统时间,利用图象控件实现动画效果.

用多个image控件中分别放置不同的图象(按顺序由小到大),快速地在同一个位置顺序显示,以达到动态感的效果.

设计时首先将image1控件放在居中位置,其余image控件位置可任意安排,在image 控件的Picture属性中依次装入图象文件,将image1控件的Visible属性设置为Ture,其他image控件的Visible属性都为Flase.

用Tmier控件来定时显示图象.添加Tmier控件,在其OnTimer事件响应大妈段中输入以下代码.(是按当前时间秒的个位数来调用显示响应图象文件的)

编程如下:

procedure TForm1.Timer1Timer(Sender: TObject);

var

i:integer;

hour,min,sec,msec:word;

begin

DecodeTime(now,hour,min,sec,msec);

i:=sec;

while i> n do // n表示任意一个数,即设计几个image控件。

begin

i:=i-n;

case i of

0: image1.Picture:=image1.Picture;

1: image1.Picture:=image2.Picture;

......

n: image1.Picture:=image n.Picture;

end;

end;

end;

保存项目并进行执行测试.

实验五数据库有关控件4学时

一、实验目的

结合数据库理论知识,学习数据库相关控件,熟悉掌握其属性、事件及方法。

二、实验内容

通过对某班同学各科成绩统计数据库表的操作,实现以下功能:

1.输入学生姓名,获取该同学总成绩,以及不及格科目;

2.各门课程的不及格人数,并显示该科所有不及格学生的情况(该学生其他课程分数)。三.实验步骤

1.用access设计一数据库表1,如图所示,并定义好各数据项的数据类型。

ID:自动编号;

姓名:文本;

语文、数学、英语:数字;

2.加入ADOTable组件、DataSource组件、DBGrid组件,并设置属性。

ADOTable 组件是用来连接数据库的,选取它的ConnectionString属性项,在弹出的ConnectionString对话框选择好刚保存好的表1的路径,测试连接,成功后设置完毕。接着设置TableName属性,选取对应数据库文件中的表(该实验只有一个数据库表,即为表1)。为了让设计阶段能在其他具有数据干支能力的数据库组件(DBGrid组件)中看见数据库文件中的数据,必须将ADOTable组件的Active属性改为Ture。

DataSource组件用来操作数据库文件内的字段数据,设置它的DateSet属性指定为ADOTable1。

DBGrid组件的DateSource属性指定为DataSource1。

3.加入label1. label2. label3. label4. label5,分别设置它们的caption属性为姓名、总分、不及格科目、科目、该科目不及格人数,加入edit1. edit2. edit3. edit4,设置text属性为空,添加两个Button组件,设置它们的caption属性为查看。并添入combobox组件,设置它的itsm属性为数据库表中的各科科目。

4. 编写代码如下:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,d:integer;

begin

if

ADOtable1.Locate('姓名',Edit1.Text,[ ]) //对'姓名'项的字段数据进行匹配查找

then

begin

a:=ADOTable1.Fields[2].asinteger; //取得语文成绩

b:=ADOTable1.Fields[3].asinteger; //取得数学成绩

c:=ADOTable1.Fields[4].asinteger; //取得英语成绩

edit2.Text:=inttostr(a+b+c);

end

else

showmessage('找不到该学生记录!');

if a<60 then d:=0;

if b<60 then d:=1;

if c<60 then d:=2;

if (a<60) and( b<60) then d:=3;

if (a<60 )and( c<60) then d:=4;

if (b<60) and( c<60) then d:=5;

if (a<60 )and ( b<60) and (c<60) then d:=6;

case d of

0:edit3.text:='语文';

1: edit3.text:='数学';

2: edit3.text:='英语';

3: edit3.text:='语文+数学';

4: edit3.text:='语文+英语';

5: edit3.text:='数学+英语';

6: edit3.text:='语文+数学+英语';

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var i:integer;

begin

ADOTable1.First; //从最顶处开始查询

i:=0;

while not ADOTable1.Eof do

begin

if

ADOTable1[combobox1.text] <60 //该科目成绩小于60 then

i:=i+1;

ADOTable1.next;

end;

edit4.text:=inttostr(i);

end;

将ADOTable1的Filtered属性设为True,在OnFilterRecord事件中编写如下代码:

procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;

var Accept: Boolean);

begin

accept:=adotable1[combobox1.text]<60; //显示各科成绩小于60的记录

end;

end.

5. 保存项目并进行执行测试.

实验六 SQL语言(设计性) 4学时一、实验目的

在掌握Delphi有关控件的属性、事件及方法的使用前提下,学生能够学会常用数据库操作,初步具备数据库实验基本知识,结合SQL语言,进行数据库查询、统计汇总等操作,并具备初步的数据处理及分析能力。

二、实验内容与基本要求

使用有关数据库控件,熟悉掌握其属性、事件及方法,掌握SQL语言及相关控件进行综合编程。内容如下:

通过对某班同学各科成绩统计数据库表的操作,实现:

1.通过输入的姓名或学号找到相应的记录,找不到时报错;

2.可以自由的增加、删除记录;

3.把每个学生的总分算出并显示;

4.将各科成绩按成绩高低排序显示。

三.实验步骤

1.用access设计一数据库表1,如图所示,并定义好各数据项的数据类型。

ID:自动编号;

姓名:文本;

学号、数学、英语、语文:数字;

2.加入AdoQuery组件、DataSource组件、DBGrid组件,并设置属性。

单击AdoQuery的ConnectionString属性项,在弹出的ConnectionString对话框选择好刚保存好的表1的路径,测试连接,成功后设置完毕。接着设置SQL属性,输入SQL 代码:select * from 表1,最后将AdoQuery组件的Active属性改为Ture。

DataSource组件用来操作数据库文件内的字段数据,设置它的DateSet属性指定为AdoQuery1。

DBGrid组件的DateSource属性指定为DataSource1。

3.加入label1. label2. label3,分别设置它们的caption属性为姓名、学号、科目,加入edit1,

设置text属性为空,添加四个Button组件,分别设置它们的caption属性为添加、删除、总分、排序,最后加入三个combobox,分别在它们的itsm属性中加入数据表中的姓名、学号、科目,并可随意增加几条数据表中没有的记录。

4.编写代码如下:

在ComboBox1的On Change事件中编写://按姓名查找特定记录

procedure https://www.360docs.net/doc/a7609906.html,boBox1Change(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('select * from 表1 where 姓名="'+ComboBox1.text+'"');

adoquery1.open;

if ComboBox1.text<> adoquery1['姓名']

then

showmessage('找不到该学生!') ;

end;

在ComboBox2的On Change事件中编写://按学号查找特定记录

procedure https://www.360docs.net/doc/a7609906.html,boBox1Change(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('select * from 表1 where 学号="'+ComboBox2.text+'"'); adoquery1.open;

if ComboBox2.text<> adoquery1['学号']

then

showmessage('该学号不存在!') ;

end;

在Button1的OnClick事件中编写://增加记录

procedure TForm1.Button1Click(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('insert into 表1 values ('+edit1.text+')');

adoquery1.open;

end;

在Button2的OnClick事件中编写://删除指定记录

procedure TForm1.Button2Click(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('Delete from 表1 where 学号='+ ComboBox2.text);

//删除学号等于ComboBox2中选定项的记录

在这里,也可以根据姓名删除,则为:

adoquery1.sql.add('Delete from 表1 where 姓名='+ ComboBox1.text);

还可以根据学科分数判断删除,如删除某学科小于60的记录:adoquery1.sql.add('Delete from 表1 where '+ ComboBox3.text+'<60 ');

adoquery1.open;

end;

在Button3的OnClick事件中编写:/ /求总分,并显示

procedure TForm1.Button3Click(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('select *,英语,语文+数学+英语AS 总分from 表1'); adoquery1.open;

end;

在Button4的OnClick事件中编写:/ /排序

procedure TForm1.Button4Click(Sender: TObject);

begin

adoquery1.Close;

adoquery1.sql.Clear;

adoquery1.sql.add('select * from 表1 order By '+ ComboBox3.text+' desc');

/ /在ComboBox3中选择某门科目进行从高到低分数排列

adoquery1.open;

end;

5. 保存项目并进行执行测试.

实验七数据库综合编程 8学时一、实验目的

掌握Delphi有关控件的属性、事件及方法的使用,掌握常用数据库操作,具备一定的数据处理及分析能力。使用有关数据库控件,在熟悉掌握SQL语言及相关控件后进行综合编程。

二、实验内容与基本要求

根据一个具体的大作业(如某图书管理、学生管理、人事管理等),利用前面所学理论以及相关实验开设内容进行综合编程,能够实现基本的增加、删除、修改、查询、统计汇总等方面功能。

三、实验步骤

1.用access设计一数据库表,如图所示,并定义好各数据项的数据类型。

ID:自动编号;

班级:数字;

所在系别、所学专业、班主任:文本;

ID:自动编号;

班级,学号:数字;

系别、姓名、政治面貌、籍贯、性别、家庭住址、个人简介:文本;

入学时间、出生年月:日期;

ID:自动编号;

姓名:文本;

学号、大学语文、英语、高等数学、日语、数据库、音乐、体育、经济贸易:数字;

2.设置系统登陆界面

新建四个窗体,然后在FORM1窗体上拖入一个Panel组件,然后在上面添加一个Image 组件,使它的虚线框与面板Image组件重合,设置Image组件的picture属性,导入系统背景图片。在面板上依次添加三个Button组件,设置它们的caption属性分别是:进入系统、关于系统、退出系统,依次双击编写代码:

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2. show;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form3.show;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if application.MessageBox('真的退出?','提示',mb_okcancel)=idok then

application.Terminate;

end;

3在Form3窗体上面设计界面,用基本的几个组件显示出系统的名称与设计者即可。

4.在Form2窗体上设计系统主要界面。系统主要分为查找、修改、增加、删除学生记录四个大块,其中查找和删除一个界面,修改一个截面、增加一个界面。

查找界面设计如下:

在窗体中加入一个AdoConnection组件、三个AdoDataSource组件、三个AdoDataSet组件,三个DBGrid组件,并设置属性。

单击AdoConnection1的ConnectionString属性项,在弹出的ConnectionString对话框选择好刚保存好的数据表的路径,测试连接,成功后设置完毕。然后把LoginPrompt 属性值设为Flase,该设置是使数据库不出现登陆对话框。接着将AdoConnection1组件的Connected属性改为Ture。

设置三个AdoDataSet组件的Connection均为AdoConnection1,然后在各自的command text属性里面分别输入select * from 表1、select * from 表2、select * from 表3,然后把Active属性改为Ture。

DataSource组件用来操作数据库文件内的字段数据,设置DataSource1的DateSet 属性指定为AdoDateSet1,DataSource2的DateSet属性指定为AdoDateSet2,DataSource3的DateSet属性指定为AdoDateSet3。

三个DBGrid组件的DateSource属性指定为DataSource1、DataSource2、DataSource3。

3.加入label1. label2. label3,分别设置它们的caption属性为系别、班级、满足条件,加

入edit1,设置text属性为空,添加两个Button组件,分别设置它们的caption属性为查找、删除,最后加入两个combobox,分别在它们的itsm属性中加入数据表1,2中数据项。最后添加一个单选框,itsm属性加入表2的数据项。

procedure TForm1.Button1Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex=-1 then

begin

AdoDataSet1.Close;

https://www.360docs.net/doc/a7609906.html,mandText:='';

https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 1 where 所在系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text;

AdoDataSet1.open ;

end

else

AdoDataSet2.Close;

https://www.360docs.net/doc/a7609906.html,mandText:='';

case RadioGroup1.ItemIndex of

0: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 姓名="'+edit1.text+'"';

1: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 学号='+edit1.text;

2: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 性别='''+edit1.text+'''';

3: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 出生年月='+edit1.text;

4: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 入学时间='+edit1.text;

5: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 政治面貌='''+edit1.text+'''';

6: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 籍贯='''+edit1.text+'''';

7: https://www.360docs.net/doc/a7609906.html,mandText:='select * from 表 2 where 系别="'+ComboBox1.text+'" and 班级='+ComboBox2.text+' and 家庭住址='''+edit1.text+'''';

end;

AdoDataSet2.open ;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if application.MessageBox('确定删除?','提示',mb_okcancel)=idok then

begin

if RadioGroup1.ItemIndex=-1 then

begin

AdoDataSet1.Close;

https://www.360docs.net/doc/a7609906.html,mandText:='';

【外挂制作】程序多开原理记录

程序多开原理记录 windows系统下,程序防止多开的几种常见方法: 1)使用FindWindow API函数。 通过查找窗口标题(或/和类名)来判断程序是否正在运行。如果找到了,表明程序正在运行,这时可退出程序,达到不重复运行的效果;反之表明程序是第一次运行。 这种方法不适用于以下情况,程序的标题是动态变化的、系统中运行了相同标题(或/和类名)的程序 2)Mutex/Event/Semaphore 通过互斥对象/信号量/事件等线程同步对象来确定程序是否已经运行。最常用的函数如:CreateMutexA(注意:QQ堂、QQ游戏大厅就是采用这样方法来限制程序多开的) 3)内存映射文件(File Mapping) 通过把程序实例信息放到跨进程的内存映射文件中,也可以控制程序多开。 4)DLL全局共享区 DLL全局共享区在映射到各个进程的地址空间时仅被初始化一次,且是在第一次被windows加载时,所以利用该区数据就能对程序进行多开限制。 5)全局Atom 将某个特定字符串通过GlobalAddAtom加入全局原子表(Global Atom Table),程序运行时检查该串是否存在来限制程序多开。(该Atom不会自动释放,程序退出前必须调用GlobalDeleteAtom 来释放Atom) 6)检查窗口属性 将某些数据通过SetProp加入到指定窗口的property list,程序运行时枚举窗口并检查这些数据是否存在来限制多开。 以上只列举了最常见的几种方法,具体应用中可以有n种选择,或综合运用多种方法来限制。 上面说过,QQT采用CreateMutex函数来限制多开,那么我怎么知道是使用这个函数来限制的呢?

Delphi函数清单

[标准函数和过程] 首部 procedure Abort;$[SysUtils 功能引起放弃的意外处理。 说明不显示任何错误信息。 首部 function Abs(N: ): ;$[System 功能返回参数N的绝对值。 说明函数结果与参数有相同类型,参数可以是整型也可以是浮点型。 ## Abs(-12) = 12;Abs(-12.03) = 12.03 首部 procedure AddExitProc(Proc: TProcedure);$[SysUtils 功能将旧版本某一过程添加到当前版本运行的库的结束过程表中。 说明只能向下兼容,不能用在当前使用版本的 首部 function Addr(X): Pointer;$[System 功能返回指定对象的内存地址。 说明地址运算符 @ 可以产生与Addr相同的结果。 首部 procedure AddTerminateProc(TermProc: TTerminateProc);$[SysUtils 功能将一过程添加到运行时库的终止过程表中。 说明 Delphi 在程序结束时将终止该程序的全部进程,可以终止的进程都放在终止过程表中,程序通过结束终止过程表所有的进程来实现终止全部进程的目的。 首部 function AdjustLineBreaks(const S: string): string;$[SysUtils 功能将给定字符串的行分隔符调整为Cr/Lf序列。 说明 首部 function AllocMem(Size: Cardinal): Pointer;$[SysUtils 功能在堆栈上分配给定大小为 Size字节的块,即在内存里开辟Size 大小的空间。 说明 Cardinal 0..4294967295 32位无符号整数 首部 function AnsiCompareFileName(const S1, S2: string): Integer;$[SysUtils 功能比较两个文件名的大小。不区分大小写。 说明条件返回值 S1 > S2 | > 0 S1 < S2 | < 0 S1 = S2 | = 0 首部 function AnsiCompareStr(const S1, S2: string): Integer;$[SysUtils 功能比较两个字符串的大小。要区分大小写。 说明参见AnsiCompareFileName。 首部 function AnsiCompareText(const S1, S2: string): Integer;$[SysUtils 功能返回两个字符串是否相同的状态。不区分大小写。 说明参见AnsiCompareFileName。 首部 function AnsiExtractQuotedStr(var Src: PChar; Quote: Char):string;$[SysUtils 功能将引用字串转换成结束引语返回。 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiLastChar(const S: string): PChar;$[SysUtils 功能取参数S的最后一个字符,并转换成以null结束的字符串指针返回。 说明 ##AnsiLastChar(‘Sysoft’) = {‘t\0’}; 首部 function AnsiLowerCase(const S: string): string;$[SysUtils 功能将字符串S转换为小写返回。 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiLowerCaseFileName(const S: string): string;$[SysUtils 功能将文件名S转换成小写返回 说明函数支持多字节字符系统[MBCS]。 首部 function AnsiPos(const Substr, S: string): Integer; $[SysUtils 功能返回子串Substr出现在主串S中的第一个位置。 说明 首部 function AnsiQuotedStr(const S: string; Quote: Char): string; $[SysUtils 功能返回引用字串的译文 说明 首部 function AnsiStrComp(S1, S2: PChar): Integer; $[SysUtils 功能比较两个指针字符串的大小。要区分大小写。 说明参见AnsiCompareFileName。

delphi合并流文件

unit Unit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls; type TForm1=class(TForm) Button1:TButton; Button2:TButton; procedure FormCreate(Sender:TObject); procedure FormDestroy(Sender:TObject); procedure Button1Click(Sender:TObject); procedure Button2Click(Sender:TObject); end; var Form1:TForm1; implementation {$R*.dfm} uses MMSystem; {合并两个Wav文件流的函数} function ConWavStream(AWavStream1,AWavStream2:TStream;var ANewStream:TStream):Boolean; type TWavFormat=packed record ChunkID:array[0..3]of AnsiChar;{'RIFF'} ChunkSize:Longword;{size-8} Format:array[0..3]of AnsiChar;{'WAVE'} SubChunk1ID:array[0..3]of AnsiChar;{'fmt'} SubChunk1Size:Longword;{hex10} AudioFormat:Word;{hex01} NumOfChannels:Word;{1mono,2stereo} SampleRate:Longword;{number of samples/sec} ByteRate:Longword;{samplerate*num of channels*bytes per(mono)sample} BytesperSample:Word;{size of(mono)sample} BitsPerSample:Word;{BytesperSample*8} SubChunk2ID:array[0..3]of AnsiChar;{'data'} SubChunk2Size:Longword;{number of data bytes} end;

Delphi如何使用基本的绘图函数绘制统计图

一个windows自带的画图工具是无论如何也不能满足我们的画图需要的,很多效果都需要我们在另外的工具中来实现。这些高级的功能是如何实现的呢,如何操纵一些基本的属性和函数,让它们最终能作出我们想要的效果呢?这里我们以绘制统计图来说明这些问题。 解决思路―― 这里,我们暂且先撇开具体的问题,综合地一下讨论画图的问题。 画图工具是基本元素的具体实现,对于我们初学者来说,还是有很好的参考价值的,在delphi 5中有一个自带的工程例子“……Borland\Delphi5\Demos\Doc\Graphex”,这个例子可以实现一些基本的绘图功能。对这个例子多加修改,一定会有所收获的。这里就不列出它的详细代码了,有心的读者可以自己找到这个例子。我这里只是想综合地讨论这方面的问题。使用DELPHI编写绘图软件的灵魂就在于操作画布,画笔和刷子,尽可能地挖掘它们的属性和相关参数的设置。 (一)画布 画布,画笔和刷子之间的关系很明了.其实,画笔和刷子都是画布的一个属性.而画布也只是TForm,TImage,TShape等组件对象的一个属性,专门负责与图象相关的信息打交道.它的主要作用可以概括如下几点: 1.指定使用画笔,刷子和字体的使用类型; 2.绘制和填充指定形状的线或图形; 3.修饰和改变图象; 画布的主要属性有: Brush--指定填充图形和背景的样式 CanvasOrientation--指定画布的定位类型,有coLeftToRight, coRightToLeft两个属性; ClipRect--指定剪切矩形的边界; CopyMode--指定图形图象的复制模式; Font--指定画布上使用的字体; Handle--为画布指定窗口GDI对象的设备描述表; LockCount--指定画布被别的线程锁定的次数; Pen--指定画布上使用的画笔,具体见下面描述; PenPos--指定画笔当前的位置; Pixels--指定当前剪切矩形的象素颜色; TextFlags--指定字体在画布上的显示方式,有ETO_CLIPPED,ETO_OPAQUE,ETO_RTLREADING,ETO_GL YPH_INDEX,ETO_IGNORELANGUAGE,ETO_NUMERICSLOCALETO_NUMERIC SLATIN等值可选; 画布相关的API函数及其注释如下: Arc--按指定方式画一条弧; BrushCopy--把位图复制到指定的画布的矩形中,用画布刷子颜色替换位图的颜色; Chord--按指定方式画弦; CopyRect--从一个矩形区域复制部分图象到另一个矩形区域; Draw--用指定参数在指定位置画图; DrawFocusRect--按指定焦点风格,通过异或操作来绘制一焦点矩形; Ellipse--按指定参数画一椭圆; FillRect--按指定的刷子填充一矩形; FloodFill--使用当前选定的刷子填充指定设备描述表中的一块区域;

Delphi调用WebService的实例(非常经典)

Delphi 调用webservice 经典实例 Dispatch: 派遣,分派 Invoke: 调用 Invokable: 可调用接口 TReomtable: WebService中自定义类都是继承自该类 TSOAPAttachment: Attachment:附件,一种流类型,可以返回流数据 CGI:(EXE) ISAPI:(DLL) Base64编码: uses EncdDecd; s := EncodeString(s); //加 base64 编码 s := DecodeString( str ); //解码 UTF8: UTF8 是8位的UNICODE字符,而ASCII是7位 ,gb2312和unicode是2字节/字,utf8是3字节/字utf8类似以前的8位转7位的编码,是为了在网络间不同系统的通讯方便而作的转换。几乎所有用.Net写的WebService只支持DOC方式、Delphi写的只支持RPC方式;J2ME目前对Web Service的支持仅限于RFC172,而 RFC172要求必须为DOC方式(sun怎么偏袒MS?)! 为了在设计中减少障碍,下面还介绍几个概念。 1) SOAP:SOAP是一种简单有效的数据传输协议,用于分布式网络环境下数据信息交换,它以XML 作为数据传输的格式,搭配Internet上标准的传输协议HTTP、SMTP、TCP等来传送信息。从本质上看,SOAP事实上只是将Request和Response经由XML格式把数据打包,达到双方沟通的目的。 2) WSDL:WSDL(Web Service Description Language)是一种以XML格式描述的Web Service语言,当Web Service Provider 要对外公布提供的 Web Service,就需要通过WSDL来构建描述语言。在WSDL中有两个非常重要的要素::此WSDL文件所要描述的Web Service集合;每一个Port代表外界Client可以和此Service沟通的一个进入点,一个Port会指定一个Binding方式。 3):处理中文乱码的问题: 将HttpRio的 Converter 的 Options 的 soUTF8InHeader 设为 True 将生成soap消息的HTTPSoapDispatcher控件,添加encoding为gb2312 https://www.360docs.net/doc/a7609906.html,eUTF8InHeader := True; 4)在Delphi中,能够传递的自定义类型的对象要继承TRemotable, 5:修正一个服务器端的一个Bug:将ISAPIThreadPool和ISAPIApp的次序变一下:ISAPIApp必须在 ISAPIThreadPool之前: uses ... ISAPIApp, ISAPIThreadPool 解决如下错误: Received content of invalid Content-Type setting:text/html -SOAP"expects"text/xml" 6:"XML document must have a top level element. Line: 0" 错误,我该如何解决??哈纳斯 (2002-08-05 17:26:00) 我也曾碰到同样的问题解决方法是:别设httprio的wsdllocation,设它的url 如http://localhost/mydir/project1.exe/wsdl/IFIRST mydir是你的可执行的虚拟目录,IFIRST是你定义的接口名 ********************************************************************* **************************

delphi数学模块函数、过程大全

function ArcCos(const X : Extended) : Extended; overload; function ArcCos(const X : Double) : Double; overload; function ArcCos(const X : Single) : Single; overload; function ArcSin(const X : Extended) : Extended; overload; function ArcSin(const X : Double) : Double; overload; function ArcSin(const X : Single) : Single; overload; function ArcTan2(const Y, X: Extended): Extended; procedure SinCos(const Theta: Extended; var Sin, Cos: Extended) register; function Tan(const X: Extended): Extended; function Cotan(const X: Extended): Extended; { 1 / tan(X), X <> 0 } function Secant(const X: Extended): Extended; { 1 / cos(X) } function Cosecant(const X: Extended): Extended; { 1 / sin(X) } function Hypot(const X, Y: Extended): Extended; { Sqrt(X**2 + Y**2) } function RadToDeg(const Radians: Extended): Extended; inline; { Degrees := Radians * 180 / PI } function RadToGrad(const Radians: Extended): Extended; inline; { Grads := Radians * 200 / PI } function RadToCycle(const Radians: Extended): Extended; inline; { Cycles := Radians / 2PI } function DegToRad(const Degrees: Extended): Extended; inline; { Radians := Degrees * PI / 180} function DegToGrad(const Degrees: Extended): Extended; function DegToCycle(const Degrees: Extended): Extended; function GradToRad(const Grads: Extended): Extended; inline; { Radians := Grads * PI / 200 } function GradToDeg(const Grads: Extended): Extended; function GradToCycle(const Grads: Extended): Extended; function CycleToRad(const Cycles: Extended): Extended; inline; { Radians := Cycles * 2PI } function CycleToDeg(const Cycles: Extended): Extended; function CycleToGrad(const Cycles: Extended): Extended; { Hyperbolic functions and inverses } function Cot(const X: Extended): Extended; inline; { alias for Cotan } function Sec(const X: Extended): Extended; inline; { alias for Secant } function Csc(const X: Extended): Extended; inline; { alias for Cosecant } function Cosh(const X: Extended): Extended; function Sinh(const X: Extended): Extended; function Tanh(const X: Extended): Extended; function CotH(const X: Extended): Extended; inline; function SecH(const X: Extended): Extended; inline; function CscH(const X: Extended): Extended; inline; function ArcCot(const X: Extended): Extended; { IN: X <> 0 } function ArcSec(const X: Extended): Extended; { IN: X <> 0 } function ArcCsc(const X: Extended): Extended; { IN: X <> 0 } function ArcCosh(const X: Extended): Extended; { IN: X >= 1 } function ArcSinh(const X: Extended): Extended;

DELPHI常用函数说明

一、数据类型转换函数1 在我们编写程序当中,根据不同情况,会使用到多种数据类型。当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。 1.FloatToStr 功能说明:该函数用于将“浮点型”转换成“字符型”。 参考实例: Edit1.Text := FloatToStr(1.981); 2.IntToStr 功能说明:该函数用于将“整数型”转换成“字符型”。 参考实例: S := IntToStr(10);(注:S为String类型变量。) 3.IntToHex 功能说明:该函数用于将“十进制”转换成“十进制”。该函数有二个参数1。第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。 参考实例: Edit1.Text := IntToHex('100', 2);

执行结果,Edit1.Text等于64。 注意:Delphi没有提供专门的“十六进制”转换为“十进制”的函数。使用StrToInt函数可以实现这个功能。具体代码是:I := StrToInt('S\' + '64'); 这时I等于100。加上一个'S\'即可将“十六进制”转换为“十进制”。 4.StrToInt 功能说明:该函数用于将“字符型”转换成“整数型”。 参考实例: I := StrToInt('100'); 注意:不能转换如StrToInt('ab')或StrToInt('好')这样的类型,因为他们并不存在数字型。 5.StrToFloat 功能说明:该函数用于将“字符型”转换成“浮点型”。 参考实例: N := StrToFloat(Edit1.Text); 注意:Edit1.Text中的内容为1.981(凡在Edit 控件中显示的文本均为字符串)。N为Double类型,用于保存转换后的浮点型数据。

现代远程教育技术应用培训资料

现代远程教育技术应用培训(三) 讲稿 培训内容:现代远程教育资源 培训教师:学区全体教职工 培训地点:远程教育教室 主讲人:杨元玲 培训过程: 基于教育部基础教育新课标标准与规范,应用多媒体与网络新技术建设学科基础素材资源库与资源中心,运用直播卫星和电视广播技术传输,并在互联网的信息资源交流平台上,以课件素材和学科教学内容及教学参考文献为主,并涵盖百科知识的各个方面。提供课件动画、图片、音频、视频、文本等素材资源,教师可利用这些原始素材随心所欲地制作出自己想达到的课件效果。应有为学生课外学习和教师备课参考提供的海量的课外资料和资源。通过现代化的信息资源开发技术和整合平台,提供一个大容量的教育教学资源库。 1.学科课件库 内容应涵盖同步教程、同步教案、同步试题。兼顾各版本教材,满足各教学环节的需求。信息栏目有难点分析、课后练习、期中、期末试题、模拟试题、应试分析等。 2.媒体素材库

为教师进行计算机辅助教学提供丰富的素材资源,包括图片库、图标库、音效库、背景音乐库、动画库、视频库等等。 3.试题/试卷库 大量各类学科考试试题、试卷,包括历年来重点学校的中高考试题等,提供最为宝贵的参考信息。 4、网络课程库 各类网络教程、专业培训课程、课程辅导、网络课堂等等教育资源内容。 5、教案/论文库 各类教案,教研论文库。包括教育基础理论、课程与教学理论、教育教学实验、素质教育等领域的教研论文,供教师进行教育教学研究使用。 6、共享软件库 共享软件库,按类别分为:多媒体类、教育教学、实用工具、网络相关、益智娱乐等与教育密切相关的共享软件,是学校的“软件资源中心”。

现代远程教育技术应用培训(四) 讲稿 培训内容:多媒体开发工具的类型与功能 主讲人:刘山 培训地点:远程教育教室 培训过程: 1、多媒体开发工具的类型 基于多媒体创作工具的创作方法和结构特点的不同,可将其划分为如下几类: 1)基于时基的多媒体创作工具 基于时基的多媒体创作工具所制作出来的节目,是以可视的时间轴来决定事件的顺序和对象上演的时间。这种时间轴包括许多行道或频道,以使安排多种对象同时展现。它还可以用来编程控制转向一个序列中的任何位置的节目,从而增加了导航功能和交互控制。通常基于时基的多媒体创作工具中都具有一个控制播放的面板,它与一般录音机的控制面板类似。在这些创作系统中,各种成分和事件按时间路线组织。 优点:操作简便,形象直观,在一时间段内,可任意调整多媒体素材的属性,如位置、转向等。 2)基于图标或流线的多媒体创作工具

Delphi函数大全

Delphi函数大全 首部function Languages: TLanguages; $[ 功能返回系统语言对象 说明通过此函数可以得到系统的语言环境 参考type 例子 12a12c12a12c. 参考 例子:= IsValidIdent; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToStr(Value: Integer): string; overload; $[ 首部function IntToStr(Value: Int64): string; overload; $[ 功能返回整数Value转换成字符串 说明Format('%d', [Value]) 参考function 例子:= IntToStr; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToHex(V alue: Integer; Digits: Integer): string; overload; $[ 首部function IntToHex(V alue: Int64; Digits: Integer): string; overload; $[ 功能返回整数Value转换成十六进制表现结果;Format('%.*x', [Digits, Value]) 说明参数Digits指定字符最小宽度;最小宽度不足时将用0填充 参考function 例子:= IntToHex, ; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToInt(const S: string): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时将引起异常 参考procedure 例子:= StrToInt; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToIntDef(const S: string; Default: Integer): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时则返回默认值Default 参考procedure 例子:= StrToIntDef, 0); ━━━━━━━━━━━━━━━━━━━━━ 首部function TryStrToInt(const S: string; out Value: Integer): Boolean; $[ 功能返回字符串S转换成整数V alue是否成功 说明字符串非整数表达时返回False并且Value将输出为0 参考procedure 例子 ..);打开失败则返回负数 参考function

用HOOK Call 提升挂的效率和及时性(纯属转载)

有1 2 3 4 5 6 7 8 9 2分文),看到不少朋友发文章帮助新/高级菜鸟,也许发现自己的挂和市面上的还有一定差 HOOK对游戏进行注入的), +偏移方式进行,也采用定时器保证及时性,好处是内call 读取函数,可以直取内存。 API函数让反外挂检测到(像内存用的 打怪效率,好的挂怪物刚死亡,就开始打下一个了, 1ms一次,频繁的检测,却 recv(收

们仔细分析下,游戏中很多动作都会造成收发包,包括其他人物移动,攻击,怪物移动,等等,有很多都和血量无关的,所以事实上,命中率还是很低,如何做到只在血量发生变化时调用我们的血量判断呢?这就要主角上场了,HOOK Call 进阶 现在大家有调用call的经验,自然也就有了od找call的经验,我们以一个游戏“武林”为例,在武林中,你可以通过OD断下一个地方,然后会发现,只要你受到攻击,它就会断下来。很好,这就是我们要的地方,然后我们在它断下时,查看寄存器值,eax +4,血量,eax +8 蓝量,好了,数据也有了。实际上,这和用CE找数据基址是一样的,eax的值实际上就来自于[一级基址]+偏移+[二级基址]这样的组合(和内存挂取值一样),只是由于我们已经在call的内部,所以能一下就取到值。 找到了合适的地方,接下来如何去HOOK它呢,需要注意的是,这里的HOOK,我们不需要用到API,只需要直接改汇编代码就行了(API实际上也是同样操作)。在我们断下的那个点附近,上下看看,有没有call(HOOK call嘛,肯定要找call),好,我们找到一个,我们在call的第一行下个断点,进游戏受攻击,断下来,看eax+4 的值,是正确的。恭喜这个call可用,然后说明一下汇编中call的环境。 大家知道,一个call就是一个函数,可带参数,也可不带参数,参数在进call以前,被压入堆栈里,进call后从栈中取出。由于我们要HOOK call,也就是把call 0425142改为call 自己函数的地址,我们就应该像警察一样,要对现场进行保护。下面用Delphi给出一个自己函数的例子 Copy code {人物血量信息拦截函数 } function Char_call(): longint; begin asm pushad //将当前寄存器环境保存 mov ebx,dword ptr ds:[esi+$254] //将值取出 mov Char_ohp,ebx //将值赋给变量 mov ebx,dword ptr ds:[esi+$26c] mov Char_mhp,ebx mov ebx,dword ptr ds:[esi+$258] mov Char_omp,ebx mov ebx,dword ptr ds:[esi+$270] mov Char_mmp,ebx mov Char_hpChgFlag ,eax mov ebx,_char_c_addr //将原有call地址写入 call ebx //执行原有的call

统计预测与决策教案

统计预测与决策教案 时间:2005年9月 管理预测与决策方法授课计划 ?定性预测方法 ?定量预测方法 ◆确定性方法 ?回归分析预测方法 ?时间序列平滑预测方法 ?趋势外推预测方法 ?马尔可夫预测与决策法 ◆不确定性方法 ?灰色系统预测 ?随机性决策分析 ?模糊决策 ?粗糙集理论 第一章预测概述 1.1 引言 1. 预测的兴起 预测于20世纪60-70年代在美国逐步兴起的 预测:预测是指对事物的演化预先做出的科学推测。广义的预测,既包括在同一时期根据已知事物推测未知事物的静态预测,也包括根据某一事物的历史和现状推测其未来的动态预测。狭义的预测,仅指动态预测,也就是指对事物的未来演化预先做出的科学推测。预测理论作为通用的方法论,既可以应用于研究自然现象,又可以应用于研究社会现象,如社会预测、人口预测、经济预测、政治预测、科技预测、军事预测、气象预测等。 2. 预测的作用 正确的预测是进行科学决策的依据。政府部门或企事业单位制定发展战略、编制计划以及日常管理决策,都需要以科学的预测工作为基础。 如“诸葛亮借东风、空城计”、以美国为首的多国部队实施的“沙漠风暴”,研究人员建立了热能转换模型,进行了一系列模拟计算。因此,人们说第一次世界大战是化学战(火药),第二次世界大战是物理战(原子武器),而海湾战争是数学战,指的是这场战争在战前就已对战争的进程以及战争所涉及和影响的方方面面做出了科学预测。 制订经济计划的依据之一 提高经济效益的手段之一 提高管理水平的途径之一 1.2 预测的基本原则 1. 坚持正确的指导思想 2. 坚持系统性原则

预测者所研究的事物和自然界的其他事物一样,都有自己的过去、现在和将来,就是存在着一种纵的发展关系,因果关系,而这种因果关系要受某种规律的支配。将事物作为一个互相作用和反作用的动态整体来研究,而且要将事物本身与周围的环境组合成一个系统综合体来研究。 例如:1943年全世界估计有三亿疟疾病患者,每年有300万人死亡,4500万人死于瘟疫,1945年后使用了DDT,十年内疟疾病的死亡率降低了二分之一,瘟疫病患者每年仅死亡几千人。然而DDT除了杀死害虫外,还杀死了大量其他有益的鸟类、鱼类等动物及植物,而且外界环境不能使DDT毒性衰减,据估计现在存留在大气层,大地以及海洋中的DDT约有十亿磅以上。 3.坚持关联性原则 4.坚持动态性原则 1.3 预测的分类 1.按预测的范围或层次分类 (1) 宏观预测 是指针对国家或部门、地区的活动进行的各种预测。它以整个社会经济发展的总图景作为考察对象,研究经济发展中各项指标之间的联系和发展变化。如:社会商品总供给、总需求的规模、结构、发展速度和平衡关系的预测;社会物价总水平的变动;宏观经济预测是政府制定方针政策、编制和检查计划,调整经济结构的重要依据。 (2) 微观预测 是针对基层单位的各项活动进行的各种预测。它以企业或农户生产经营发展的前景作为考察对象,研究微观经济中各项指标间的联系和发展变化。具体商品的生产量、需求量和市场占有率的预测等。微观经济预测,是企业制定生产经营决策,编制和检查计划的依据。 宏观预测应以微观预测为参考;微观预测应以宏观预测为指导,二者相辅相成。 2. 按预测的时间长短来分类 (1) 长期预测 一般是指对5年以上发展前景的预测. (2) 中期预测 一般指1年以上5年以下发展前景的预测. (3) 短期预测 一般指对3个月以上1年以下发展前景的预测 (4) 近期预测 一般指对3个月以下企业生产经营状况的预测。 3. 按预测方法的性质分类 (1) 定性预测 指预测者通过调查研究,了解实际情况,凭自己的实践经验和理论、业务水平,对事物发展前景的性质、方向和程度做出判断进行预测的方法。 (2) 定量预测 是指根据准确、及时、系统、全面的调查资料和信息,运用软计算方法和数学模型,对事物未来发展的规模、水平、速度和比例关系的测定。常用的定量预测方法有回归分析

delphi 三种常用的延时方法

在Delphi中,通常可以用以下三种方法来实现程序的延时,即TTtimer控件,Sleep函数,GetTickCount函数。但是其精度是各不相同的。 1)TTtimer控件 TTtimer控件的实质是调用Windows API定时函数SetTimer和KillTimer来实现的,并简化了对WM_TIMER 消息的处理过程。通过设置OnTimer事件和Interval属性,我们可以很方便的产生一些简单的定时事件。 2)Sleep函数 Sleep函数用来使程序的执行延时给定的时间值。Sleep的调用形式为 Sleep(milliseconds),暂停当前的进程milliseconds毫秒。Sleep的实现方法其实也是调用Windows API的Sleep函数。例如: sleep(1000); //延迟1000毫秒 Sleep会引起程序停滞,如果你延迟的时间较长的话,你的程序将不能够响应延时期间的发生的其他消息,所以程序看起来好像暂时死机。 3)GetTickCount函数 在主程序中延时,为了达到延时和响应消息这两个目的,GetTickCount()构成的循环就是一种广为流传的方法。例如: 1.procedure Delay(MSecs: Longint); 2.//延时函数,MSecs单位为毫秒(千分之1秒) 3.var 4.FirstTickCount, Now: Longint; 5.begin 6.FirstTickCount := GetTickCount(); 7.repeat 8. Application.ProcessMessages; 9. Now := GetTickCount(); 10.until (Now - FirstTickCount >= MSecs) or (Now

delphi制作主菜单

Delphi制作主菜单 菜单包括大多数Windows应用程序的大部分内容。一些Windows应用程序没有菜单,但绝大多数都有。Delphi使用Menu Designer使得创建菜单变得容易。Menu Designer有如下特点: ?可以创建主菜单和弹出菜单(快捷菜单)。 ?为菜单项处理提供OnClick事件。 ?从模板或源文件插入菜单。 ?以模板形式保存客户菜单。 所有Menu Designer命令通过其快捷菜单或者使用Object Inspector来操作。如下图,显示了Menu Designer的快捷菜单: 从大部分情况下,这些快捷菜单项通过其名字就能知道它的用途,因此不在这里做进一步讨论。 下面我们通过使用菜单项来了解它们,首先为前面创建ScratchPad应用程序添加一个主菜单,然后添加一个快捷菜单。

一、创建主菜单Menu Designer能够很快建立任何菜单。主菜单的菜单结构由MainMenu组件构成,它由VCL类TMainMenu表示。菜单上每一项是TMenuItem 组件,封装在TMenuItem类中。不必太关心这些类如何协同工作的细节,因为Menu Designer使得建立菜单变得非常容易。TMainMenu和TMenuItem继承关系图如下: 1、添加主菜单到窗体 首先必须添加MainMenu组件到窗体。 Note 现在大家对Delphi已有了使用经验。从这时起,要缩略某些需要执行动作的步骤。例如,从现在开始说“把MainMenu组件放到窗体上”,而不是说“在组件面板上点击Standard 标签,点击MainMenu按钮,点击窗体放置MainMenu组件。”不要担心,在引入新操作前,会给出大量的细节。 (1)打开上一讲创建的ScratchPad工程。 (2)在窗体上放置MainMenu组件,显示为一个图标,如下图,改变其Name属性为MainMenu。注意MainMenu组件有很少几个属性且没有时间,所有菜单的工作由单个菜单项完成。

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

译林牛津版初中英语七年级下第一单元Dream homes!Integrated Skills教学案

译林牛津版初中英语七年级下第一单元Dream homes!第5课时教学案 Grammar 问题导学单 【温故知新】你知道这些名称吗? 1.______ the room for sleeping in 2.______ the room we have our meals in 3.______ the room we cook our meals in 4.______ the room we have a bath in 5.______ the place for growing flowers 6.______ the room we meet our friends in 【预习导航】 一、翻译下列短语 1.与……不同____________________________ 2.从北京打电话给我__________________________ 3.你自己的卧室___________________________ 4.坐在扶手椅上_______________________________ 5.一个新的电话号_________________________ 6.有空________________________________________ 二、用所给词的适当形式填空 1. There is a TV in the ____________ (sit) room. 2. Simon is ___________ (lie) in bed in his bedroom. 3. Your aunt is ___________ (call) you from Jinan. 4. This is a room __________ (call) bathroom. 5. Our classroom is different from __________ (they). 6. I’ll ask her ____________ (clean) the classroom after school. 7. The old man ________ (want) _________ (have) a house like that. 三、听磁带两遍,预习P13-14内容。 A friend in need is a friend indeed. 患难见真情。

相关文档
最新文档