Q&A

  • [컴포넌트]Iamge 컴포넌트에 대한 것입니다.
안녕하세요?

오랫만에 글을 올리는 군요...



이번에는 저 혼자힘으로 해결할 수 있을 줄 알았는데, 너무도 이상한 문제에 부딪혔습니다.

아래의 소스를 보시면 아시겠지만,

일정한 시간내에 그림들을 바꿔가며 보여주는 컴포넌트이거든요.



일단 프로퍼티에 그림의 경로를 설정하게 하여, 그 그림의 경로를 배열로 저장한뒤

UpdateClock에서 일정한 배열을 인덱스를 체크하여 그림들을 각각 보이게 하려고 했습니다.

근데, 항상 마지막 것만 보이고 앞의 것들은 보이지 않습니다.



어떻게 하면 될까요?





unit Im;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls;



type

TIm = class(TImage)

private

FPicName : String;

FTimer : TTimer;

t : String;

chk : Integer;

i : Integer;

PicNum : Integer;

PicPath : array[1..50] of String;

r1, r2 : String;

tmpString : String;

procedure SetPicName(value : String);

protected

procedure UpdateClock(Sender : TObject);

public

constructor Create(AOwner: TComponent); override;

published

property PicName : String read FPicName write SetPicName;

end;



procedure Register;



implementation



procedure TIm.SetPicName(value:String);

var

ch : String;

t : String;

tmp : Integer;

a : Integer;

begin

If value <> FPicName then

begin

FPicName := value;

Update;

end;



PicPath[i] := FPicName;

Inc(i);



tmpString := tmpString + ' ' + IntToStr(i) + ' ' + PicPath[i-1];



ShowMessage(tmpString);

ch := InputBox('잘못된 File Path의 수정',

'File Path의 번호를 쓰시오',

'0');

tmp := StrToInt(ch);

If ch <> '0' then

begin

ch := InputBox('잘못된 File Path의 수정',

'File Path를 쓰시오',

'File Path?');

PicPath[tmp] := ch;

end;



for a := 1 to i - 1 do

t := t + ' ' + IntToStr(a) + ' ' + PicPath[a];



ShowMessage(t + IntToStr(i));

//end;

end;





constructor TIm.Create(AOwner: TComponent);

begin

inherited Create(AOwner);



i := 1;

chk := 1;



if csDesigning in ComponentState then

begin

end

else

begin

FTimer := TTimer.Create (self);

FTimer.OnTimer := UpdateClock;

FTimer.Interval := 100;

FTimer.Enabled := True;

end;

end;



procedure TIm.UpdateClock(Sender : TObject);

begin

If chk < 3 then

begin

Self.Picture.LoadFromFile(PicPath[chk]);

Inc(chk);

end

else

begin

Self.Picture.LoadFromFile(PicPath[chk]);

chk := 1;

end;

end;





procedure Register;

begin

RegisterComponents('Samples', [TIm]);

end;



end.



1  COMMENTS
  • Profile
    초보자 2000.05.19 03:02
    Time이 너무 작아서 빨리 지나가는건 아닐지요..

    Time시간을 조금 늘려보시는건 어떨지요..

    TTime.Interval은 아마도 1/1000초일 거에요..





    양은주 wrote:

    > 안녕하세요?

    > 오랫만에 글을 올리는 군요...

    >

    > 이번에는 저 혼자힘으로 해결할 수 있을 줄 알았는데, 너무도 이상한 문제에 부딪혔습니다.

    > 아래의 소스를 보시면 아시겠지만,

    > 일정한 시간내에 그림들을 바꿔가며 보여주는 컴포넌트이거든요.

    >

    > 일단 프로퍼티에 그림의 경로를 설정하게 하여, 그 그림의 경로를 배열로 저장한뒤

    > UpdateClock에서 일정한 배열을 인덱스를 체크하여 그림들을 각각 보이게 하려고 했습니다.

    > 근데, 항상 마지막 것만 보이고 앞의 것들은 보이지 않습니다.

    >

    > 어떻게 하면 될까요?

    >

    >

    > unit Im;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > ExtCtrls;

    >

    > type

    > TIm = class(TImage)

    > private

    > FPicName : String;

    > FTimer : TTimer;

    > t : String;

    > chk : Integer;

    > i : Integer;

    > PicNum : Integer;

    > PicPath : array[1..50] of String;

    > r1, r2 : String;

    > tmpString : String;

    > procedure SetPicName(value : String);

    > protected

    > procedure UpdateClock(Sender : TObject);

    > public

    > constructor Create(AOwner: TComponent); override;

    > published

    > property PicName : String read FPicName write SetPicName;

    > end;

    >

    > procedure Register;

    >

    > implementation

    >

    > procedure TIm.SetPicName(value:String);

    > var

    > ch : String;

    > t : String;

    > tmp : Integer;

    > a : Integer;

    > begin

    > If value <> FPicName then

    > begin

    > FPicName := value;

    > Update;

    > end;

    >

    > PicPath[i] := FPicName;

    > Inc(i);

    >

    > tmpString := tmpString + ' ' + IntToStr(i) + ' ' + PicPath[i-1];

    >

    > ShowMessage(tmpString);

    > ch := InputBox('잘못된 File Path의 수정',

    > 'File Path의 번호를 쓰시오',

    > '0');

    > tmp := StrToInt(ch);

    > If ch <> '0' then

    > begin

    > ch := InputBox('잘못된 File Path의 수정',

    > 'File Path를 쓰시오',

    > 'File Path?');

    > PicPath[tmp] := ch;

    > end;

    >

    > for a := 1 to i - 1 do

    > t := t + ' ' + IntToStr(a) + ' ' + PicPath[a];

    >

    > ShowMessage(t + IntToStr(i));

    > //end;

    > end;

    >

    >

    > constructor TIm.Create(AOwner: TComponent);

    > begin

    > inherited Create(AOwner);

    >

    > i := 1;

    > chk := 1;

    >

    > if csDesigning in ComponentState then

    > begin

    > end

    > else

    > begin

    > FTimer := TTimer.Create (self);

    > FTimer.OnTimer := UpdateClock;

    > FTimer.Interval := 100;

    > FTimer.Enabled := True;

    > end;

    > end;

    >

    > procedure TIm.UpdateClock(Sender : TObject);

    > begin

    > If chk < 3 then

    > begin

    > Self.Picture.LoadFromFile(PicPath[chk]);

    > Inc(chk);

    > end

    > else

    > begin

    > Self.Picture.LoadFromFile(PicPath[chk]);

    > chk := 1;

    > end;

    > end;

    >

    >

    > procedure Register;

    > begin

    > RegisterComponents('Samples', [TIm]);

    > end;

    >

    > end.

    >