Q&A

  • Progress bar 처리에대한 질문입니다.
밑에 소스를 간단하게 설명 드리면 file시스템으로되어있는 데이타를 불러와서

하나의 file로 저장하는것입니다.

그런데 저장하는 진행상황을 표시하고 싶은데 file size를 어떻게 구해야할지

모르겠네여. 그리고 Progress Bar로 진행상황을 표시할려고 하는데 file이 5개 정도로 쪼개져 있어서 이것또한 난감하네여.

고수님들 보시고 한수가르쳐 주싶시요



procedure TFmExplorer.btDnldClick(Sender: TObject);

var

childOM,

SelOM: TOMItem;

Res: Integer;

mh : THANDLE;

stbuf : string;

szbuf : array [0..1024] of char;

i,

wl : longint;

FH1 : Integer;

iFileSize : Integer;



begin



if lvItemList.ItemFocused = NIL then Exit;

SelOM := TOMItem( lvItemList.ItemFocused.Data );

if SelOM = NIL then begin

my_MsgBox( '선택된 항목에 오류가 있어서 PC로 저장할 수 없습니다.' );

Exit;

end;

{$IFDEF HOLLY}

mh := CreateFile('C:Program FilesEchoDownloadTEST.MH',

GENERIC_WRITE,

FILE_SHARE_READ,

nil,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

0);





if mh = 0 then begin

my_MsgBox( 'CreateFile(C:Program FilesEchoDownloadTEST.MH) Failed' );

Exit;

end;

StrPcopy(szbuf, SelOM.FullSubject +';'

+ IntToStr(SelOM.ItemType) + ';'

+ SelOM.MsgId);

WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);

closehandle(mh);



strpcopy(szbuf, 'C:Program FilesEchoDownload'

+ DateToStrSelOM.AttachDate));

CreateDirectory(szbuf, nil);



if SelOM.Open <> resOK then begin

my_MsgBox( 'SelOM.Open Failed' );

Exit;

end;



wl := SelOM.List.Count - 1;

for i := 0 to wl do begin

childOM := SelOM.List.Items[i];

mh := CreateFile( PCHAR('C:Program FilesEchoDownload'

+ DateToStr(SelOM.AttachDate) + 'TEST.MH'),

GENERIC_WRITE,

FILE_SHARE_READ,

nil,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

0);



if mh = 0 then begin my_msgBox( 'CreateFile(C:Program

FilesEchoDownloadTEST.MH) Failed' );

Exit;

end;

StrPcopy(szbuf, inttostr(i) + ';'

+ SelOM.FullSubject +';'

+ IntToStr(SelOM.ItemType) + ';'

+ SelOM.MsgID + ';'

+ SelOM.Creator + ';'

+ SelOM.OrigFName + ';'

+ SelOM.MIMEType + ';'

+ IntToStr(SelOM.RawExpiryDate) + ';'

+ IntToStr(SelOM.DeferredInt) + ';'

+ IntToStr(SelOM.RawMsgFlags) + ';'

+ IntToStr(SelOM.BBAccessCount) + ';'

+ IntToStr(SelOM.ListOrder) + ';'

+ SelOM.ItemClass + ';'

+ SelOM.DirectRef + ';'

+ IntToStr(SelOM.RawMsgFlags) + ';'

+ SelOM.CCharSet + ';'

+ IntToStr(SelOM.TotalKSize) + ';'

+ SelOM.Subject + ';'

+ DateToStr(SelOM.CreateDate) + ';'

+ DateToStr(SelOM.ReplyByDate) + ';'

+ DateToStr(SelOM.AttachDate) + ';'

+ SelOM.AckId + ';'

+ IntToStr(SelOM.Size) + ';'

+ IntToStr(SelOM.AbsoluteRef) + ';'

+ IntToStr(SelOM.Flags01) + ';'

+ IntToStr(SelOM.Flags2) + ';'

+ IntToStr(SelOM.RecipId) + ';'

+ IntToStr(SelOM.RawAccessCaps) + ';');



WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);

closehandle(mh);

gUALServer.DownloadItem(childOM, 'C:Program FilesEchoDownload'

+ DateToStr(SelOM.AttachDate)

+ ''

+ 'Doc' + IntToStr(i)

+ '.dat');





end;



