[r]
(1)LUÂÄN VĂN TỐT NGHIỆ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;
{
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)
{
(2)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);
(3)LUÂÄN VĂN TỐT NGHIỆ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);
{
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 bang ngoai //600 x 300 la kich thuoc bang ngoai
int Kiemtra=0;//bien de kiem tra truong hop chon OK truoc chon file
LPEVENT lpEvent;//kiem tra bang thu muc
(4)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 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 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);
(5)LUÂÄN VĂN TỐT NGHIỆ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 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;
(6){//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(>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 ben duoi vet tro
{
lpEvent->Posx=x11; lpEvent->Posy=y11; delay(50);
goto MouseDown; }
if(>Msg==1&&(j==15)&&tempx1<=
(7)LUÂÄN VĂN TỐT NGHIỆP 76 //truong hop vet tro file o dau bang list va nhap chuot 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 ;//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