안녕하세요... 초보 인사드립니다...
[제일 중요한 질문부터 드릴께요... 게시판에 아래보면 게시물검색란이 있는데... 안되는건가요..?? 관련자료를 찾으려 검색을 해도.. 항상 '0'이네요...??]
다름이 아니오라.. 아래의 ProgressBar 와 Gauge에 관련되어 테스트를 하고 있는데..
문제가 발생했습니다..
둘다 Min값은 '0'에서 부터 Max값인 'IFileSize'까지 잡았습니다.
(이 파일은 음악파일로써.. 음악이 종료되면 100%가 되도록 하고자 합니다.)
그런데...
물론 찍어본 결과 IFileSize값은 277KByte가 들어옵니다...
그래서 For문을 277K까지 읽게 돌려놓고, 처음부터 마지막까지 읽어내는 것을 ProgressBar와 Gauge에 진행사항을 표시하려고 하는데...
277K를 다 읽기전에 100% 끝나버리네요...
277K를 다 읽어 들이는 시간에 100% 정확히(물론 약간의 차이는... 괜찮지만) 끝나게 하려면....
어떻게 처리를 해야 하는지..??
소스 좀 봐주세요.. ^^(허접한 소스 뜯어 고칠 부분이 많을 줄 압니다.)
한가지 더 궁금한 사항이 있어서요...
Thread를 만들었는데.. 중간에 정지시키고자 합니다... 어떻게..??
그리고 보시면 아시겠지만... 실행중 실행버튼을 한 번 더 누르면 다운이 되어 버리리고,
ProgressBar및 Gauge가 '0'이 되지 않는데....??
Thread때문인지요..?? 어떻게 해야 할까요..??
function ThreadFunc : integer ; stdcall;
var
i : integer;
begin
Form1.ProgressBar1.Min := 0;
Form1.ProgressBar1.Max := IFileSize;
Form1.Gauge1.MinValue := 0;
Form1.Gauge1.MaxValue := IFileSize;
Form1.Gauge1.Progress := 0;
for i := 0 to IFileSize do
begin
Form1.ProgressBar1.Position := i;
Form1.Gauge1.Progress := i;
end;
Form1.Gauge1.Progress := 0;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
//파일핸들 변수 지정
FH3 : Integer;
// aaa : String;
//ProgressBar 처리
ThreadID : DWord;
begin
Form1.Gauge1.Progress := 0;
Form1.ProgressBar1.Position := 0;
PtBreakPlayFile(aa);
if openDialog1.Execute then begin
FH1 := OpenDialog1.FileName;
end;
if FileExists(FH1) then begin
CellGrid.Cols[5].Strings[1]:= openDialog1.Filename;
CellGrid.Cols[2].Strings[1]:='PLAYSTART';
FH3 := FileOpen(OpenDialog1.FileName, fmOpenRead);
IFileSize :=FileSeek(FH3,0,2);
fileClose(FH3);
PtPlayFile(aa, pchar(FH1));
CreateThread(nil,0,@ThreadFunc,nil,0,ThreadID); //Thread 생성
end
else
begin
PtBreakPlayFile(aa);
end;
end;
그리고 님이 하고자 하는 프로그램은 음악파일이 플레이 되는 상황을 프로그레스바에 표시하고자 하는 것 같은데요....
음악파일을 어떻게 플레이 하는지가 나타나지 않아서 뭐라고 답변하기가 어렵습니다. 님이 만든 프로그램 내에서 직접 플레이를 한다면 진행상황을 표시할 수 있겠지만 다른 프로그램을 실행시켜서 플레이 한다면 진행상황을 표시하기가 어렵습니다.
그리고 님이 만든 Thread는 그냥 음악파일의 플레이 상황과 관계없이 프로그레스바만 진행시키고 종료되는 것 아닌가요?...
예를 들어 델파이에 있는 MediaPlayer컴포넌트를 사용하여 플레이하거나, DirectX를 써서 플레이 한다면 진행상황을 표시할 수 있을 것 같습니다..
좀 더 자세한 상황을 올리면 답글이 있을 것 같구요.........
이상 허접한 답변이었습니다.........