안녕하세요?
오랫만에 글을 올리는 군요...
이번에는 저 혼자힘으로 해결할 수 있을 줄 알았는데, 너무도 이상한 문제에 부딪혔습니다.
아래의 소스를 보시면 아시겠지만,
일정한 시간내에 그림들을 바꿔가며 보여주는 컴포넌트이거든요.
일단 프로퍼티에 그림의 경로를 설정하게 하여, 그 그림의 경로를 배열로 저장한뒤
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.
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.
>