Q&A

  • [답변]TImage로 이미지를 슬라이드쇼처럼 진행시킬려면... (물고기나라님의 질문)
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
>...........
0  COMMENTS