1  COMMENTS
  • Profile
    kylix 2000.09.15 21:25
    검색해보시면 파일크기 구하는 여러 방법이 나와 있습니다...



    꼴통 wrote:

    > 밑에 소스를 간단하게 설명 드리면 file시스템으로되어있는 데이타를 불러와서

    > 하나의 file로 저장하는것입니다.

    > 그런데 저장하는 진행상황을 표시하고 싶은데 file size를 어떻게 구해야할지

    > 모르겠네여. 그리고 Progress Bar로 진행상황을 표시할려고 하는데 file이 5개 정도로 쪼개져 있어서 이것또한 난감하네여.

    > 고수님들 보시고 한수가르쳐 주싶시요

    >

    > procedure TFmExplorer.btDnldClick(Sender: TObject);

    > var

    > childOM,

    > SelOM: TOMItem;

    > Res: Integer;

    > mh : THANDLE;

    > stbuf : string;

    > szbuf : array [0..1024] of char;

    > i,

    > wl : longint;

    > FH1 : Integer;

    > iFileSize : Integer;

    >

    > begin

    >

    > if lvItemList.ItemFocused = NIL then Exit;

    > SelOM := TOMItem( lvItemList.ItemFocused.Data );

    > if SelOM = NIL then begin

    > my_MsgBox( '선택된 항목에 오류가 있어서 PC로 저장할 수 없습니다.' );

    > Exit;

    > end;

    > {$IFDEF HOLLY}

    > mh := CreateFile('C:Program FilesEchoDownloadTEST.MH',

    > GENERIC_WRITE,

    > FILE_SHARE_READ,

    > nil,

    > CREATE_ALWAYS,

    > FILE_ATTRIBUTE_NORMAL,

    > 0);

    >

    >

    > if mh = 0 then begin

    > my_MsgBox( 'CreateFile(C:Program FilesEchoDownloadTEST.MH) Failed' );

    > Exit;

    > end;

    > StrPcopy(szbuf, SelOM.FullSubject +';'

    > + IntToStr(SelOM.ItemType) + ';'

    > + SelOM.MsgId);

    > WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);

    > closehandle(mh);

    >

    > strpcopy(szbuf, 'C:Program FilesEchoDownload'

    > + DateToStrSelOM.AttachDate));

    > CreateDirectory(szbuf, nil);

    >

    > if SelOM.Open <> resOK then begin

    > my_MsgBox( 'SelOM.Open Failed' );

    > Exit;

    > end;

    >

    > wl := SelOM.List.Count - 1;

    > for i := 0 to wl do begin

    > childOM := SelOM.List.Items[i];

    > mh := CreateFile( PCHAR('C:Program FilesEchoDownload'

    > + DateToStr(SelOM.AttachDate) + 'TEST.MH'),

    > GENERIC_WRITE,

    > FILE_SHARE_READ,

    > nil,

    > CREATE_ALWAYS,

    > FILE_ATTRIBUTE_NORMAL,

    > 0);

    >

    > if mh = 0 then begin my_msgBox( 'CreateFile(C:Program

    > FilesEchoDownloadTEST.MH) Failed' );

    > Exit;

    > end;

    > StrPcopy(szbuf, inttostr(i) + ';'

    > + SelOM.FullSubject +';'

    > + IntToStr(SelOM.ItemType) + ';'

    > + SelOM.MsgID + ';'

    > + SelOM.Creator + ';'

    > + SelOM.OrigFName + ';'

    > + SelOM.MIMEType + ';'

    > + IntToStr(SelOM.RawExpiryDate) + ';'

    > + IntToStr(SelOM.DeferredInt) + ';'

    > + IntToStr(SelOM.RawMsgFlags) + ';'

    > + IntToStr(SelOM.BBAccessCount) + ';'

    > + IntToStr(SelOM.ListOrder) + ';'

    > + SelOM.ItemClass + ';'

    > + SelOM.DirectRef + ';'

    > + IntToStr(SelOM.RawMsgFlags) + ';'

    > + SelOM.CCharSet + ';'

    > + IntToStr(SelOM.TotalKSize) + ';'

    > + SelOM.Subject + ';'

    > + DateToStr(SelOM.CreateDate) + ';'

    > + DateToStr(SelOM.ReplyByDate) + ';'

    > + DateToStr(SelOM.AttachDate) + ';'

    > + SelOM.AckId + ';'

    > + IntToStr(SelOM.Size) + ';'

    > + IntToStr(SelOM.AbsoluteRef) + ';'

    > + IntToStr(SelOM.Flags01) + ';'

    > + IntToStr(SelOM.Flags2) + ';'

    > + IntToStr(SelOM.RecipId) + ';'

    > + IntToStr(SelOM.RawAccessCaps) + ';');

    >

    > WriteFile(mh, szbuf, length(strpas(szbuf)), wl, nil);

    > closehandle(mh);

    > gUALServer.DownloadItem(childOM, 'C:Program FilesEchoDownload'

    > + DateToStr(SelOM.AttachDate)

    > + ''

    > + 'Doc' + IntToStr(i)

    > + '.dat');

    >

    >

    > end;

    >