关于一个抽奖程序在循环滚动中按下回车键或者按下停止按钮让循环停止的实现

七岁小鬼 七岁小鬼 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
单位要小弟我做一个简单的抽奖程序。
实现基本也很简单,一个按钮开始抽奖,另一个按钮按下后就抽出一个号码。
但是小弟在实现过程中发现按下开始按钮后(本来是BUTTON1),停止按钮却怎么也按不了了(停止按钮本来是BUTTON2)。
于是上网搜罗了一下,想换为键盘钩子HOOK来实现预期目的;结果换为键盘钩子后发现问题依旧!!!
在抽奖的过程中按下回车键,只能实现在整个for循环完毕后sign的值才会改变。。。
完蛋了。。。无语了。。。希望那位大侠可以拉兄弟一把啊。。。感谢感谢!!!


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma link "Excel_2K_SRVR"
//---------------------------------------------------------------------------
static HINSTANCE hDLL; // DLL句柄
typedef void __stdcall (*DLLFUN)(HWND,bool);
DLLFUN DLLSetHook;
static const myMessage=2000;
static const SecondPar=1;
//---------------------------------------------------------------------------
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString ExcelFileName = GetCurrentDir()+"\\source_file\\test.xls";
if(!FileExists(ExcelFileName))
{
Application->MessageBox("报表模板文件不存在,无法打开!","错误",MB_ICONSTOP|MB_OK);
return;
}

try
{
Ex = Variant::CreateObject("Excel.Application");
}
catch(...)
{
Application->MessageBox("无法启动Excel","错误",MB_ICONSTOP|MB_OK);
return;
}

Ex.OlePropertySet("Visible",false);
Ex.OlePropertyGet("WorkBooks").OleProcedure("Open",ExcelFileName.c_str());
Wb = Ex.OlePropertyGet("ActiveWorkBook");
Sheet = Wb.OlePropertyGet("ActiveSheet");

hDLL=LoadLibrary((LPCTSTR)"Project2.dll"); // DLL文件名:Project2.dll
if(hDLL==NULL)
{
ShowMessage("DLL: 不能加载!程序退出。");
exit(1);
}

DLLSetHook = (DLLFUN)GetProcAddress(hDLL,"SetHook");
if(DLLSetHook==NULL)
{
ShowMessage("DLL: 函数没找到!程序退出。");
FreeLibrary(hDLL);
exit(1);
}
DLLSetHook(this->Handle,true);

sign = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=1;i<=100;i++)
{
for(int j=1;j<=10;j++)
ST1->Caption = Sheet.OlePropertyGet("Cells",i,1).OlePropertyGet("Value");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Wb.OleProcedure("Close");
Ex.OleFunction("Quit");

DLLSetHook(NULL,false); // 卸下HOOK
FreeLibrary(hDLL); // 卸下DLL
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
for(int i=1;i<=100;i++)
{
if (sign == 0)
for(int j=1;j<=10;j++)
ST1->Caption = Sheet.OlePropertyGet("Cells",i,1).OlePropertyGet("Value");
}
}
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
if((Msg.message==WM_KEYDOWN)&&(Msg.wParam==13))
sign = 1;
//ShowMessage(" 收到HOOK按键消息!\n\n 【键虚拟码】:"+IntToStr(Msg.wParam));

}
//---------------------------------------------------------------------------
...全文

相关推荐

Python简易滚动抽奖界面程序

使用Tkinter —— Python 的标准 GUI 库, 实现简易幸运转盘式抽奖界面。

淹死的大白鲨

C# WinForms年会照片抽奖程序:从设计到落地全解析

随机抽取工具是各类活动现场提升氛围的核心技术,其底层依赖随机数与事件驱动机制。在C# WinForms桌面开发中,通过Random类实现无重复抽取,结合图片预加载、滚动减速算法与快捷键控制,即可构建稳定流畅的交互体验。这类工具不仅应用于企业年会抽奖,还能扩展至课堂点名、活动展示等场景。文章从需求拆解出发,详细讲解如何利用C# WinForms实现一个支持照片滚动的年会抽奖程序,包括员工信息建模、候选池管理、全屏展示、结果导出,并总结现场高频踩坑点与优化方案,为开发者提供可直接复用的工程实践参考。

GreedyAbyss

unity 抽奖系统,就是三个或者一个刷刷刷滚动最后定格,一样就中奖那个

unity (unity5.6写的))抽奖系统,就是三个或者一个刷刷刷滚动最后定格,一样就中奖那个,能指定结果,运行后按z键开始,改的一个无限scroll的版本,当时急着用来着,现在也懒得写了,要想三个或者9个格子的复制就行。有啥留言,看到会回复...别加qq了大哥们,累呀。我是来蹭积分的好嘛...

l304847944

年会滚动照片抽奖小程序

不需要数据库,数据都是静态的,两个页面,滚动照片抽奖,规则:抽人发红包,先抽一个幸运者不需要发红包,再抽奖,有100,200,300,500,1000,5种红包,每个人发红包总和不能超过2000

斑目晴信

Python使用Tkinter实现滚动抽奖器效果

年底,抽奖这个话题很多人都会讨论,都希望可以中奖。 接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器。 一、Tkinter简介 Tkinter 是 Python 的标准 GUI(Graphical User Interface,图形用户接口)库,Python 使用 Tkinter 可以快速地创建 GUI 应用程序。 在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用。在 Python2 中,这个库叫 Tkinter ,在 Python3 中,这个库叫 tkinter ,首字母大小写不相同,在导包时需要注意。 虽然 Pyt

weixin_38644780
评论 10
收藏 已收藏
分享
返回顶部