📄 qtsyba~1.c
字号:
case 7: sprintf(value,"%.2f",_lpSP->je); // 金额
AlignMent=2;
break;
}
}
DrawTextEx(Rect.sx+2,Rect.sy+2,value,DBGrid.Columns[x].Width,Co,AlignMent);
}
else
{
DrawBar(Rect.sx+1,Rect.sy+1,Rect.ex-1,Rect.ey-1,
DBGrid.Columns[x].TColor,0xff);
DrawTextEx(Rect.sx+1,Rect.sy+2,value,DBGrid.Columns[x].Width,Co,
DBGrid.Columns[x].TAlignMent);
}
}
//显示标题
void DrawTitle(void)
{
int i;
for(i=0;i<DBGrid.ColCount;i++)
DrawCell(i,0,DBGrid.Columns[i].TCaption,DBGrid.Columns[i].TFontColor,0);
}
//显示合计行
void DrawSum(int Att)
{
char value[11];
if(!Att)
{
DrawBar(2,286,24,304,DBGrid.Columns[0].Color,0xff);
DrawTextEx(25,287,"合计笔数",72,clWhite,1);
DrawBar(360,286,434,304,DBGrid.Columns[3].Color,0xff);
DrawTextEx(360,287,"优惠额",84,clWhite,1);
DrawTextEx(502,287,"应收额",68,clWhite,1);
}
//显示记录数
sprintf(value,"%d",SPLists->RecordCount);
DrawBar(100,286,320,300,DBGrid.Columns[1].Color,0xff);
DrawTextEx(102,287,value,120,clWhite,0);
if(Att<2)
{
//显示顾客要付的金额
sprintf(value,"%.2f",SPLists->ysje);
DrawBar(416,309,633,377,clNavy,0xff);
DrawTextEx(416,314,value,216,clYellow,-2);
}
//显示优惠额
sprintf(value,"%.2f",SPLists->spje-SPLists->ysje);
DrawBar(450,286,504,304,DBGrid.Columns[2].Color,0xff);
DrawTextEx(452,287,value,57,clWhite,2);
//应付金额
sprintf(value,"%.2f",SPLists->spje);
DrawBar(580,286,637,304,DBGrid.Columns[2].Color,0xff);
DrawTextEx(582,287,value,58,clWhite,2);
//清空找零区域
//DrawBar(416,382,633,452,clNavy,0xff);
}
//显示一列
void DrawCol(int x)
{
int i;
for(i=1;i<DBGrid.RowCount-1;i++)
DrawCell(x,i,"OK",DBGrid.Columns[i].FontColor,0);
}
//显示一行
void DrawRow(int y)
{
int i;
//通常情况下,y相当于记录号
//滚屏判断
for(i=0;i<DBGrid.ColCount;i++)
DrawCell(i,y,"",DBGrid.Columns[i].FontColor,0);
}
//显示数据
void DrawFixed(void)
{
int i;
for(i=1;i<DBGrid.RowCount-1;i++)
DrawRow(i);
DrawSum(0);
}
//
void DrawFixedEx(void)
{
int i;
for(i=1;i<DBGrid.RowCount-1;i++)
DrawRow(i);
DrawSum(2);
}
void PaintDBGrid(void)
{
int i,x;
int sx,sy,ex,ey;
sx=DBGrid.Left;
sy=DBGrid.Top;
ex=sx+DBGrid.Width-1;
ey=sy+DBGrid.Height-1;
DrawBar(sx,sy,ex,ey,DBGrid.Color,0xff);
//显示竖线
x=sx;
for(i=0;i<DBGrid.ColCount;i++)
{
Line(x,sy,x,ey,clSilver,1,COPY_PUT,0xff);
x+=DBGrid.Columns[i].Width;
}
//显示横线
x=DBGrid.Top;
for(i=0;i<DBGrid.RowCount;i++)
{
Line(sx,x,ex,x,clSilver,1,COPY_PUT,0xff);
x+=DBGrid.RowHeight;
}
if(DBGrid.BorderStyle) //显示边界
Rectangle(sx,sy,ex,ey,clSilver,clSilver);
DrawTitle(); //显示台头
DrawFixed(); //显示数据
}
//
int __MoveScreen(int *y)
{
int m,l,i,n;
n=*y;
//减去列头行和合计行
l=DBGrid.RowCount-2; //数据行数
if(n>DBGrid.TopRows&&n<=l+DBGrid.TopRows)
{
*y=*y-DBGrid.TopRows;
return 1; //可见行
}
if(n<=DBGrid.TopRows) //向下滚动
{
m=DBGrid.TopRows-n+1; //向下滚动的行数
DBGrid.TopRows-=m; //顶部不可见行减少
if(m>=l) //滚动行数大于等于整屏
DrawFixed(); //重新显示所有数据
else
{
MoveScreen(0,87,639,86+(l-m)*DBGrid.RowHeight,
0,87+m*DBGrid.RowHeight);
for(i=1;i<=m;i++) //重庆显示被滚动的行
DrawRow(i); //显示某行
}
}
else
{
m=n-l-DBGrid.TopRows; //滚动的行数
DBGrid.TopRows+=m; //顶部不可见行增加
if(m>=l)
DrawFixed(); //重新显示所有数据
else
{
MoveScreen(0,87+m*DBGrid.RowHeight,639,85+l*DBGrid.RowHeight,0,87);
for(i=l-m;i<=l;i++) //重庆显示被滚动的行
DrawRow(i); //显示某行
}
}
return 0;
}
//显示表格数据
void DrawDBGrid(int DrawAtt,int n)
{
switch(DrawAtt)
{
case 0: PaintDBGrid();//显示全部
break;
case 1: DrawFixed(); //显示数据
break;
case 2: DrawSum(1); //显示合计行
break;
case 3: if(__MoveScreen(&n)) DrawRow(n); //显示某行
DrawSum(1);
break;
case 4: DrawCol(n); //显示某列
break;
case 5: if(__MoveScreen(&n)) DrawRow(n); //显示某行
break;
case 6: DrawFixedEx();
}
}
//显示标题
void ShowTitle(void) //
{
}
//显示收银员等
void ShowSyj_Name(void)
{
DrawText(368,10,"收银机:",clBlack,1);
DrawText(424,10,g_syjh,clBlue,1);
}
void ShowSyy_Name(void)
{
DrawText(368,36,"收银员:",clBlack,1);
DrawText(424,36,Syy_Name,clBlue,1);
}
void ShowBc_Name(void)
{
DrawText(484,10,"班 次:",clBlack,1);
DrawText(540,10,g_bc,clBlue,1);
DrawText(595,37,g_gz_modeex,clBlack,1);
DrawText(594,36,g_gz_modeex,clNone,1);
}
void ShowLsh_No(void)
{
char value[5];
DrawText(484,36,"流水号:",clBlack,1);
sprintf(value,"%d",SPLists->lsh);
DrawBar(540,36,588,54,clSilver,0xff);
DrawText(540,36,value,clBlue,1);
}
void ShowSyInf(void)
{
Rectangle(359,5,633,58,clNavy,clNavy);
ShowSyj_Name();
ShowSyy_Name();
ShowBc_Name();
ShowLsh_No();
}
//登录函数
//显示按钮
void ShowButton(TButton *Button,int Att)
{
int sx,sy,ex,ey,off;
unsigned char color;
sx=Button->Left;
sy=Button->Top;
ex=sx+Button->Width;
ey=sy+Button->Height;
if(Button->Ctl3D)
RectangleFill(sx,sy,ex,ey,clSilver,clBlack,clSilver,0xff);
Rectangle(sx+1,sy+1,ex-1,ey-1,clWhite,clMaroon);
off=(Button->Height-16)/2;
color=Button->FontColor;
if(Button->State&&Att)
color=clYellow;
DrawTextEx(sx,sy+off,Button->Caption,Button->Width,color,1);
}
//
void Window(int sx,int sy,int ex,int ey,unsigned char color,
char *caption,int Att)
{
//定义两个按钮
TButton OkButton={2001,3,0,0,68,23,clSilver,clBlack,"确定",1,0};
TButton CancelButton={2001,4,0,0,68,23,clSilver,clBlack,"取消",1,0};
int k;
if(!Att)
k=(ex-sx-144)/3;
else
k=(ex-sx-72)/2;
OkButton.Left=sx+k;
OkButton.Top=ey-38;
CancelButton.Left=ex-k-72;
CancelButton.Top=ey-38;
GetImage(sx,sy,ex,ey);
DrawBar3d(sx,sy,ex-3,ey-3,color,0xff,clBlack,0xff,3,clGreen,clGreen);
RectangleFill(sx+3,sy+3,ex-6,sy+23,clBlack,clWhite,clNavy,0xff);
DrawText(sx+5,sy+5,caption,clWhite,1);
ShowButton(&OkButton,0); //显示按钮
if(!Att)
ShowButton(&CancelButton,0);
}
//消息框
int MsgBox(int sx,int sy,int ex,int ey,unsigned char color,
char *caption,int Att)
{
int k;
Msg *Message;
Window(sx,sy,ex,ey,color,"提示",Att);
k=sy+(ey-sy)/2-12;
DrawText(sx+32,k,caption,clBlack,1);
k=2;
while(k==2)
{
Message = Getkey();
if(Message->type==-1)
switch(Message->h.RetKey)
{
case ESCKEY:k=0;
break;
case CRKEY: k=1;
break;
}
}
PutImage(sx,sy);
return k;
}
//信息框
int MsgBoxEx(char *caption,int Att)
{
int l,w;
w=strlen(caption)*8+96-Att*16;
l=(640-w)/2;
w+=l;
return MsgBox(l,120,w,240,clSilver,caption,Att);
}
//密码输入窗口(PW-密码),成功时返回1,否则返回0
int InPutPassWord(char *PW)
{
int sx=200,sy=120,ex=439,ey=240;
Msg *Message;
int bLoop=2;
TEdit PWEdit={2002,1,sx+96,sy+48,120,22,clWhite,clBlack,"",0,0,0,0,1};
Window(sx,sy,ex,ey,clSilver,"密码输入",0);
DrawText(sx+16,sy+50,"请输入密码",clBlack,1);
InBuffer(-1,EDITPASSW,0,0);
while(bLoop==2)
{
Message=Getkey();
switch(Message->h.RetKey)
{
case EDITPASSW:TextEdit(&PWEdit,10,1,1);
break;
case CRKEY: if(!strcmp(PW,PWEdit.Text)) //密码正确
bLoop=1;
else MsgBoxEx("密码错误!",1);
break;
case ESCKEY: bLoop=0;
}
if(bLoop==2&&!BiosKey()) InBuffer(-1,EDITPASSW,0,0);
}
PutImage(sx,sy);
return bLoop;
}
//系统锁定
void SysLock(void)
{
Msg *Message;
char value[11];
int j=0;
Window(200,120,439,240,clSilver,"系统锁定",1);
DrawText(216,166,"你可以直接关闭计算机电源.",clBlack,1);
while(1)
{
Message=Getkey();
if(Message->h.RetKey==BSKEY&&j>0)
{
j--;
value[j]='\0';
}
else
if(j<10)
{
value[j++]=(char)Message->h.LKey;
value[j]='\0';
if(!strcmp(value,"159357258")) break;
}
}
PutImage(200,120);
}
//收银员登录
short Login(void)
{
int bLoop=2,lCount=3; //登录计数
char value[31];
//定义两个标签
TLabel UserLabel={2003,0,224,160,50,22,clSilver,clBlack,clYellow,0,"收银员代码",0};
TLabel PassWLabel={2003,0,224,194,50,22,clSilver,clBlack,clYellow,0,"收银员密码",0};
TLabel LoginLabel={2003,0,240,224,120,22,clSilver,clBlue,clYellow,0,"",0};
//定义两个编辑框
TEdit UserEdit={2002,1,308,158,100,22,clWhite,clBlack,"",0,0,0,0,1};
TEdit PassWEdit={2002,2,308,192,100,22,clWhite,clBlack,"",0,0,0,0,1};
//定义两个按钮
TButton OkButton={2001,3,224,245,72,23,clSilver,clBlack,"确定",1,0};
TButton CancelButton={2001,4,344,245,72,23,clSilver,clBlack,"取消",1,0};
//定义消息指针
Msg *Message;
//保存屏幕区域
GetImage(176,120,463,288);
DrawBar3d(179,120,460,283,clSilver,0xff,
clBlack,0xff,3,clBlack,clBlack);
RectangleFill(182,123,457,143,clBlack,clWhite,clNavy,0xff);
DrawText(184,125,"登录...",clWhite,1);
//显示标签
ShowLabel(&UserLabel,NULL);
ShowLabel(&PassWLabel,NULL);
//显示输入框
TextEdit(&UserEdit,10,0,0);
TextEdit(&PassWEdit,10,0,1);
//显示按钮
ShowButton(&OkButton,0);
ShowButton(&CancelButton,0);
//
InBuffer(-2,EDITUSER,0,0);
//消息循环
while(bLoop>1)
{
Message=Getkey();
switch(Message->type)
{
case -2: switch(Message->h.RetKey) //是功能键
{
case EDITUSER:
TextEdit(&UserEdit,10,1,0);
break;
case EDITPASSW:
TextEdit(&PassWEdit,10,1,1);
break;
case WM_LOGIN: //收银员登录
strcpy(Syy_No,UserEdit.Text);
strcpy(Syy_mm,PassWEdit.Text);
bLoop=sql_login();
lCount--;
if(!bLoop&&lCount) //登录失败
{
sprintf(value,"你还有%d次登录机会!",lCount);
ShowLabel(&LoginLabel,value);
bLoop=2;
InBuffer(-2,EDITUSER,0,0);
}
break;
case ALT_C:
InBuffer(-1,ESCKEY,0,0);
break;
case ALT_O:
InBuffer(-1,CRKEY,PassWEdit.Handle,0);
break;
default:InBuffer(-2,EDITUSER,0,0);
}
break;
case -1: switch(Message->h.RetKey) //是控制键
{
case CRKEY: //登录
switch(Message->x)
{
case 1: //是UserEdit
InBuffer(-2,EDITPASSW,0,0);
break; //焦点移动到密码编辑框
case 2: //是PassWEdit
case 3: //是确定按钮
InBuffer(-2,WM_LOGIN,0,0); //
break; //发送登录消息
case 4:
InBuffer(-1,ESCKEY,0,0); //
break;
default:InBuffer(-2,EDITUSER,0,0);
}
break;
case TABKEY:
case F2KEY:
if(Message->x==2)
InBuffer(-2,EDITUSER,0,0);
else
InBuffer(-2,EDITPASSW,0,0);
break;
}
break;
default:InBuffer(-2,EDITUSER,0,0);
}
}
PutImage(176,120);
return bLoop;
}
//功能列表
//CallAtt为调用方式
int CallFun(int CallAtt,unsigned char Color)
{
TButton FButtons[12]=
{{2001,1,4,390,50,21,clSilver,Color,"下班",0,0},
{2001,1,54,390,50,21,clSilver,Color,"交班",0,0},
{2001,1,104,390,50,21,clSilver,Color,"检查",0,0},
{2001,1,154,390,50,21,clSilver,Color,"挂起",0,0},
{2001,1,204,390,50,21,clSilver,Color,"解挂",0,0},
{2001,1,254,390,50,21,clSilver,Color,"暂停",0,0},
{2001,1,304,390,50,21,clSilver,Color,"打折",0,0},
{2001,1,4,412,72,21,clSilver,Color,"当班统计",0,0},
{2001,1,76,412,72,21,clSilver,Color,"销售凭证",0,0},
{2001,1,148,412,62,21,clSilver,Color,"计算器",0,0},
{2001,1,210,412,72,21,clSilver,Color,"打开钱箱",0,0},
{2001,1,282,412,72,21,clSilver,Color,"系统设置",0,0}};
int i,k,bLoop=1;
Msg *Message;
//显示
Rectangle(1,388,357,435,clBlack,clWhite);//功能列表框
FButtons[0].State=1;
for(i=0;i<12;i++)
ShowButton(&FButtons[i],i==0&&CallAtt);
if(CallAtt)
{
k=0;
FButtons[0].State=1;
while(bLoop)
{
Message=Getkey();
switch(Message->type)
{
case -1://控制键
switch(Message->h.RetKey)
{
case WM_SHOWBUTTON:
ShowButton(&FButtons[Message->x],1);
break;
case CRKEY:
InBuffer(-4,CN_XB+k,k,0);
bLoop=0;
break;
case TABKEY:
FButtons[k].State=0;
InBuffer(-1,WM_SHOWBUTTON,k,0);
k+=Message->x;
k=(k<0)?11:k;
k=(k>11)?0:k;
FButtons[k].State=1;
InBuffer(-1,WM_SHOWBUTTON,k,0);
break;
case NEXTROW://zh
FButtons[k].State=0;
InBuffer(-1,WM_SHOWBUTTON,k,0);
k=fmod(k+7,12);
FButtons[k].State=1;
InBuffer(-1,WM_SHOWBUTTON,k,0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -