当前位置:中国易下载软件教材中心文章中心编程语言Delphi → delphi问题集锦(27问)

delphi问题集锦(27问)

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-8-21 0:57:53
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1、怎么样在delphi中调动其它*.exe文件?6Yu海岸线网络安全资讯站
例如:winexec('d:郑洽Project1.exe',sw_show);6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
2、如何让工程运行时主窗体就是最大化的? 6Yu海岸线网络安全资讯站
答:设置主窗体的WindowsState属性为wsMaximized就可以了!6Yu海岸线网络安全资讯站
wsNormal 窗体以普通状态显示6Yu海岸线网络安全资讯站
wsMinimized 窗体以最小化状态显示。6Yu海岸线网络安全资讯站
wsMaximized 窗体以最大化状态显示。 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
3、我想先->闪现窗体->主窗体->登录窗体,工程源文件怎么设置?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
⒈开始一个新工程。给表格起名为MainForm,MainForm的单元起名为Main, 工程文 件起名为Test。6Yu海岸线网络安全资讯站
⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件 的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。6Yu海岸线网络安全资讯站
⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名 为Move。6Yu海岸线网络安全资讯站
⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎 进入本系统”。6Yu海岸线网络安全资讯站
5.下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的 语句如下:6Yu海岸线网络安全资讯站
程序清单Test.Dpr6Yu海岸线网络安全资讯站
program Test6Yu海岸线网络安全资讯站
uses6Yu海岸线网络安全资讯站
forms,6Yu海岸线网络安全资讯站
Main in 'MAIN.PAS'{MainForm},6Yu海岸线网络安全资讯站
Move in 'Move.PAS'{MoveForm}6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
{$R *.RES}6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象}6Yu海岸线网络安全资讯站
MoveForm.Show;6Yu海岸线网络安全资讯站
MoveForm.Update;6Yu海岸线网络安全资讯站
Application.CreateForm(TMainForm,MainForm);6Yu海岸线网络安全资讯站
MoveForm.Hide;6Yu海岸线网络安全资讯站
MoveForm.Free;{Free从内存中释放对象}6Yu海岸线网络安全资讯站
Application.Run;6Yu海岸线网络安全资讯站
end.6Yu海岸线网络安全资讯站
  第一条语句创建了对象,该对象存在内存中,但还不能看见, 为了让它出现并更 新它的内容,调用对象的Show和Update成员函数:Show和Update。 当闪现窗口使 用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。6Yu海岸线网络安全资讯站
