⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtsyba~2.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 5 页
字号:
		}
	       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 + -