📄 qtsyba~2.c
字号:
}
break;
}
}
CurX=Tempx,CurY=Tempy;
}
/* DrawTextEx
显示字符串,字符串的宽度被限制在RW的宽度之内
x,y-显示开始的位置
String-字符串
RW-字符串显示的宽度
Co-字符的颜色
AligMent-对齐方式 0-Left,1-Center,2-Right
*/
int __strlen(char *String)
{
int i,Result=0;
for(i=0;i<(int)strlen(String);i++)
{
if(String[i]=='\n') break;
if(String[i]=='.'||String[i]=='-')
Result+=16;
else
Result+=24;
}
return Result;
}
int __strlenex(char *String)
{
int i,Result=0;
for(i=0;i<(int)strlen(String);i++)
if(String[i]!='&')
Result+=8;
return Result;
}
void DrawTextEx(int x,int y,char *String,int RW,
unsigned char Co,int AlignMent)
{
int w;
if(AlignMent<=-10) w=12*strlen(String);
else if(AlignMent<0) w=__strlen(String);
else w=__strlenex(String); //求字符串的长度
switch(AlignMent)
{
case 0:break;
case 1:x=x+(RW-w)/2;
break;
default:if(RW>w)
x=x+RW-w-3;
}
DrawText(x,y,String,Co,AlignMent);
}
//特殊显示函数
void Printf(char *String,unsigned char Co)
{
int Tempx,Tempy,k;
unsigned char TempNum;
Tempx=FontCurX,Tempy=FontCurY;
FontColor=Co;
while(*String)
{
TempNum=*String;
switch(TempNum)
{
case 0x9: Tempx+=7*Cowx;
case 0x20:Tempx+=Cowx;
String++;
continue;
case 0x0d:String++;
case 0x0a:Tempx=0;
Tempy+=Liney;
String++;
break;
default: k=ViewOne16Char(Tempx,Tempy,String);
Tempx+=k*8;
String+=k;
break;
}
if(Tempx>639){Tempy+=Liney;Tempx=0;}
if(Tempy>468)
{
Tempy-=18;
MoveScreen(0,18,639,467,0,0);
DrawBar(0,449,639,467,clBlack,0xff);
}
}
FontCurX=Tempx,FontCurY=Tempy;
}
//显示位图
void ShowBitmap(int x,int y,int w,int h)
{
int i;
unsigned char FaceBuffer[2000];
int handle;
handle=open("FDIGI.DAT",O_BINARY|O_RDONLY);
if(handle==-1)
{
printf("Error:%d-%d",errno,EMFILE);
Getkey();
return;
}
read(handle,FaceBuffer,2000);
close(handle);
FontColor=clBlack;
for(i=0;i<w/8;i++)
Put(2+x+i*8,2+y,&FaceBuffer[i*h],h);
FontColor=clBlue;
for(i=0;i<w/8;i++)
Put(x+i*8,y,&FaceBuffer[i*h],h);
}
void ShowBitmapEx(void)
{
int i;
unsigned char FaceBuffer[1200];
int handle;
handle=open("JDIGI.DAT",O_BINARY|O_RDONLY);
if(handle==-1)
{
printf("Error:%d-%d",errno,EMFILE);
Getkey();
return;
}
read(handle,FaceBuffer,1100);
close(handle);
/* Rectangle(359,307,638,457,clNavy,clNavy); //金额显示框
DrawBar3d(416,309,633,377,clNavy,0xaa, //金额
clBlack,0xaa,3,clBlack,clBlack);
DrawBar3d(416,382,633,452,clNavy,0xaa, //找零
clBlack,0xaa,3,clBlack,clBlack);
*/
FontColor=clBlack;
for(i=0;i<6;i++)
Put(364+i*8,304,&FaceBuffer[i*42],42);
for(i=0;i<6;i++)
Put(364+i*8,337,&FaceBuffer[252+i*42],42);
for(i=0;i<6;i++)
Put(364+i*8,378,&FaceBuffer[504+i*42],42);
for(i=0;i<6;i++)
Put(364+i*8,411,&FaceBuffer[756+i*42],42);
FontColor=clBlue;
for(i=0;i<6;i++)
Put(363+i*8,303,&FaceBuffer[i*42],42);
for(i=0;i<6;i++)
Put(363+i*8,336,&FaceBuffer[252+i*42],42);
for(i=0;i<6;i++)
Put(363+i*8,377,&FaceBuffer[504+i*42],42);
for(i=0;i<6;i++)
Put(363+i*8,410,&FaceBuffer[756+i*42],42);
}
/* 第四部分:控件 */
/* 本部分包含仿Windows界面的一部份控件,由于MC6.0不是面向对象的,
因此,每一个控件的数据成员使用一个结构来表示,其方法使用函数来实现.*/
//TPanel控件
//显示TPanel空件
void ShowPanel(TPanel *Panel)
{
int Off=0,sx,sy,ex,ey;
sx=Panel->Left;
sy=Panel->Top;
ex=sx+Panel->Width-1;
ey=sy+Panel->Height-1;
//画表面
DrawBar(sx,sy,ex,ey,Panel->Color,0xff); //实线填充
if(Panel->BorderStyle) //存在边界
{
Rectangle(sx,sy,ex,ey,clBlack,clBlack);
Off++;
}
if(Panel->BevelOuter) //外边界
{
Rectangle(sx+Off,sy+Off,ex-Off,ey-Off,clBlack,clWhite);
Off++;
}
if(Panel->BevelInner) //内边界
Rectangle(sx+Off,sy+Off,ex-Off,ey-Off,clWhite,clBlack);
}
//TLabel控件
void ShowLabel(TLabel *Label,char *Caption)
{
int sx,sy,ex,ey;
sx=Label->Left;
sy=Label->Top;
ex=sx+Label->Width-1;
ey=sy+Label->Height-1;
if(Caption) //如果新的内容不为NULL,更新内容
strcpy(Label->Caption,Caption);
DrawBar(sx,sy,ex,ey,Label->Color,0xff); //显示背景
if(Label->Ctrl3D) //3D效果
DrawTextEx(sx+1,sy+1,Label->Caption,ex-sx+1, //显示阴影
Label->FontBColor,Label->AlignMent);
DrawTextEx(sx,sy,Label->Caption,ex-sx+1, //显示字符
Label->FontColor,Label->AlignMent);
}
//TEdit控件
void InsertChar(char *s,char c,int Locate) //在字符串指
{ //定的位置插入
int Len,i;
if(Locate<0) return; //无效的输入
Len=strlen(s);
for(i=Len;i>=Locate;i--)
s[i+1]=s[i];
s[Locate]=c;
}
void OverWriteChar(char *s,char c,int Locate) //改写字符串
{ //中的一个字符
int Len;
Len=strlen(s);
if(Locate>=Len&&Locate<0) return; //无效的输入
s[Locate]=c;
}
void DeleteChar(char *s,int Locate) //删除字符串
{ //的某一字符
int Len,i;
if(Locate<0) return; //无效的输入
Len=strlen(s);
for(i=Locate;i<Len;i++)
s[i]=s[i+1];
}
//显示光标
void OpenCurSor(TEdit *Edit)
{
__cursormark=1;
__CurEdit=Edit;
Edit->CurMark=1-Edit->CurMark;
Line0(4+Edit->Left+Edit->CurX*8,Edit->Top+16,
12+Edit->Left+Edit->CurX*8,Edit->Color,
2,XOR_PUT,0xff);
}
//关闭光标
void CloseCurSor(TEdit *Edit)
{
__cursormark=0;
if(Edit->CurMark) //光标尚未显示
{
Edit->CurMark=0;
Line0(4+Edit->Left+Edit->CurX*8,Edit->Top+16,
12+Edit->Left+Edit->CurX*8,Edit->Color,
2,XOR_PUT,0xff);
}
}
//IsEmpty
int IsEmptyEdit(TEdit *Edit)
{
return strcmp(Edit->Text,"");
}
//EditAtt为非零时,只显示而不进入编辑状态
int TextEdit(TEdit *Edit,int Total,int EditAtt,int PassWord)
{
int Tsx,Tsy,bLoop=1,sx,sy,ex,ey,Width,l;
int Result=0;
Msg *Buffer; //定义消息缓冲指针
char Text[81],Text1[81];
//计算边界
sx=Edit->Left;
sy=Edit->Top;
ex=sx+Edit->Width-1;
ey=sy+Edit->Height-1;
Width=Edit->Width-4;
//复制到编辑缓冲区
strcpy(Text,Edit->Text);
//字符显示的位置
Tsx=sx+4,Tsy=sy+2;
//产生消息
InBuffer(-4,WM_PAINT,0,0);
if(!EditAtt)
{
Edit->CurX=strlen(Edit->Text);
Edit->CountX=Edit->CurX;
InBuffer(-4,WM_EXIT,0,0);
}
else //lijing
{
Edit->CurX=strlen(Edit->Text);
Edit->CountX=Edit->CurX;
} //
//进行消息循环
while(bLoop)
{
OpenCurSor(Edit);
Buffer=Getkey(); //接收输入
CloseCurSor(Edit);
switch(Buffer->type) //检查键的类型
{
case -4:switch(Buffer->h.RetKey) //是消息
{
case WM_PAINT: //显示控件
RectangleFill(sx,sy,ex,ey,clFuchsia,clWhite,
Edit->Color,0xff);
Rectangle(sx+1,sy+1,ex-1,ey-1,clBlack,clSilver);
if(PassWord) //按密码显示
{
l=strlen(Text); //长度
uf_strmid(Text1,"***************",1,l);
}
else
strcpy(Text1,Text);
DrawTextEx(Tsx,Tsy,Text1,Width,Edit->FontColor,0);
break;
case WM_UPDATE: //更新式显示
//清除背景
if(Edit->CurX)
DrawBar(Tsx+Edit->CurX*8-8,Tsy,ex-2,ey-2,Edit->Color,0xff);
else
DrawBar(Tsx+Edit->CurX*8,Tsy,ex-2,ey-2,Edit->Color,0xff);
if(PassWord) //按密码显示
{
l=strlen(Text); //长度
uf_strmid(Text1,"***************",1,l);
}
else
strcpy(Text1,Text);
DrawTextEx(Tsx,Tsy,Text1,Width,Edit->FontColor,0);
break;
case WM_EXIT: //结速编辑
bLoop=0;
break;
}
break;
case -1:switch(Buffer->h.RetKey) //是控制键
{
case ESCKEY: //ESC键
case F2KEY:
case TABKEY: //TAB键
case CRKEY: //回车键
strcpy(Edit->Text,Text);
InBuffer(-4,WM_PAINT,Edit->Handle,0);
InBuffer(-4,WM_EXIT,Edit->Handle,0);
// 消息返回
InBuffer(-1,Buffer->h.RetKey,Edit->Handle,0);
Result=Buffer->h.RetKey; //函数返回
break;
case BSKEY: //退格键
if(Edit->CurX>0) //光标不在0位
{
Edit->CurX--;
Edit->CountX--;
DeleteChar(Text,Edit->CurX);
InBuffer(-4,WM_UPDATE,Edit->Handle,0); //更新显示
}
break;
}
break;
case -2:switch(Buffer->h.RetKey) //是功能键
{
case LEFTKEY: //
if(Edit->CurX>0) Edit->CurX--;
break;
case RIGHTKEY:
if(Edit->CurX<Edit->CountX) Edit->CurX++;
break;
case DELETE:
//lijing
/*if(Edit->CurX<Edit->CountX)
{
Edit->CountX--;
DeleteChar(Text,Edit->CurX);
InBuffer(-4,WM_UPDATE,Edit->Handle,0); //更新显示
}
break;*/
if(Edit->CurX>0) //光标不在0位
{
Edit->CurX--;
Edit->CountX--;
DeleteChar(Text,Edit->CurX);
InBuffer(-4,WM_UPDATE,Edit->Handle,0); //更新显示
}
break;
//end
//lijing F3设为负号
case F3KEY:
{
InBuffer(0,'-',0,0);
break;
}
default:
strcpy(Edit->Text,Text);
InBuffer(-4,WM_PAINT,Edit->Handle,0);
InBuffer(-4,WM_EXIT,Edit->Handle,0);
//消息返回
InBuffer(-2,Buffer->h.RetKey,Edit->Handle,0);
break;
}
break;
case 0:if(Edit->CountX<Total) //是正常字符
{
InsertChar(Text,(char)(Buffer->h.RetKey&0xff),Edit->CurX);
Edit->CountX++;
Edit->CurX++;
InBuffer(-4,WM_UPDATE,Edit->Handle,0); //更新显示
}
break;
}
}
return Result;
}
//清空Edit中的数据
void ResetEdit(TEdit *Edit)
{
strcpy(Edit->Text,"");
Edit->CurX=0;
Edit->CountX=0;
Edit->CurMark=0;
DrawBar(Edit->Left+2,Edit->Top+2,
Edit->Left+Edit->Width-3,Edit->Top+Edit->Height-3,
Edit->Color,0xff);
}
/*TDBGrid,显示数据的表格,由多个列组成TColumn
初始化DBGrid控件 */
//定义一个TDBGrid控件
TDBGrid DBGrid;
_SPStruct *_lpSP=NULL;
unsigned char Colors[8]={clGreen,clBlack,clBlack,clBlack,
clBlack,clBlack,clBlack,clBlack};
//{clGreen,clNavy,clNavy,clNavy,
// clNavy,clNavy,clNavy,clNavy};
void InitDBGrid(int x,int y,int w,int h)
{
int i;
DBGrid.Style=1001;
DBGrid.Handle=0;
DBGrid.Left=x;
DBGrid.Top=y;
DBGrid.Width=w;
DBGrid.Height=h;
DBGrid.ColCount=8;
DBGrid.RowCount=12;
DBGrid.Col=1,DBGrid.Row=1;
DBGrid.RowHeight=20;
DBGrid.Color=clBlack;//clNavy;
DBGrid.BorderStyle=1;
DBGrid.TopRows=0;
for(i=0;i<DBGrid.ColCount;i++)
{
DBGrid.Columns[i].Style=1002;
DBGrid.Columns[i].Handle=0;
DBGrid.Columns[i].Width=SPTWidth[i];
DBGrid.Columns[i].TColor=clGreen;
DBGrid.Columns[i].TFontColor=clYellow;
strcpy(DBGrid.Columns[i].TCaption,SPTList[i]);
DBGrid.Columns[i].TAlignMent=1;
DBGrid.Columns[i].Color=Colors[i];
DBGrid.Columns[i].FontColor=clWhite;
DBGrid.Columns[i].AlignMent=0;
}
}
//显示表格
//获取单元格的坐标
void GetCellCoor(int x,int y,TRect *Rect)
{
int i;
Rect->sx=DBGrid.Left;
for(i=0;i<x;i++)
Rect->sx+=DBGrid.Columns[i].Width;
Rect->sy=DBGrid.Top;
for(i=0;i<y;i++)
Rect->sy+=DBGrid.RowHeight;
Rect->ex=Rect->sx+DBGrid.Columns[x].Width;
Rect->ey=Rect->sy+DBGrid.RowHeight;
}
//显示单元格
void DrawCell(int x,int y,char *Value,unsigned char Co,int state)
{
int AlignMent=0;
char value[51]="";
unsigned char Color;
TRect Rect;
GetCellCoor(x,y,&Rect); // 获取单元格的坐标,放入Rect中
strcpy(value,Value);
if(y) //数据区
{
Color = DBGrid.Columns[x].Color;
y+=DBGrid.TopRows;
if(y==SPLists->RecNo) Color=clBlue;
DrawBar(Rect.sx+1,Rect.sy+1,Rect.ex-1,Rect.ey-1,Color,0xaa);
if(y<=SPLists->RecordCount) //在数据行内
{
_lpSP=&(SPLists->SPList[y]); //
switch(x)
{
case 0: sprintf(value,"%d",_lpSP->RecNo); // No
AlignMent=1;
break;
case 1: strcpy(value,_lpSP->spbm); // 商品编码
AlignMent=1;
break;
case 2: strcpy(value,_lpSP->spmc); // 商品名称
break;
case 3: strcpy(value,_lpSP->jldw); // 单位
AlignMent=1;
break;
case 4: sprintf(value,"%.2f",_lpSP->sl); // 数量
AlignMent=2;
break;
case 5: sprintf(value,"%.2f",_lpSP->sj); // 售价
AlignMent=2;
break;
case 6: sprintf(value,"%.2f",_lpSP->sjsj); // 优惠价
AlignMent=2;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -