Tải bản đầy đủ (.pdf) (10 trang)

.LUAÂÄN VAÊN TOÁT NGHIEÄPif ((buf = farmalloc(size)) == NULGiáo trình hướng dẫn tìm hiểu cách tạo các cổng giao tiếp trong các thiết bị ngoại vi phần 5L) { OutMessage( docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (182.67 KB, 10 trang )

LUAÂÄN VAÊN TOÁT NGHIEÄP

67

if ((buf = farmalloc(size)) == NULL)
{
OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x1,y,x,y1,buf);
OutMessage("Click a drive name in the list");
}

setfillstyle(SOLID_FILL,WHITE);
bar(x1,y,x,y1);
setcolor(BLACK);
rectangle(x,y,x1,y1);
setcolor(LIGHTGRAY);
line(x-1,y+1,x-1,y1-1);
line(x1+1,y1-1,x-1,y1-1);
setcolor(BLACK);

char Temp[3];
for(int i=0;i<NumDisk;i++)
{
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);


}
for(i=0;i<NumDisk;i++)
if(*DName==DiskName[i])
break;
setfillstyle(SOLID_FILL,BLUE);
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
setcolor(YELLOW);
sprintf(Temp,"%c:",DiskName[i]);
outtextxy(x1+10,y+10+i*14,Temp);

LPEVENT LpEvent;

do
{
ShowMouse();
delay(50);
LpEvent=GetEvent();
HideMouse();
if(LpEvent->Msg==1)
for(i=0;i<NumDisk;i++)
if(LpEvent->Posx>=x1+1&&LpEvent->Posx<=x-1&&LpEvent-
>Posy>=y+7+i*14&&LpEvent->Posy<=y+7+14+i*14)
{
bar(x1+1,y+7+14*i,x-1,y+7+14+14*i);
*DName=DiskName[i];
setdisk((int)*DName-65);
}
}while(LpEvent->Msg!=1);
putimage(x1,y,buf,COPY_PUT);
farfree(buf);

return LpEvent;
}
//
char *FileType(TEXTBOX *b)
{
char s[15];
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

68

b->Path();
b->OutTextBox();
b->GetS(s);
return s;
}

VI.CLASS LIST.HPP
#include "textbox.hpp"
#include "disklist.hpp"
#if !defined __LIST__
#define __LIST__
class LIST
{
private:
int l,t,r,b;
int Color;
public:
void InitList(int x1,int y1,int x2,int y2,int Color);
void Show();

int Press(char s[],TEXTBOX *Box,unsigned *attrib,char
*DiskName,char *DName,char *ftype);
int GetList(char s[],TEXTBOX *Box,unsigned *attrib,char
*DiskName,char *DName,TEXTBOX *Box2,char *ftype);
int Left(){return l;};
int Right(){return r;};
int Top(){return t;};
int Bottom(){return b;};
};
#endif

VII.MODULE LIST.CPP

#include <graphics.h>
#include <dir.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include "mouse.h"
#include "list.hpp"
//
void LIST::InitList(int x1,int y1,int x2,int y2,int col)
{
Color=col;
l=x1;t=y1;r=x2;b=y2;
}

//
void LIST::Show()
{
setfillstyle(SOLID_FILL,Color);
bar(l,t,r,b);
int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;
setcolor(WHITE);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);

setfillstyle(SOLID_FILL,WHITE);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,WHITE);
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

69

setfillstyle(SOLID_FILL,Color);

setcolor(BLACK);
line(l,b,r,b);
line(r,t,r,b);
setcolor(WHITE);
line(l,t,r,t);
line(l,t,l,b);
}
//
int LIST::Press(char s[],TEXTBOX *Box,unsigned *attrib,char

*DiskName,char *DName,char *ftype)
//tra ve 0:nhan Cancel
//tra ve 1:nhan OK
{
TEXTBOX Box2;

HideMouse();

int hor=(r-l)/3,ver=(b-t)/3;
int x1=l+hor,x2=r-hor,x3=l+(r-l)/2,y1=t+ver,y2=t+ver,y3=b-ver;

setcolor(BLACK);
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x1,y1,x3,y3);

