unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
Chk_Sec: Byte;
Animation:Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Chk_Sec = 10 then // 10초간 입력이 되질 않았다면
Timer1.Interval := 5000 // 타이머 이벤트 실행 주기를 5초로 잡는다.
Else
Timer1.Interval := 1000; // 아니면 타이머 이벤트 실행 주기를 1초로 잡는다.
If Timer1.Interval = 1000 then // 타이머 이벤트 실행 주기가 1초면
Chk_Sec := Chk_Sec + 1 // 1초마다 Chk_Sec를 증가시킨다.
Else
begin
Animation := Animation+1;
If Animation = 6 then
Animation := 0;
Image1.Picture.LoadFromFile('C:SoulBoardGameDATAIMAGETurning0'+IntToStr(Animation)+'.bmp');
end;
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Timer1.Interval := 1000;
Chk_Sec := 0
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Timer1.Interval := 0;
Chk_Sec := 0
end;
end.
---------------------------------------------------------------------
전체 소스를 통채로 올립니다.
Form1의 기본속성에 KeyPreview 를 True 로 두고
Timer1의 기본 속성에 Enabled 를 True로,
Interval 을 1000으로 두었습니다.
저같은 경우라면 이렇게 하겠습니다만...
약간의 문제점(이미지의 폴더를 입맛대로 바꿀 수 없는 점... MouseMove시나
Drag시에 작동하지 않는 점... 등등...)이
있기는 하지만 조금만 머리쓰면 해결될 것이라서 크게 신경쓰지 않습니다.
허접하긴 하지만 이걸 약간 바꿔보시면 조금 도움이 될 수 있지 않을까 합니다.
>꼭 화면보호기 기능 같은데요. ^^;
>현재 TImage로 특정 폴더에 이미지들를 가져와서 보여주는건 됩니다.
>
>문제는 사용자가 원하는 시간동안 딜레이해서 슬라이드쇼처럼 진행하는 부분입니다.
>
>지금은 무식하게 유저의 딜레이시간 입력없이
>임의로 5초의 배수시간마다 다음이미지로 가게 해났습니다.
>
>깔삼하게 코딩이 안되네요 ㅠㅠ
>
>도와주세요.
>
>P.S 일정시간 키값 입력이 없으면 슬라이드쇼 진행을 하고 아무키라도 입력 받으면 멈추는 기능은 어떻게 할 수 있을런지 한 수 부탁드립니다.
>
>아래는 소스에서 발췌한 주요 부분입니다.
>// 파일 이름 가져오는 부분
> r := FindFirst('C:Data*.jpg', FaAnyfile, DirInfo);
> while r = 0 do begin
> if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
> (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
> cb.Items.Add(DirInfo.Name);
> r := FindNext(DirInfo);
> end;
>
>// 타어머 안에서 코딩부분
>giCnt <- 이미지 순서 번호
> if lsTime = '00' then // 00초
> begin
> imgBanner.Picture.LoadFromFile('C:Data'+cb.Items.Strings[giCnt]);
> inc(giCnt);
> end
> else
> if lsTime = '05' then // 05초
> begin
> imgBanner.Picture.LoadFromFile('C:Data'+cb.Items.Strings[giCnt]);
> inc(giCnt);
> end
>...........