鱼C论坛

 找回密码
 立即注册
查看: 2776|回复: 2

[学习笔记] 阶段性上机实践(小结)02- 零基础入门学习Delphi 011

[复制链接]
发表于 2017-8-2 22:45:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.jpg
本课是编写两个屏保程序。
V 1.00版运行时,屏幕都被程序覆盖,并将截图的桌面占据整个窗口,以欺骗用户,另有一个霓虹灯的窗口随机在桌面移动,当按下空格键时,显示edit和button控件,用以输入密码,密码正确,结束程序。
首先,form设置Borderstyle为bsNone,这样就没有标题条和最大最小按钮和边框了。设置windowstate为wsMaximized使窗口最大化。
加入一个image控件放置图片,课程中是将image的width和height设置成600和800,可以采用另一个方法,把image的align从alNone改为alClient,这样就充满整个窗口了,也不用设置左上角的位置了。另我的图片与屏幕的分辨率不同,再把stretch改为True,使之自动伸缩。
另外就是放一个label做霓虹灯效果,由于霓虹灯的练习前面已经做过,我这里改成label中内容向前滚动的效果。
建立一个timer控件,并将label.Caption的内容每次去掉前2个(一个汉字)再补到字符串的最后。

  1. procedure TForm1.Timer1Timer(Sender: TObject);

  2. begin
  3.   s := Label1.Caption;
  4.   Delete(s, 1, 2);
  5.   s1 := Copy(Label1.Caption, 1, 2);
  6.   Label1.Caption := s + s1
  7. end;
复制代码

建立edit和button控件用以输入密码,并将其visible设置为False。
为接收键盘输入,使用form的onkeydown事件,如果key=VK_SPACE则edit和button的visible改为True。
V2.0版做如下改进:
窗口置顶:
在timer中加入
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE);
或设置form的FormStyle属性为fsStayOnTop,我不知道这两者的差别,不幸的是,在wind10下,即使置顶,仍可按win键调出任务栏。
密码错误3次等待9s,这里需要另一个timer来计时。
具体程序如下:
  1. implementation

  2. {$R *.dfm}
  3. Const
  4.   password : String = 'FishC!';
  5. Var
  6.   s, s1 : string;
  7.   flag : Boolean = True;
  8.   n : integer = 3;

  9. procedure TForm1.Timer1Timer(Sender: TObject);

  10. begin
  11.   s := Label1.Caption;
  12.   Delete(s, 1, 2);
  13.   s1 := Copy(Label1.Caption, 1, 2);
  14.   Label1.Caption := s + s1;
  15.   SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE);
  16. end;

  17. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  18.   Shift: TShiftState);
  19. begin
  20.   if (Key = VK_SPACE) and (flag = True) then
  21.     begin
  22.       edit1.Visible := True;
  23.       button1.Visible := True;
  24.     end
  25.   else
  26.     begin
  27.       if flag = False then
  28.         MessageBox(handle, '错误次数太多,等待9s再输入', '警告', MB_OK or MB_ICONSTOP)
  29.       else
  30.         MessageBox(handle, '按空格键并输入密码', '提醒', MB_OK or MB_ICONWARNING);
  31.     end;

  32. end;

  33. procedure TForm1.Button1Click(Sender: TObject);
  34. begin
  35.   if (edit1.Text = password) and (n > 0) then
  36.     close
  37.   else
  38.     if n > 0 then
  39.       begin
  40.         MessageBox(handle, '密码错误', '提醒', MB_OK or MB_ICONWARNING);
  41.         n := n - 1;
  42.         edit1.Text := '';
  43.       end
  44.     else
  45.       begin
  46.         timer2.Enabled := True;
  47.         edit1.Text := '';
  48.       end;

  49.       
  50. end;

  51. procedure TForm1.Timer2Timer(Sender: TObject);
  52. begin
  53.   flag := True;
  54.   n := 3;
  55.   timer1.Enabled := False;
  56. end;

  57. end.
复制代码

将程序的扩展名改为scr,并放置在c:\windows\system下,则可作为真正的屏保程序来使用。

评分

参与人数 1鱼币 +6 收起 理由
小甲鱼 + 6

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-23 14:47:34 | 显示全部楼层
flag那一块不太明白 为什么专门写一个FLAG=FALSE的情况,小甲鱼在下面判断次数同样也是提示需要等待,那就与上面flag=false的情况重复了,而版主在下面判断次数的时候又把Edit框给空白,不提示超过次数 f反而在flag=False的情况提示等待
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-23 14:57:02 | 显示全部楼层
而且我电脑win7置顶 也可以调出win
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表