《开发工具》实验指导书.docx
《《开发工具》实验指导书.docx》由会员分享,可在线阅读,更多相关《《开发工具》实验指导书.docx(26页珍藏版)》请在冰豆网上搜索。
《开发工具》实验指导书
《开发工具》
实验指导书
信息学院
2010年4月
实验1:
各种WINDOWS应用软件开发工具的比较
实验目的:
理解各种windows开发工具的本质,比较它们的特点
实验内容:
用三种开发工具设计并实现4种“hello”程序。
开发工具分别为VC++6.0,VB6.0,DELPHI7.0
实验步骤:
1.基于WINDOWSAPI的“hello”程序。
使用VC++6.0建立Win32Application类工程,直接利用WINDOWSAPI编程。
程序运行后直接在窗体显示“HelloWorld”字样。
注意在“WM_PAINT”消息中处理显示“HelloWorld”。
图1.1基于WINDOWSAPI的“hello”程序运行结果
关键代码:
//windowsApiHELLO.cpp:
Definestheentrypointfortheapplication.
//
#include"stdafx.h"
#include"resource.h"
#defineMAX_LOADSTRING100
。
。
。
。
。
。
。
。
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
TCHARszHello[MAX_LOADSTRING];
LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);
switch(message)
{
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//Parsethemenuselections:
switch(wmId)
{
caseIDM_ABOUT:
DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//TODO:
Addanydrawingcodehere...
RECTrt;
GetClientRect(hWnd,&rt);
DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}
2.基于VC++MFC的“hello”程序。
使用VC++6.0建立MFCAppwizard(exe)工程,选择对话框类型的代码框架,实现如下功能
(1)程序运行后出现的界面
图1.2.1基于VC++的“hello”程序运行结果
(2)用户点击“Button1”后的界面
图1.2.2基于VC++的“hello”程序运行结果
注意:
文本框与变量的对应;文本框内数据的更新
附录:
关键代码
voidCVCMFCHELLODlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVCMFCHELLODlg)
DDX_Text(pDX,IDC_EDIT1,m_Edit1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVCMFCHELLODlg,CDialog)
//{{AFX_MSG_MAP(CVCMFCHELLODlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
voidCVCMFCHELLODlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_Edit1="HELLO!
";
UpdateData(FALSE);
}
3.基于VB的“hello”程序。
利用VB6建立“标准EXE”工程,实现如下功能
(1)程序运行后出现的界面
图1.3.1基于VB的“hello”程序运行结果
(2)用户点击“Button1”后的界面
图1.3.2基于VB的“hello”程序运行结果
附录:
关键代码
PrivateSubCommand1_Click()
Text1.Text="HELLO"
EndSub
3.基于DELPHI的“hello”程序。
利用DELPHI7建立标准工程,实现如下功能
(1)程序运行后出现的界面
图1.4.1基于DELPHI的“hello”程序运行结果
(2)用户点击“Button1”后的界面
图1.4.2基于DELPHI的“hello”程序运行结果
关键代码:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls;
type
TForm1=class(TForm)
Edit1:
TEdit;
Button1:
TButton;
procedureButton1Click(Sender:
TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
implementation
{$R*.dfm}
procedureTForm1.Button1Click(Sender:
TObject);
begin
Edit1.Text:
='HELLO';
end;
end.
实验2:
图像处理编程技术
实验目的:
掌握DELPHI图形处理方面的基本编程技术
实验内容:
实现对BMP格式图像文件的百叶窗效果实现
实验步骤:
1.准备BMP格式素材文件
2。
编程步骤参见本课教材《DELPHI开发技术大全》第323-324页
注意:
对实现百叶窗效果算法的理解;Canvas对象的使用
图2.1百叶窗效果程序运行图
关键代码:
procedureTForm1.BitBtn1Click(Sender:
TObject);
var
newbmp:
TBitmap;
i,j,bmpheight,bmpwidth:
integer;
xgroup,xcount:
integer;
begin
newbmp:
=TBitmap.Create;
newbmp.Width:
=image1.Width;
newbmp.Height:
=image1.Height;
bmpheight:
=image1.Height;
bmpwidth:
=image1.Width;
xgroup:
=25;
xcount:
=bmpheightdivxgroup;
fori:
=0toxcountdo
forj:
=0toxgroupdo
begin
newbmp.Canvas.CopyRect(Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i),
image1.Canvas,Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
form1.Canvas.Draw(0,0,newbmp);
Application.ProcessMessages;
end;
newbmp.Free;
end;
实验3:
多媒体编程技术
实验目的:
掌握DELPHI音频视频处理方面的基本编程技术
实验内容:
视频播放器设计
实验步骤:
1.准备.MPG格式素材文件
2。
编程步骤参见本课教材《DELPHI开发技术大全》第362-363页
注意:
对MediaPlayer控件的使用
程序运行的顺序如图所示
图3.1视频播放器程序运行界面1
图3.2视频播放器程序运行界面2
图3.3视频播放器程序运行界面3
关键代码:
procedureTForm2.playerAVI(Intis:
Integer);
begin
ifIntis=1then
begin
ifform1.OpenDialog1.Executethen
begin
withform2.MediaPlayer1do
begin
Display:
=Panel1;
Filename:
=form1.OpenDialog1.FileName;
Open;
DisPlayrect:
=Rect(1,1,form2.Panel1.Width,form2.Panel1.Height);
Notify:
=true;
end;
form1.SpeedButton2.Enabled:
=True;
form1.SpeedButton6.Enabled:
=True;
form1.SpeedButton7.Enabled:
=True;
form1.SpeedButton8.Enabled:
=True;
form1.SpeedButton9.Enabled:
=True;
end;
end;
if(Intis>1)and(Intis<9)then
begin
ifIntis=2then
begin
form2.MediaPlayer1.Play;
form1.SpeedButton4.Enabled:
=True;
form1.SpeedButton5.Enabled:
=True;
end;
ifIntis=3then
begin
form2.MediaPlayer1.Stop;
end;
ifIntis=4then
begin
form2.MediaPlayer1.Pause;
end;
ifIntis=5then
begin
form2.MediaPlayer1.Next;
end;
ifIntis=6then
begin
form2.MediaPlayer1.Previous;
end;
ifIntis=7then
begin
form2.MediaPlayer1.Step;
end;
ifIntis=8then
begin
form2.MediaPlayer1.Back;
end;
end;
end;
实验4:
数据库开发技术—数据的浏览添加修改删除
实验目的:
掌握DELPHI的基于ADO的基本数据库操作技术
实验内容:
数据库记录的浏览添加修改删除
实验步骤:
1.建立Access数据库country.mdb
2.编写前台应用程序
以上参见本课教材《DELPHI开发技术大全》第524页实例。
程序运行结果如图。
图4.1数据库数据编辑程序运行界面
注意:
利用各ADO控件建立数据链路。
关键代码:
procedureTForm1.FormCreate(Sender:
TObject);
begin
adoquery1.ConnectionString:
='Provider=Microsoft.Jet.OLEDB.4.0;DataSource=database\country.mdb;PersistSecurityInfo=False';
withADOQuery1do
begin
close;
SQL.Clear;
sql.Add('selectnameas国家,capitalas首都,areaas面积,populationas人口fromcountrywherepopulation<30000000');
open;
end;
end;
end.
实验5:
数据库开发技术—数据报表
实验目的:
掌握DELPHI基于RAVE组件的数据报表技术
实验内容:
数据报表设计
实验步骤:
1.建立Access数据库database.mdb
2.编写前台应用程序
以上参见本课教材《DELPHI开发技术大全》第599页实例。
Rave组件的应用参见593-596页。
运行结果如图所示
注意:
数据视图选择“directDataView”方式
图5.1数据报表软件运行界面1
图5.2数据报表软件运行界面1
关键代码:
RvProject1.ProjectFile:
='.\Project1.rav';
RvProject1.Execute;
实验6:
网络编程技术
实验目的:
掌握DELPHI基于UDP网络编程方面的基本技术
实验内容:
UDP局域网聊天软件设计
实验步骤:
参见本课教材《DELPHI开发技术大全》第648-649页
软件运行的结果如图所示。
(本机作为聊天对象)
注意:
1.对ADODataSet的使用2.UDP控件属性的设置
3.数据的文件方式存取。
图6.1UDP局域网聊天软件运行界面1
图6.2UDP局域网聊天软件运行界面2
关键代码:
procedureTForm1.Button1Click(Sender:
TObject);
var
STR:
string;
begin
ZHUName:
=GettoName;
IPName:
=NameTOIP(ZHUName);
ADODataSet2.Filtered:
=True;
ADODataSet2.Filter:
=format('UserIP'+'='+'''%s''',[IPName]);
name:
=ADODataSet2.fieldbyname('UserName').AsString;
IdUDPClient1.Host:
=IP;
ifLength(Memo2.Lines.GetText)>0then
begin
IdUDPClient1.Send(Memo2.Lines.GetText);
STR:
=IdUDPClient1.ReceiveString;
Memo1.Lines.Insert(0,Name+':
'+STR);
Memo2.Clear;
Memo2.Lines.Clear;
end;
Memo2.SetFocus;
end;
procedureTForm1.IdUDPServer1UDPRead(Sender:
TObject;AData:
TStream;
ABinding:
TIdSocketHandle);
var
Str,Names:
string;
Stream:
TStringStream;
begin
Stream:
=TStringStream.Create('');
Stream.CopyFrom(AData,AData.Size);
Str:
=Stream.DataString;
ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,Str[1],Length(Str));
ifGetName(ABinding.PeerIP,Names)then
Memo1.Lines.Insert(0,Names+':
'+STR)//Memo1.Lines.Add(Names+':
'+Str
else
Memo1.Lines.Insert(0,ABinding.PeerIP+':
'+STR);
end;
procedureTForm1.Memo1DblClick(Sender:
TObject);
begin
Memo1.Clear;
end;
procedureTForm1.FormShow(Sender:
TObject);
begin
IP:
='127.0.0.1';
Name:
='本机';
FileName:
='';
ADODataSet1.CreateDataSet;
ifFileExists('.\Data.Dat')then
begin
ADODataSet1.LoadFromFile('.\Data.Dat');
end;
StatusBar1.Panels.Items[0].Text:
='当前好友姓名为:
'+Name;
StatusBar1.Panels.Items[1].Text:
='IP地址为:
'+IP;
ADDlist;
end;
functionTForm1.GetName(IP:
string;varName:
String):
Boolean;
var
IsFind:
Boolean;
begin
IsFind:
=ADODataSet1.Locate('UserIP',IP,[]);
ifIsFindthen
Name:
=ADODataSet1.FieldByName('UserName').AsString
else
Name:
='';
Result:
=IsFind;
end;
procedureTForm1.Memo2KeyPress(Sender:
TObject;varKey:
Char);
begin
ifKey=#13then
begin
Button1.Click;
end;
Exit;
end;
{Thread}
procedureTForm1.SpeedButton1Click(Sender:
TObject);
begin
Form2.ADOState:
=1;
Form2.DelTxt;
Form2.ShowModal;
end;
procedureTForm1.SpeedButton2Click(Sender:
TObject);
begin
Form2.ADOState:
=2;
Form2.GetTxt;
Form2.ShowModal;
end;
procedureTForm1.SpeedButton3Click(Sender:
TObject);
begin
ifApplication.MessageBox('是否要删除该记录!
','明日科技',MB_OKCANCEL)=IDOKthen
begin
ADODataSet1.Delete;
ADODataSet1.SaveToFile('.\Data.Dat');
end;
form1.ADDlist;
end;
procedureTForm1.ADDlist;
var
same:
Integer;
IsAdd:
boolean;
begin
ADODataSet2.Close;
ADODataSet2.CreateDataSet;
ifFileExists('.\Data.Dat')then
begin
ADODataSet2.LoadFromFile('.\Data.Dat');
end;
ADODataSet2.Open;
ADODataSet2.First;
ListBox1.Items.Clear;
WhilenotADODataSet2.Eofdo
begin
isadd:
=true;
forsame:
=0toListBox1.Count-1do
begin
ifADODataSet2.Fields[0].asstring=listbox1.Items[same]then
begin
isadd:
=false;
break;
end;
end;
ifisaddthen
ListBox1.Items.Add(ADODataSet2.Fields[0].asstring);
ADODataSet2.Next;
end;
end;
procedureTForm1.ListBox1Click(Sender:
TObject);
var
i:
Integer;
begin
Fori:
=0toListBox1.Items.Count-1do
if(ListBox1.SelCount<>0)then
begin
ADODataSet2.Filtered:
=True;
ADODataSet2.Filter:
=format('UserName'+'='+'''%s''',[ListBox1.Items[ListBox1.ItemIndex]]);
StatusBar1.Panels.Items[0].Text:
='向:
'+ADODataSet2.FieldByName('UserName').AsString+'发送信息';
StatusBar1.Panels.Items[1].Text:
='IP地址为:
'+ADODataSet2.FieldByName('UserIP').AsString;
IP:
=ADODataSet2.FieldByName('UserIP').AsString;
Name:
=ADODataSet2.FieldByName('UserName').AsString;
end;
end;
functionTForm1.GettoName:
String;
var
Size:
Card