鱼C论坛

 找回密码
 立即注册
查看: 3075|回复: 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个(一个汉字)再补到字符串的最后。
procedure TForm1.Timer1Timer(Sender: TObject);

begin
  s := Label1.Caption;
  Delete(s, 1, 2);
  s1 := Copy(Label1.Caption, 1, 2);
  Label1.Caption := s + s1
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来计时。
具体程序如下:
implementation

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

procedure TForm1.Timer1Timer(Sender: TObject);

begin
  s := Label1.Caption;
  Delete(s, 1, 2);
  s1 := Copy(Label1.Caption, 1, 2);
  Label1.Caption := s + s1;
  SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE);
end;

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

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (edit1.Text = password) and (n > 0) then
    close
  else
    if n > 0 then
      begin
        MessageBox(handle, '密码错误', '提醒', MB_OK or MB_ICONWARNING);
        n := n - 1;
        edit1.Text := '';
      end
    else
      begin
        timer2.Enabled := True;
        edit1.Text := '';
      end;

      
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  flag := True;
  n := 3;
  timer1.Enabled := False;
end;

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-11-24 06:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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