6.如果此刻你编译和运行程序,MoveForm窗口一闪而过, 你可能未来得及看 清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个 处理程序,延迟MoveForm窗口的显现时间。6Yu海岸线网络安全资讯站
program TMainForm.FormCreate(sender:Tobject);6Yu海岸线网络安全资讯站
var 6Yu海岸线网络安全资讯站
currentTime:LongInt;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
currentTime:=GetTickCount div 1000;6Yu海岸线网络安全资讯站
while ((GetTickCount div 1000)<(currentTime+3) do6Yu海岸线网络安全资讯站
{不做任何事);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end.6Yu海岸线网络安全资讯站
  GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。 此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。6Yu海岸线网络安全资讯站
为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程 序,创建一个精美的封面或在程序启动时显示重要提示。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
制作登录窗体一个很方便的方法就是主窗体作为主窗体,登录成功Hide掉就行了。6Yu海岸线网络安全资讯站
如果登录窗体不可以作为主窗体,那么和闪现窗体一样的方法创建登录窗体,加在Application.Run;之前,MoveForm.Free;之后,6Yu海岸线网络安全资讯站
用showmodal显示登录窗体6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
4、button上面的文字怎么样换行?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
button控件不行6Yu海岸线网络安全资讯站
bitbtn控件可以。6Yu海岸线网络安全资讯站
bitbtn1.caption:='aaaa'#13'bbbbb'6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
5、怎么样判别焦点是否在某个控件上?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
if Tobject.focused then6Yu海岸线网络安全资讯站
//焦点在某某控件上6Yu海岸线网络安全资讯站
else6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
6、怎么样在程序中使一个节点的子节点展开及收闭?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
treeview1.selected.Expanded; //判断节点的子节点是否展开True展开,否则闭拢6Yu海岸线网络安全资讯站
treeview1.selected.Expand(True);//子节点展开6Yu海岸线网络安全资讯站
treeview1.selected.collapse(True)://子节点闭拢 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
树节点全部展开:6Yu海岸线网络安全资讯站
procedure TForm1.Button1Click(Sender: TObject);6Yu海岸线网络安全资讯站
var node:TTreeNode;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if treeview1.Items[0]<>nil then6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
node:=treeview1.Items[0];6Yu海岸线网络安全资讯站
node.Expand(true);6Yu海岸线网络安全资讯站
while node.getNextSibling<>nil do6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
node:=node.getNextSibling;6Yu海岸线网络安全资讯站
node.Expand(true);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
树节点全部收缩:6Yu海岸线网络安全资讯站
procedure TForm1.Button2Click(Sender: TObject);6Yu海岸线网络安全资讯站
var node:TTreeNode;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if treeview1.Items[0]<>nil then6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
node:=treeview1.Items[0];6Yu海岸线网络安全资讯站
node.Collapse(true);6Yu海岸线网络安全资讯站
while node.getNextSibling<>nil do6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
node:=node.getNextSibling;6Yu海岸线网络安全资讯站
node.Collapse(true);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
7、如何用delphi编程实现给access数据库加密码?6Yu海岸线网络安全资讯站
答:1,新建Project。6Yu海岸线网络安全资讯站
  2,在FORM中放入ADOConnection控件。6Yu海岸线网络安全资讯站
  3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB   Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名,这时如果点“测试连接”按钮时,出现“初始化提供者时发生错误,测试连接失败,密码无效”的错误提示。6Yu海岸线网络安全资讯站
  4,这时点“所有”页,然后双击“Jet OLEDB:Database Password”,出现对话框,添入密码后,选择“连接”页中的“测试连接”按钮,出现“测试连接成功”的对话框。把ADOConnection控件的LoginPromtp设为false.6Yu海岸线网络安全资讯站
  5,设置连接完成。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
8、如何判断Treeview中我选中的节点是否有子节点?如果没有给出提示啊?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
if Treeview.Selected.HasChildren then6Yu海岸线网络安全资讯站
//有6Yu海岸线网络安全资讯站
else6Yu海岸线网络安全资讯站
//无 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
var6Yu海岸线网络安全资讯站
Node :TTreeNode;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
Node :=TreeView1.Selected;6Yu海岸线网络安全资讯站
if Node.HasChildren then6Yu海岸线网络安全资讯站
....6Yu海岸线网络安全资讯站
对复杂的程序最好用Node过渡6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
9、能否解释一下try...except...end及try...finally...end;?6Yu海岸线网络安全资讯站
1.(1)是用于扑捉异常,(2)是用于保证代码执行的完整性6Yu海岸线网络安全资讯站
2.(1)中finally处的代码不管什么情况都会被执行,(2)中except处的代码仅在发生异常时才会执行6Yu海岸线网络安全资讯站
3.try finally之间的代码虽可保证finally 和 end之间的程序能执行,但不能保证程序不崩溃,6Yu海岸线网络安全资讯站
而try except就不会使程序崩溃 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
10、怎么样在主程序控制器中加入音乐?6Yu海岸线网络安全资讯站
在implementation下加入 mmsystem單元(windows多媒體函數動態聯結庫)。然後在的onShow,onCreate事件中編寫代碼:sndplaysound('sound.wav',snd_async)6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
11、我在form1上有四个edit,输完后我想用下上箭头键进行上移下移?怎么办?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;6Yu海岸线网络安全资讯站
Shift: TShiftState);6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if key=vk_down then perform(WM_NEXTDLGCTL,0,0) else6Yu海岸线网络安全资讯站
if key=vk_up then perform(WM_NEXTDLGCTL,1,0);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
12、如何用delphi5实现读文本文件指定的一行,并得到文本文件的总行数?谢谢!6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
Delphi读文件文件一般使用Readln过程,如要读第3行可以这样: 6Yu海岸线网络安全资讯站
var 6Yu海岸线网络安全资讯站
i : Integer; 6Yu海岸线网络安全资讯站
F: TextFile; 6Yu海岸线网络安全资讯站
S: string; 6Yu海岸线网络安全资讯站
begin 6Yu海岸线网络安全资讯站
if OpenDialog1.Execute then { Display Open dialog box } 6Yu海岸线网络安全资讯站
begin 6Yu海岸线网络安全资讯站
AssignFile(F, OpenDialog1.FileName); { File selected in dialog } 6Yu海岸线网络安全资讯站
Reset(F); 6Yu海岸线网络安全资讯站
For i = 1 To 3 Do 6Yu海岸线网络安全资讯站
Readln(F, S); 6Yu海岸线网络安全资讯站
Edit1.Text := S; { Put string in a TEdit control } 6Yu海岸线网络安全资讯站
CloseFile(F); 6Yu海岸线网络安全资讯站
.6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
要统计总行数,只能从头逐行读,直到文件尾(Eof函数为True),每读一行计数器加1。 6Yu海岸线网络安全资讯站
不过由于文本文件的每行长度不相等,它不能象数据库文件那样想读那行就读哪行,只能顺序读。 6Yu海岸线网络安全资讯站
上面的方法容易理解,也容易实现。如果希望提高速度,编程上要麻烦一些,可以以二进制方式打开文件,将所有内容读入一个内存变量,然后使用Pos函数查找其中的回车(#13)个数,这样可以快速地统计总行数并能快速地找到指定行。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
13、制作主窗口显示前的版权窗口 6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
在工程文件中选File->New Form新建一个窗口,设计好窗口的外观。给窗口起名为AboutBox,选Project->Options,将新建的窗口从自动建立中去掉。 选View->Project Source,打开工程文件的源文件,在下面加入红色的句子。6Yu海岸线网络安全资讯站
Uses AboutBox6Yu海岸线网络安全资讯站
Var6Yu海岸线网络安全资讯站
lTime :TDateTime;6Yu海岸线网络安全资讯站
Begin6Yu海岸线网络安全资讯站
Application.Initialize();6Yu海岸线网络安全资讯站
AboutBox=TAboutBox.Create(AboutBox);6Yu海岸线网络安全资讯站
AboutBox.Show;6Yu海岸线网络安全资讯站
AboutBox.Update;6Yu海岸线网络安全资讯站
lTime=GetTickCount;6Yu海岸线网络安全资讯站
Application.CreateForm(TMainForm,MainForm);6Yu海岸线网络安全资讯站
while((GetTickCount-lTime) / 1000 <3) do;6Yu海岸线网络安全资讯站
AboutBox.Hide;6Yu海岸线网络安全资讯站
AboutBox.Free;6Yu海岸线网络安全资讯站
Application.Run;6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
14、Delphi中RichEdit的奥妙6Yu海岸线网络安全资讯站
  一、如何得知当前行号   6Yu海岸线网络安全资讯站
  用RichEdit(或者memo)控件制作文本编辑器时,通过访问lines?count属性可以得到总行数,但是若想知道光标当前所在行的行号就麻烦了,因为delphi没有提供这个属性。要实现这个编辑器必备功能,就须调用em_ LineFromChar。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
  请试试下面的程序。6Yu海岸线网络安全资讯站
  先在窗口中布置一个RichEdit或者memo(命名为editor),以及一个button。在button的onclick事件中写入下列代码6Yu海岸线网络安全资讯站
   var6Yu海岸线网络安全资讯站
   CurrentLine:Integer;6Yu海岸线网络安全资讯站
   begin6Yu海岸线网络安全资讯站
     CurrentLine:=Editor.Perform(em_ LineFromChar,SFFFF,0);   6Yu海岸线网络安全资讯站
     Application.MessageBox(PChar(′当前行号是′+IntToStr(CurrentLine)),′消息′,mb_ iconinformation);   6Yu海岸线网络安全资讯站
   end;6Yu海岸线网络安全资讯站
  需要注意的是,第一行的行号为零。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
  二、如何撤消操作(undo)6Yu海岸线网络安全资讯站
  对于memo来说,实现undo是不需编程的,只要让popupmenu属性为空,运行时就能用鼠标右键激活一个常用操作菜单,其中包括撤消、剪切、复制、粘贴、删除和全选六项。   但可惜的是,这一招对于功能强大的RichEdit控件居然行不通,害得我们还要自己设计一个popupmemu。当你用CutToClipBoard等语句轻松而顺利地完成了“剪切”等功能,接着便会无奈地发现,竟找不到undo或cancel之类的语句来执行“撤消”。   这时你需要这样处理: 6Yu海岸线网络安全资讯站
    RichEdit1?Perform(EM_UNDO,0,0);6Yu海岸线网络安全资讯站
  另外还应检查是否允许撤消,从而开启或关闭弹出菜单中的“撤消”项:6Yu海岸线网络安全资讯站
    Undo1?Enabled:=RichEdit?6Yu海岸线网络安全资讯站
    Perform(EM_CANUNDO,0,0)<>0;   6Yu海岸线网络安全资讯站
以上程序在Delphi3中调试通过。   6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
15、在主窗口中打开另一个独立的窗口,而这个被打开的窗口固定显示在..?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
procedure TForm2.FormCreate(Sender: TObject);6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
form2.Hide;6Yu海岸线网络安全资讯站
self.Parent:=form1.Panel1;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
16、SaveDialog1确认文件存不存在的办法?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
procedure TForm1.SaveDialog1CanClose(Sender: TObject; 6Yu海岸线网络安全资讯站
var CanClose: Boolean); 6Yu海岸线网络安全资讯站
begin 6Yu海岸线网络安全资讯站
if FileExists(SaveDialog1.FileName) then //如果文件已经存在 6Yu海岸线网络安全资讯站
if MessageDlg('文件已经存在,保存吗?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then 6Yu海岸线网络安全资讯站
Button2.Click ; //如果选择了覆盖,则退出,否则,重新让用户选择文件 6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
17、正确关闭一个MDI子窗口?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
Action := caFree;6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
  Delphi为一个Form的关闭行为指定了四种方式,分别是:6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
caNone 禁止Form被关闭 6Yu海岸线网络安全资讯站
caHide Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。 6Yu海岸线网络安全资讯站
caFree Form被关闭,并且释放其占用的资源。 6Yu海岸线网络安全资讯站
caMinimize Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
18、怎样记MDI子窗口不在母体运行时就被打开?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
在project下的options中forms里面除了form1外,其余的移到右边的框里,然后在调用显示的按钮下编写语句,以form2调用为例:6Yu海岸线网络安全资讯站
form2:=Tform2.create(self);6Yu海岸线网络安全资讯站
form2.show;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
19、限制FORM的大小6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
在FORM私有声明部分加上如下一行: 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
procedure WMGetMinMaxInfo( var Message:TWMGetMinMaxInfo );message WM_GETMINMAXINFO; 6Yu海岸线网络安全资讯站
在声明部分加上如下几行: 6Yu海岸线网络安全资讯站
procedure TForm1.WMGetMinMaxInfo( var Message :TWMGetMinMaxInfo ); 6Yu海岸线网络安全资讯站
begin 6Yu海岸线网络安全资讯站
with Message.MinMaxInfo^ do6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
ptMaxSize.X := 200; {最大化时宽度}6Yu海岸线网络安全资讯站
ptMaxSize.Y := 200; {最大化时高度}6Yu海岸线网络安全资讯站
ptMaxPosition.X := 99; {最大化时左上角横坐标}6Yu海岸线网络安全资讯站
ptMaxPosition.Y := 99; {最大化时左上角纵坐标}6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
Message.Result := 0; {告诉Windows你改变了 minmaxinfo}6Yu海岸线网络安全资讯站
inherited;6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
20、随机数生成法6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
Randomize;6Yu海岸线网络安全资讯站
rn:=inttostr(random(9999));6Yu海岸线网络安全资讯站
rn1:=inttostr(random(9999));6Yu海岸线网络安全资讯站
.....6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
21、怎样把程序隐藏起来,在WINDOWS界面上没有显示??6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
在application.run之前加入application.showmain:=false! 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
22、怎样将一个form1.free的form1窗体重新显示?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
form2:=TForm2.Create(application);6Yu海岸线网络安全资讯站
form2.Show;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
如果你要创建的Form2窗体能嵌入一个Panel中,指定Parent:6Yu海岸线网络安全资讯站
form2:=TForm2.Create(application);6Yu海岸线网络安全资讯站
form2.Parent:=panel1;6Yu海岸线网络安全资讯站
form2.Show;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
23、我想在bitbtn上设快捷按钮Esc,怎么办?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
procedure TForm1.BitBtn1KeyDown(Sender: TObject; var Key: Word;6Yu海岸线网络安全资讯站
Shift: TShiftState);6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if key=27 then6Yu海岸线网络安全资讯站
application.Terminate;6Yu海岸线网络安全资讯站
end; 6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
设它的cancel属性为true就行了~~6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
==============================================================================6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
24、什么叫做托盘区?6Yu海岸线网络安全资讯站
答:6Yu海岸线网络安全资讯站
托盘区就是在windows的状态栏下方显示时钟、输入法状态的地方,6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
要把你的程序显示在托盘区:6Yu海岸线网络安全资讯站
下面是一个托盘类,只要把下面粘贴到文本文件中,改成TrayIcon.pas,使用时uses TrayIcon就可以了。6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
先声明一个全局变量:6Yu海岸线网络安全资讯站
var tray:TTrayNotifyIcon;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
然后在窗体的OnCreate事件中:6Yu海岸线网络安全资讯站
tray:=TTrayNotifyIcon.Create(self);//将窗体创建为托盘6Yu海岸线网络安全资讯站
tray.Icon:=application.Icon;//定义托盘的显示图标6Yu海岸线网络安全资讯站
tray.IconVisible:=true;//托盘可见6Yu海岸线网络安全资讯站
tray.PopupMenu:=popmenu;//给托盘定义一个右击时的弹出菜单6Yu海岸线网络安全资讯站
tray.OnDblClick:=trayDblClick;//给托盘定义一个双击事件(当然要自己写了,不过多数情况只有一行,就是Form1.show);6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
unit TrayIcon;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
interface6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
uses Windows, SysUtils, Messages, ShellAPI, Classes, Graphics, Forms, Menus,6Yu海岸线网络安全资讯站
StdCtrls, ExtCtrls;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
type6Yu海岸线网络安全资讯站
ENotifyIconError = class(Exception);6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
TTrayNotifyIcon = class(TComponent)6Yu海岸线网络安全资讯站
private6Yu海岸线网络安全资讯站
FDefaultIcon: THandle;6Yu海岸线网络安全资讯站
FIcon: TIcon;6Yu海岸线网络安全资讯站
FHideTask: Boolean;6Yu海岸线网络安全资讯站
FHint: string;6Yu海岸线网络安全资讯站
FIconVisible: Boolean;6Yu海岸线网络安全资讯站
FPopupMenu: TPopupMenu;6Yu海岸线网络安全资讯站
FOnClick: TNotifyEvent;6Yu海岸线网络安全资讯站
FOnDblClick: TNotifyEvent;6Yu海岸线网络安全资讯站
FNoShowClick: Boolean;6Yu海岸线网络安全资讯站
FTimer: TTimer;6Yu海岸线网络安全资讯站
Tnd: TNotifyIconData;6Yu海岸线网络安全资讯站
procedure SetIcon(Value: TIcon);6Yu海岸线网络安全资讯站
procedure SetHideTask(Value: Boolean);6Yu海岸线网络安全资讯站
procedure SetHint(Value: string);6Yu海岸线网络安全资讯站
procedure SetIconVisible(Value: Boolean);6Yu海岸线网络安全资讯站
procedure SetPopupMenu(Value: TPopupMenu);6Yu海岸线网络安全资讯站
procedure SendTrayMessage(Msg: DWORD; Flags: UINT);6Yu海岸线网络安全资讯站
function ActiveIconHandle: THandle;6Yu海岸线网络安全资讯站
procedure OnButtonTimer(Sender: TObject);6Yu海岸线网络安全资讯站
protected6Yu海岸线网络安全资讯站
procedure Loaded; override;6Yu海岸线网络安全资讯站
procedure LoadDefaultIcon; virtual;6Yu海岸线网络安全资讯站
procedure Notification(AComponent: TComponent;6Yu海岸线网络安全资讯站
Operation: TOperation); override;6Yu海岸线网络安全资讯站
public6Yu海岸线网络安全资讯站
constructor Create(AOwner: TComponent); override;6Yu海岸线网络安全资讯站
destructor Destroy; override;6Yu海岸线网络安全资讯站
published6Yu海岸线网络安全资讯站
property Icon: TIcon read FIcon write SetIcon;6Yu海岸线网络安全资讯站
property HideTask: Boolean read FHideTask write SetHideTask default False;6Yu海岸线网络安全资讯站
property Hint: String read FHint write SetHint;6Yu海岸线网络安全资讯站
property IconVisible: Boolean read FIconVisible write SetIconVisible default False;6Yu海岸线网络安全资讯站
property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu;6Yu海岸线网络安全资讯站
property OnClick: TNotifyEvent read FOnClick write FOnClick;6Yu海岸线网络安全资讯站
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
implementation6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
{ TIconManager }6Yu海岸线网络安全资讯站
{ This class creates a hidden window which handles and routes }6Yu海岸线网络安全资讯站
{ tray icon messages }6Yu海岸线网络安全资讯站
type6Yu海岸线网络安全资讯站
TIconManager = class6Yu海岸线网络安全资讯站
private6Yu海岸线网络安全资讯站
FHWindow: HWnd;6Yu海岸线网络安全资讯站
procedure TrayWndProc(var Message: TMessage);6Yu海岸线网络安全资讯站
public6Yu海岸线网络安全资讯站
constructor Create;6Yu海岸线网络安全资讯站
destructor Destroy; override;6Yu海岸线网络安全资讯站
property HWindow: HWnd read FHWindow write FHWindow;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
var6Yu海岸线网络安全资讯站
IconMgr: TIconManager;6Yu海岸线网络安全资讯站
DDGM_TRAYICON: Cardinal;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
constructor TIconManager.Create;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
FHWindow := AllocateHWnd(TrayWndProc);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
destructor TIconManager.Destroy;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if FHWindow <> 0 then DeallocateHWnd(FHWindow);6Yu海岸线网络安全资讯站
inherited Destroy;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
procedure TIconManager.TrayWndProc(var Message: TMessage);6Yu海岸线网络安全资讯站
{ This allows us to handle all tray callback messages }6Yu海岸线网络安全资讯站
{ from within the context of the component. }6Yu海岸线网络安全资讯站
var6Yu海岸线网络安全资讯站
Pt: TPoint;6Yu海岸线网络安全资讯站
TheIcon: TTrayNotifyIcon;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
with Message do6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
{ if it’s the tray callback message }6Yu海岸线网络安全资讯站
if (Msg = DDGM_TRAYICON) then6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
TheIcon := TTrayNotifyIcon(WParam);6Yu海岸线网络安全资讯站
case lParam of6Yu海岸线网络安全资讯站
{ enable timer on first mouse down. }6Yu海岸线网络安全资讯站
{ OnClick will be fired by OnTimer method, provided }6Yu海岸线网络安全资讯站
{ double click has not occurred. }6Yu海岸线网络安全资讯站
WM_LBUTTONDOWN: TheIcon.FTimer.Enabled := True;6Yu海岸线网络安全资讯站
{ Set no click flag on double click. This will supress }6Yu海岸线网络安全资讯站
{ the single click. }6Yu海岸线网络安全资讯站
WM_LBUTTONDBLCLK:6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
TheIcon.FNoShowClick := True;6Yu海岸线网络安全资讯站
if Assigned(TheIcon.FOnDblClick) then TheIcon.FOnDblClick(Self);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
WM_RBUTTONDOWN:6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if Assigned(TheIcon.FPopupMenu) then6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
{ Call to SetForegroundWindow is required by API }6Yu海岸线网络安全资讯站
SetForegroundWindow(IconMgr.HWindow);6Yu海岸线网络安全资讯站
{ Popup local menu at the cursor position. }6Yu海岸线网络安全资讯站
GetCursorPos(Pt);6Yu海岸线网络安全资讯站
TheIcon.FPopupMenu.Popup(Pt.X, Pt.Y);6Yu海岸线网络安全资讯站
{ Message post required by API to force task switch }6Yu海岸线网络安全资讯站
PostMessage(IconMgr.HWindow, WM_USER, 0, 0);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end6Yu海岸线网络安全资讯站
else6Yu海岸线网络安全资讯站
{ If it isn’t a tray callback message, then call DefWindowProc }6Yu海岸线网络安全资讯站
Result := DefWindowProc(FHWindow, Msg, wParam, lParam);6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
{ TTrayNotifyIcon }6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
constructor TTrayNotifyIcon.Create(AOwner: TComponent);6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
inherited Create(AOwner);6Yu海岸线网络安全资讯站
FIcon := TIcon.Create;6Yu海岸线网络安全资讯站
FTimer := TTimer.Create(Self);6Yu海岸线网络安全资讯站
with FTimer do6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
Enabled := False;6Yu海岸线网络安全资讯站
Interval := GetDoubleClickTime;6Yu海岸线网络安全资讯站
OnTimer := OnButtonTimer;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
{ Keep default windows icon handy... }6Yu海岸线网络安全资讯站
LoadDefaultIcon;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
destructor TTrayNotifyIcon.Destroy;6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
if FIconVisible then SetIconVisible(False); // destroy icon6Yu海岸线网络安全资讯站
FIcon.Free; // free stuff6Yu海岸线网络安全资讯站
FTimer.Free;6Yu海岸线网络安全资讯站
inherited Destroy;6Yu海岸线网络安全资讯站
end;6Yu海岸线网络安全资讯站
6Yu海岸线网络安全资讯站
function TTrayNotifyIcon.ActiveIconHandle: THandle;6Yu海岸线网络安全资讯站
{ Returns handle of active icon }6Yu海岸线网络安全资讯站
begin6Yu海岸线网络安全资讯站
{ If no icon is loaded, then return default icon }6Yu海岸线网络安全资讯站
if (FIcon.Handle <> 0) then