delphi常见问题参考.docx
- 文档编号:17659051
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:21
- 大小:24.52KB
delphi常见问题参考.docx
《delphi常见问题参考.docx》由会员分享,可在线阅读,更多相关《delphi常见问题参考.docx(21页珍藏版)》请在冰点文库上搜索。
delphi常见问题参考
delphi常见问题参考I(27条)
1、怎么样在delphi中调动其它*.exe文件?
例如:
winexec('d:
\郑洽\Project1.exe',sw_show);
==============================================================================
2、如何让工程运行时主窗体就是最大化的?
答:
设置主窗体的WindowsState属性为wsMaximized就可以了!
wsNormal窗体以普通状态显示
wsMinimized窗体以最小化状态显示。
wsMaximized窗体以最大化状态显示。
==============================================================================
3、我想先->闪现窗体->主窗体->登录窗体,工程源文件怎么设置?
答:
⒈开始一个新工程。
给表格起名为MainForm,MainForm的单元起名为Main,工程文件起名为Test。
⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。
⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm的单元起名为Move。
⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption属性为“欢迎进入本系统”。
5.下一步修改工程的源代码。
选择View/ProjectSource,修改begin和end之间的语句如下:
程序清单Test.Dpr
programTest
uses
forms,
Mainin'MAIN.PAS'{MainForm},
Movein'Move.PAS'{MoveForm}
{$R*.RES}
begin
MoveForm:
=TMoveForm.Create(Application);{Create创建闪现窗口对象}
MoveForm.Show;
MoveForm.Update;
Application.CreateForm(TMainForm,MainForm);
MoveForm.Hide;
MoveForm.Free;{Free从内存中释放对象}
Application.Run;
end.
第一条语句创建了对象,该对象存在内存中,但还不能看见,为了让它出现并更新它的内容,调用对象的Show和Update成员函数:
Show和Update。
当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。
6.如果此刻你编译和运行程序,MoveForm窗口一闪而过,你可能未来得及看清。
为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate事件创建一个处理程序,延迟MoveForm窗口的显现时间。
programTMainForm.FormCreate(sender:
Tobject);
var
currentTime:
LongInt;
begin
currentTime:
=GetTickCountdiv1000;
while((GetTickCountdiv1000)<(currentTime+3)do
{不做任何事);
end;
end.
GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000转化为秒数。
此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。
为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程序,创建一个精美的封面或在程序启动时显示重要提示。
制作登录窗体一个很方便的方法就是主窗体作为主窗体,登录成功Hide掉就行了。
如果登录窗体不可以作为主窗体,那么和闪现窗体一样的方法创建登录窗体,加在Application.Run;之前,MoveForm.Free;之后,
用showmodal显示登录窗体
==============================================================================
4、button上面的文字怎么样换行?
答:
button控件不行
bitbtn控件可以。
bitbtn1.caption:
='aaaa'#13'bbbbb'
==============================================================================
5、怎么样判别焦点是否在某个控件上?
答:
ifTobject.focusedthen
//焦点在某某控件上
else
==============================================================================
6、怎么样在程序中使一个节点的子节点展开及收闭?
答:
treeview1.selected.Expanded判断节点的子节点是否展开True展开,否则闭拢
treeview1.selected.Expand(True);//子节点展开
treeview1.selected.collapse(True):
//子节点闭拢
树节点全部展开:
procedureTForm1.Button1Click(Sender:
TObject);
varnode:
TTreeNode;
begin
iftreeview1.Items[0]<>nilthen
begin
node:
=treeview1.Items[0];
node.Expand(true);
whilenode.getNextSibling<>nildo
begin
node:
=node.getNextSibling;
node.Expand(true);
end;
end;
end;
树节点全部收缩:
procedureTForm1.Button2Click(Sender:
TObject);
varnode:
TTreeNode;
begin
iftreeview1.Items[0]<>nilthen
begin
node:
=treeview1.Items[0];
node.Collapse(true);
whilenode.getNextSibling<>nildo
begin
node:
=node.getNextSibling;
node.Collapse(true);
end;
end;
end;
==============================================================================
7、如何用delphi编程实现给access数据库加密码?
答:
1,新建Project。
2,在FORM中放入ADOConnection控件。
3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“MicrosoftJet4.0OLEDB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。
4,这时点“所有”页,然后双击“JetOLEDB:
DatabasePassword”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。
把ADOConnection控件的LoginPromtp设为false.
5,设置连接完成。
==============================================================================
8、如何判断Treeview中我选中的节点是否有子节点?
如果没有给出提示啊?
答:
ifTreeview.Selected.HasChildrenthen
//有
else
//无
var
Node:
TTreeNode;
begin
Node:
=TreeView1.Selected;
ifNode.HasChildrenthen
....
对复杂的程序最好用Node过渡
==============================================================================
9、能否解释一下try...except...end及try...finally...end;?
1.
(1)是用于扑捉异常,
(2)是用于保证代码执行的完整性
2.
(1)中finally处的代码不管什么情况都会被执行,
(2)中except处的代码仅在发生异常时才会执行
3.tryfinally之间的代码虽可保证finally和end之间的程序能执行,但不能保证程序不崩溃,
而tryexcept就不会使程序崩溃
==============================================================================
10、怎么样在主程序控制器中加入音乐?
在implementation下加入mmsystem单元(windows多媒体函数动态联结库)。
然后在的onShow,onCreate事件中编写代码:
sndplaysound(’sound.wav’,snd_async)
==============================================================================
11、我在form1上有四个edit,输完后我想用下上箭头键进行上移下移?
怎么办?
答:
procedureTForm1.Edit1KeyDown(Sender:
TObject;varKey:
Word;
Shift:
TShiftState);
begin
ifkey=vk_down thenperform(WM_NEXTDLGCTL,0,0)else
ifkey=vk_up thenperform(WM_NEXTDLGCTL,1,0);
end;
==============================================================================
12、如何用delphi5实现读文本文件指定的一行,并得到文本文件的总行数?
谢谢!
答:
Delphi读文件文件一般使用Readln过程,如要读第3行可以这样:
var
i:
Integer;
F:
TextFile;
S:
string;
begin
ifOpenDialog1.Executethen{DisplayOpendialogbox}
begin
AssignFile(F,OpenDialog1.FileName);{Fileselectedindialog}
Reset(F);
Fori=1To3Do
Readln(F,S);
Edit1.Text:
=S;{PutstringinaTEditcontrol}
CloseFile(F);
.
end;
要统计总行数,只能从头逐行读,直到文件尾(Eof函数为True),每读一行计数器加1。
不过由于文本文件的每行长度不相等,它不能象数据库文件那样想读那行就读哪行,只能顺序读。
上面的方法容易理解,也容易实现。
如果希望提高速度,编程上要麻烦一些,可以以二进制方式打开文件,将所有内容读入一个内存变量,然后使用Pos函数查找其中的回车(#13)个数,这样可以快速地统计总行数并能快速地找到指定行。
==============================================================================
13、制作主窗口显示前的版权窗口
答:
在工程文件中选File->NewForm新建一个窗口,设计好窗口的外观。
给窗口起名为AboutBox,选Project->Options,将新建的窗口从自动建立中去掉。
选View->ProjectSource,打开工程文件的源文件,在下面加入红色的句子。
UsesAboutBox
Var
lTime:
TDateTime;
Begin
Application.Initialize();
AboutBox=TAboutBox.Create(AboutBox);
AboutBox.Show;
AboutBox.Update;
lTime=GetTickCount;
Application.CreateForm(TMainForm,MainForm);
while((GetTickCount-lTime)/1000<3)do;
AboutBox.Hide;
AboutBox.Free;
Application.Run;
end;
==============================================================================
14、Delphi中RichEdit的奥妙
一、如何得知当前行号
用RichEdit(或者memo)控件制作文本编辑器时,通过访问lines?
count属性可以得到总行数,但是若想知道光标当前所在行的行号就麻烦了,因为delphi没有提供这个属性。
要实现这个编辑器必备功能,就须调用em_LineFromChar。
请试试下面的程序。
先在窗口中布置一个RichEdit或者memo(命名为editor),以及一个button。
在button的onclick事件中写入下列代码。
var
CurrentLine:
Integer;
begin
CurrentLine:
=Editor.Perform(em_LineFromChar,SFFFF,0);
Application.MessageBox(PChar(′当前行号是′+IntToStr(CurrentLine)),′消息′,mb_iconinformation);
end;
需要注意的是,第一行的行号为零。
二、如何撤消操作(undo)
对于memo来说,实现undo是不需编程的,只要让popupmenu属性为空,运行时就能用鼠标右键激活一个常用操作菜单,其中包括撤消、剪切、复制、粘贴、删除和全选六项。
但可惜的是,这一招对于功能强大的RichEdit控件居然行不通,害得我们还要自己设计一个popupmemu。
当你用CutToClipBoard等语句轻松而顺利地完成了“剪切”等功能,接着便会无奈地发现,竟找不到undo或cancel之类的语句来执行“撤消”。
这时你需要这样处理:
RichEdit1?
Perform(EM_UNDO,0,0);
另外还应检查是否允许撤消,从而开启或关闭弹出菜单中的“撤消”项:
Undo1?
Enabled:
=RichEdit?
Perform(EM_CANUNDO,0,0)<>0;
以上程序在Delphi3中调试通过。
==============================================================================
15、在主窗口中打开另一个独立的窗口,而这个被打开的窗口固定显示在..?
答:
procedureTForm2.FormCreate(Sender:
TObject);
begin
form2.Hide;
self.Parent:
=form1.Panel1;
end;
==============================================================================
16、SaveDialog1确认文件存不存在的办法?
答:
procedureTForm1.SaveDialog1CanClose(Sender:
TObject;
varCanClose:
Boolean);
begin
ifFileExists(SaveDialog1.FileName)then//如果文件已经存在
ifMessageDlg('文件已经存在,保存吗?
',mtConfirmation,[mbYes,mbNo],0)<>mrYesthen
Button2.Click;//如果选择了覆盖,则退出,否则,重新让用户选择文件
end;
==============================================================================
17、正确关闭一个MDI子窗口?
答:
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。
解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:
procedureChildForm.OnClose(Sender:
TObject;varAction:
TCloseAction);
begin
Action:
=caFree;
end;
Delphi为一个Form的关闭行为指定了四种方式,分别是:
caNone禁止Form被关闭
caHideForm不被关闭,但是被隐藏。
被隐藏的Form仍然可以被程序访问。
caFreeForm被关闭,并且释放其占用的资源。
caMinimizeForm被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。
==============================================================================
18、怎样记MDI子窗口不在母体运行时就被打开?
答:
在project下的options中forms里面除了form1外,其余的移到右边的框里,然后在调用显示的按钮下编写语句,以form2调用为例:
form2:
=Tform2.create(self);
form2.show;
==============================================================================
19、限制FORM的大小
答:
在FORM私有声明部分加上如下一行:
procedureWMGetMinMaxInfo(varMessage:
TWMGetMinMaxInfo);messageWM_GETMINMAXINFO;
在声明部分加上如下几行:
procedureTForm1.WMGetMinMaxInfo(varMessage:
TWMGetMinMaxInfo);
begin
withMessage.MinMaxInfo^do
begin
ptMaxSize.X:
=200;{最大化时宽度}
ptMaxSize.Y:
=200;{最大化时高度}
ptMaxPosition.X:
=99;{最大化时左上角横坐标}
ptMaxPosition.Y:
=99;{最大化时左上角纵坐标}
end;
Message.Result:
=0;{告诉Windows你改变了minmaxinfo}
inherited;
end;
==============================================================================
20、随机数生成法
答:
Randomize;
rn:
=inttostr(random(9999));
rn1:
=inttostr(random(9999));
.....
==============================================================================
21、怎样把程序隐藏起来,在WINDOWS界面上没有显示?
?
答:
在application.run之前加入application.showmain:
=false!
==============================================================================
22、怎样将一个form1.free的form1窗体重新显示?
答:
form2:
=TForm2.Create(application);
form2.Show;
如果你要创建的Form2窗体能嵌入一个Panel中,指定Parent:
form2:
=TForm2.Create(application);
form2.Parent:
=panel1;
form2.Show;
==============================================================================
23、我想在bitbtn上设快捷按钮Esc,怎么办?
答:
procedureTForm1.BitBtn1KeyDown(Sender:
TObject;varKey:
Word;
Shift:
TShiftState);
begin
ifkey=27then
application.Terminate;
end;
设它的cancel属性为true就行了~~
==============================================================================
24、什么叫做托盘区?
答:
托盘区就是在windows的状态栏下方显示时钟、输入法状态的地方,
要把你的程序显示在托盘区:
下面是一个托盘类,只要把下面粘贴到文本文件中,改成TrayIcon.pas,使用时usesTrayIcon就可以了。
先声明一个全局变量:
vartray:
TTrayNotifyIcon;
然后在窗体的OnCreate事件中:
tray:
=TTrayNotifyIcon.Create(self);//将窗体创建为托盘
tray.Icon:
=application.Icon;//定义托盘的显示图标
tray.IconVisible:
=true;//托盘可见
tray.PopupMenu:
=popmenu;//给托盘定义一个右击时的弹出菜单
tray.OnDblClick:
=trayDblClick;//给托盘定义一个双击事件(当然要自己写了,不过多数情况只有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- delphi 常见问题 参考
![提示](https://static.bingdoc.com/images/bang_tan.gif)