setfillstyle(SOLID_FILL,BLACK);
floodfill(x1+(x2-x1)/2,y1+(y3-y2)/2,BLACK);
setfillstyle(SOLID_FILL,Color);

setcolor(WHITE);//vien cho nut bi nhan
line(l,b,r,b);
line(r,t,r,b);
setcolor(BLACK);//vien cho nut bi nhan
line(l,t,r,t);
line(l,t,l,b);

int k=0;
*DName=Disk(DiskName);
do

{
char buffer[MAXPATH];
k=GetList(s,Box,attrib,DiskName,DName,&Box2,ftype);
getcwd(buffer, MAXPATH);
Box->GetS_in(buffer);
Box->OutTextBox();
}while(k==2);
ShowMouse();
return k;//k=0: nhan Cancel, k=1:nhan OK
}
//
int LIST::GetList(char s[],TEXTBOX *Box,unsigned *attrib,char
*DiskName,char *DName,TEXTBOX *Box2,char *ftype)
{
int x11=l-300,y11=b,x12=r+100,y12=b+300;//toa do bang ngoai
//600 x 300 la kich thuoc bang ngoai

int Kiemtra=0;//bien de kiem tra truong hop chon OK truoc khi chon
file
LPEVENT lpEvent;//kiem tra bang thu muc

void far *buf;//con tro chi vung luu tru man hinh
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

70

unsigned int size = imagesize(x11,y11,x12,y12);
if ((buf = farmalloc(size)) == NULL)
{

OutMessage("Error: not enough heap space in save_screen().");
getch();
closegraph();
exit(1);
}
else
{
getimage(x11,y11,x12,y12, buf);
OutMessage("Choose a file name then click OK to accept or click
Cancel to ignore");
}

setfillstyle(SOLID_FILL,LIGHTGRAY);//GREEN);
bar(x11,y11,x12,y12);//ve bang ngoai

int x21=x11+5,y21=y11+5,x22=x12-120,y22=y12-77;//75;//toa do bang
liet ke
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(x21,y21,x22,y22);//ve bang liet ke

int x31=x22+30,y31=y21+50,x32=x31+60,y32=y31+20;//toa do nut OK

int x41=x31,y41=y31+100,x42=x32,y42=y32+100;

setcolor(WHITE);

line(x11,y11,x12,y11);
line(x11,y11,x11,y12);

line(x22+2,y21-2,x22+2,y22+2);//vien cho bang liet ke

line(x21-1,y22+2,x22+2,y22+2);//vien cho bang liet ke

line(x31,y31,x32,y31);//vien cho nut OK
line(x31,y31,x31,y32);//vien cho nut OK

line(x41,y41,x42,y41);//vien nut Cancel
line(x41,y41,x41,y42);//vien nut Cancel

setcolor(BLACK);

line(x12,y11,x12,y12);
line(x11,y12,x12,y12);

line(x21,y21,x22,y21);//vien cho bang liet ke
line(x21,y21,x21,y22);//vien cho bang liet ke

line(x32,y31,x32,y32);//vien cho nut OK
line(x31,y32,x32,y32);//vien cho nut OK

line(x42,y41,x42,y42);//vien nut Cancel
line(x41,y42,x42,y42);//vien nut Cancel

setcolor(DARKGRAY);
line(x21-1,y21-1,x22+1,y21-1);//vien cho bang liet ke
line(x21-1,y21-1,x21-1,y22+1);//vien cho bang liet ke

setcolor(BLUE);

char S3[]="OK",S4[]="Cancel";


.
LUAÂÄN VAÊN TOÁT NGHIEÄP

71

int x33=x31+(x32-x31-textwidth(S3))/2;
int y33=y31+(y32-y31-textheight(S3))/2;
outtextxy(x33,y33,S3);

int x44=x41+(x42-x41-textwidth(S4))/2;
int y44=y41+(y42-y41-textheight(S4))/2;
outtextxy(x44,y44,S4);

struct ffblk FF;
struct ffblk Lis[200];

char path[100];
getcurdir(0, path);
int done;

int x51=x21,x52=x51+130,y51=y22+28,y52=y51+20;
int x61=x21,x62=x12-5,y61=y12-25,y62=y12-5;
Box2->InitTextBox(x51,y51,x52,y52,WHITE,LIGHTBLUE,"Type of file");
Box2->GetS_in(ftype);
Box2->OutTextBox();
setcolor(BLACK);
line(x51+1,y51+1,x52-1,y51+1);
line(x51+1,y51+1,x51+1,y52-1);
setcolor(LIGHTGRAY);
line(x51+1,y52-1,x52-1,y52-1);

line(x52-1,y51+1,x52-1,y52-1);

setfillstyle(SOLID_FILL,WHITE);
bar(x61,y61,x62,y62);
setcolor(BLACK);
line(x61,y61,x62,y61);
line(x61,y61,x61,y62);
line(x61+1,y61+1,x62-1,y61+1);
line(x61+1,y61+1,x61+1,y62-1);
setcolor(LIGHTGRAY);
line(x62-1,y61+1,x62-1,y62-1);
line(x61+1,y62-1,x62-1,y62-1);

//DiskBox
int x71=x52+30,x72=x22,y71=y51,y72=y52;//toa do DiskBox
char DNameTemp[4];


sprintf(DNameTemp,"%c:",*DName);
TEXTBOX DiskBox;
DiskBox.InitTextBox(x71,y71,x72,y72,WHITE,LIGHTBLUE,"Driver name");
DiskBox.GetS_in(DNameTemp);
DiskBox.OutTextBox();
setcolor(BLACK);
line(x71+1,y71+1,x72-1,y71+1);
line(x71+1,y71+1,x71+1,y72-1);
setcolor(LIGHTGRAY);
line(x71+1,y72-1,x72-1,y72-1);
line(x72-1,y71+1,x72-1,y72-1);


LIST DriList;//nut nhan chon o dia
int x81=x72-19,y81=y71+2,x82=x72-2,y82=y72-2;
DriList.InitList(x81,y81,x82,y82,LIGHTGRAY);
DriList.Show();

done=findfirst("*",&FF,FA_DIREC);
Lis[0]=FF;
int dem=0;//cho vong while tim file, la so files + thu muc tim duoc
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

72

if((int)Lis[0].ff_attrib!=16) dem-=1;
while (!done)//nhap ten file vao mang cau truc FF
{
dem++;
done = findnext(&FF);
if(!done)
Lis[dem]=FF;
if((int)Lis[dem].ff_attrib!=16) dem-=1;
}
dem+=1;
int NumDir=dem;
done=findfirst(ftype,&FF,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_ARCH);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);

while (!done)//nhap ten file vao mang cau truc FF
{

dem++;
done = findnext(&FF);
for(int j=0;j<strlen(FF.ff_name)+1;j++)
Lis[dem].ff_name[j]=tolower(FF.ff_name[j]);

}

int NumFile=dem-NumDir;
char Note[50];//[30];
setcolor(BLACK);
sprintf(Note,"%d files and %d directories found",NumFile,NumDir);
outtextxy(x61+5,y61+(y62-y61-textheight(Note))/2,Note);

int temp=y11,Dem=0,i;
if(dem==0)//truong hop dia hoan toan trong, neu la mot thu muc rong
thi khong thuoc truong hop nay
strcpy(Lis[0].ff_name,"");

int tempx1=x21+1,tempx2=x22,tempy1=y11+14-3,tempy2=y11+14+8+3;

setcolor(BLACK);//LIGHTGREEN);
for(i=0;i<15&&i<dem;i++)//hien thi ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);

setfillstyle(SOLID_FILL,BLUE);
bar(tempx1,tempy1,tempx2,tempy2);
setcolor(YELLOW);
outtextxy(x21+8,y11+14,Lis[0].ff_name);//vach sang tai vi tri dau
tien


int oldx1=tempx1,oldy1=tempy1,oldx2=tempx2,oldy2=tempy2;
int over=0;
int ppp=0;
do//while(1);
{
ShowMouse();
lpEvent = GetEvent();//lay bien co chuot
int j,nhanphim;
if(kbhit())//kiem tra co nhan phim
{ nhanphim=getch();
if(nhanphim==0)
nhanphim=getch();
}
{
switch(nhanphim)
{
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

73

case 81://page down
if(ppp++ >12)//17)
ppp=0;
else goto MouseDown;
case 80: // mui ten xuong
nhanphim=1;
MouseDown:
HideMouse();
if(Dem<14/*9*/&&Dem<dem-1)j=Dem+1;//&&Dem<dem-1

else
{
over++;
if((over)>=(dem-14))//9))
{
over ;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over-1;(i<15+over-1)&&i<dem;i++)//xoa ten
file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;(i<14+over)&&i<dem;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
}
goto Arrowkey;//break;
case 73://page up
if(ppp++ >12)
ppp=0;
else goto MouseUp;
case 72: // len
nhanphim=1;
MouseUp:
HideMouse();
if(Dem>0)
j=Dem-1;

else
{
over ;
if((over)<=-1)
{
over++;
goto End;
}
j=Dem;
setcolor(WHITE);//MAGENTA);
temp=y11;
for(i=over+1;i<15+over+1;i++)//xoa ten file
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
setcolor(BLACK);//LIGHTGREEN);
temp=y11;
for(i=over;i<15+over;i++)
outtextxy(x21+8,temp+=14,Lis[i].ff_name);
}
goto Arrowkey;//break;
case 13://Enter
nhanphim=1;
goto nutOK;
case 27://Esc
nhanphim=1;
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

74

goto nutCancel;

}

}//if(kbhit())
/////////////////////////////////// xet mouse
if(lpEvent->Msg==1)//neu nhan phim trai chuot
{
if(lpEvent->Posx>=x51&&lpEvent->Posx<=x52&&lpEvent-
>Posy>=y51&&lpEvent->Posy<=y52)
{//get type of file
HideMouse();
OutMessage("Enter type of file then press Enter to accept or
Esc to ignore.");
Box2->Path();//lay Path vao bien S cua TEXTBOX
Box2->GetS(ftype);
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
return 2;
}

if(lpEvent->Posx>=x71&&lpEvent->Posx<=x72-20&&lpEvent-
>Posy>=y71&&lpEvent->Posy<=y72)
{//change disk trong diskbox

int ExistDisk;
char OldDisk=toupper(*DName);
OutMessage("Enter name of drive");
do
{
HideMouse();

DiskBox.Path();//lay Path vao bien S cua TEXTBOX
DiskBox.GetS(DNameTemp);
DNameTemp[0]=toupper(DNameTemp[0]);
*DName=DNameTemp[0];
ExistDisk=0;
for(int k=0;k<strlen(DiskName);k++)
if(*DName==DiskName[k])
ExistDisk=1;
if(ExistDisk!=1)
{
OutMessage("Press Enter to do the action again or Esc to
ignore");
if(OutError("Disk not exist")==0)
{
*DName=OldDisk;
break;
}
}
ShowMouse();
}while(!ExistDisk);
if(OldDisk!=*DName) //truong hop chon dia bang nut
pulldown nhung lai chon kieu go ky tu vao textbox
setdisk(*DName-'A');
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
ShowMouse();
return 2;
}


if(lpEvent->Posx>=x81&&lpEvent->Posx<=x82&&lpEvent-
>Posy>=y81&&lpEvent->Posy<=y82)
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

75

{//choose disk
HideMouse();
setcolor(BLACK);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
char OldDName=*DName;
CheckChooseDisk(DiskName,DName,lpEvent,x82,y82);
if(OldDName!=*DName)
{
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);
return 2;
}
setcolor(WHITE);
line(x81,y81,x82,y81);
line(x81,y81,x81,y82);
line(x81+1,y81-1,x81+1,y82-1);
ShowMouse();
}

for(j=0;j<15&&j<dem&&lpEvent->Msg==1;j++)//kiem tra file chon
neu co chon

if(tempx1<= lpEvent->Posx&&tempx2>=lpEvent->Posx)
if((tempy1+j*14)<=lpEvent->Posy&&(tempy2+j*14)>=lpEvent-
>Posy)
{
Arrowkey:
HideMouse();
setfillstyle(SOLID_FILL,WHITE);//MAGENTA);
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(BLACK);//LIGHTGREEN);
outtextxy(x21+8,oldy1+3,Lis[Dem+over].ff_name);
setfillstyle(SOLID_FILL,BLUE);
oldx1=tempx1,
oldy1=tempy1+j*14,oldx2=tempx2,oldy2=tempy2+j*14;
bar(oldx1,oldy1,oldx2,oldy2);
setcolor(YELLOW);
outtextxy(x21+8,oldy1+3,Lis[j+over].ff_name);

_dos_getfileattr(Lis[j+over].ff_name,attrib);

strcpy(s,Lis[j+over].ff_name);
if(strcmp(s,".")==0) strcpy(s,"\\");
Dem=j;
End:
Kiemtra=1;//bao hieu co nhan vao list
}
if(lpEvent->Msg==1&&(j==15)&&tempx1<= lpEvent-
>Posx&&tempx2>=lpEvent->Posx&&(tempy1+j*14)<=lpEvent-
>Posy&&(tempy2+j*14)>=lpEvent->Posy)
//truong hop vet tro file o cuoi bang list va nhap chuot ngay
ben duoi vet tro

{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseDown;
}
if(lpEvent->Msg==1&&(j==15)&&tempx1<= lpEvent-
>Posx&&tempx2>=lpEvent->Posx&&(tempy1-14)<=lpEvent->Posy&&(tempy2-
14)>=lpEvent->Posy)
.
LUAÂÄN VAÊN TOÁT NGHIEÄP

76

//truong hop vet tro file o dau bang list va nhap chuot ngay
ben tren vet tro
{
lpEvent->Posx=x11;
lpEvent->Posy=y11;
delay(50);
goto MouseUp;
}
if(lpEvent->Msg==1&&x31<= lpEvent->Posx&&y31<=lpEvent-
>Posy&&x32>=lpEvent->Posx&&y32>=lpEvent->Posy)
nutOK:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);


if(Kiemtra!=1)
strcpy(s,Lis[0].ff_name);
if(strcmp(s,".")==0)
{
strcpy(s,"\\");
*attrib=16;
}
if(*attrib==16)
{
chdir(s);
return 2;
}
Show();
ShowMouse();
OutMessage("Click OK to send file.");
return 1 ;//bao da co chon file
}
if(lpEvent->Msg==1&&x41<= lpEvent->Posx&&y41<=lpEvent-
>Posy&&x42>=lpEvent->Posx&&y42>=lpEvent->Posy)
nutCancel:
{
HideMouse();
putimage(x11,y11,buf,COPY_PUT);
farfree(buf);

Cancel:
Show();
ShowMouse();
OutMessage("Click mouse to chose action");
return 0;

}
}
if(lpEvent->Msg==2)
{
delay(100);
goto nutOK;
}
}while(1);
}
//

VIII. CLASS MOUSE.H

#if !defined(__MOUSE_H__)
#define __MOUSE_H__

#include <dos.h>
.

×