線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1865
推到 Plurk!
推到 Facebook!

請教有關TGIFImage 的delay 的問題

答題得分者是:senso
sc47
一般會員


發表:2
回覆:4
積分:1
註冊:2005-03-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-10-21 21:37:45 IP:124.10.xxx.xxx 訂閱
    以下程式,取得的 gifExt->Delay 都是 0,請教要取得正確的 Delay 值,要怎麼寫呢?謝謝指導。
TGIFImage *gif=new TGIFImage;
OpenDialog1->Execute();
gif->LoadFromFile(OpenDialog1->FileName);
Image1->Picture->Assign(gif);
for (int i=0;iImages->Count;i ) {
TGIFGraphicControlExtension *gifExt=new TGIFGraphicControlExtension(gif->Images->SubImages[i]);
ShowMessage(gifExt->Delay);
}

taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-10-22 10:06:04 IP:122.116.xxx.xxx 訂閱
試試在迴圈裡加入Application->ProcessMessages();
sc47
一般會員


發表:2
回覆:4
積分:1
註冊:2005-03-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-10-22 10:41:51 IP:124.9.xxx.xxx 訂閱
加入 Application->ProcessMessages();之後,取得的值仍是 0,謝謝您。
===================引 用 taishyang 文 章===================
試試在迴圈裡加入Application->ProcessMessages();
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-10-22 16:43:49 IP:122.116.xxx.xxx 訂閱
不要用ShowMessage,改用其他元件顯示數據看看
sc47
一般會員


發表:2
回覆:4
積分:1
註冊:2005-03-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-10-23 19:49:07 IP:124.9.xxx.xxx 訂閱
有用Label顯示,一樣得到 0 ,謝謝指導。
===================引 用 taishyang 文 章===================
不要用ShowMessage,改用其他元件顯示數據看看
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-10-26 09:54:49 IP:61.219.xxx.xxx 訂閱
不好意思,delphi不熟,我用c++寫~

[code cpp]
Image1->Picture->LoadFromFile(....);
TGIFImage *gif = NULL;
gif = dynamic_cast(Image1->Picture->Graphic);
if (gif != NULL)
{
Memo1->Clear();
for (int i=0;i < gif->Images->Count; i )
{
Memo1->Lines->Add(gif->Images->Frames[i]->GraphicControlExtension->Delay);
}
}

[/code]
sc47
一般會員


發表:2
回覆:4
積分:1
註冊:2005-03-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-10-26 10:23:27 IP:124.9.xxx.xxx 訂閱
程式編譯之後,會出現錯誤:'Frames' is not a member of  'TGIFImageList'
不知道是不是 TGIFImage 的版本不同所致?
感謝指導。
===================引 用 senso 文 章===================
不好意思,delphi不熟,我用c 寫~

[code cpp]
Image1->Picture->LoadFromFile(....);
TGIFImage *gif = NULL;
gif = dynamic_cast(Image1->Picture->Graphic);
if (gif != NULL)
{
Memo1->Clear();
for (int i=0;i < gif->Images->Count; i )
{
Memo1->Lines->Add(gif->Images->Frames[i]->GraphicControlExtension->Delay);
}
}

[/code]
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-10-26 11:24:47 IP:61.219.xxx.xxx 訂閱
我用的是C++Builder2007

可能版本不同吧? 因為我也找不到SubImages

Delay會都是0的原因,在new TGIFGraphicControlExtension的時候會把DelayTime設成0
請參考GIFImg.pas,如下code

所以不應該new,應該直接去找Images的某個成員的GraphicControlExtension

[code delphi]
constructor TGIFGraphicControlExtension.Create(AFrame: TGIFFrame);
begin
inherited Create(AFrame);

FGCExtension.BlockSize := 4;
FGCExtension.PackedFields := $00;
FGCExtension.DelayTime := 0;
FGCExtension.TransparentColorIndex := 0;
FGCExtension.Terminator := 0;

if (Frame <> nil) then
begin
if (Frame.GCE = nil) then
Frame.GCE := Self
else
Warning(gsWarning, sMultipleGCE);
end;
end;

[/code]

編輯記錄
senso 重新編輯於 2010-10-25 21:38:54, 註解 無‧
senso 重新編輯於 2010-10-25 21:40:28, 註解 無‧
sc47
一般會員


發表:2
回覆:4
積分:1
註冊:2005-03-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-11-06 22:48:28 IP:124.9.xxx.xxx 訂閱
謝謝指導,已經解決了。直接用 
gif->Images->SubImages[0]->GraphicControlExtension->Delay 就可以了。

===================引 用 senso 文 章===================
我用的是C Builder2007

可能版本不同吧? 因為我也找不到SubImages

Delay會都是0的原因,在new TGIFGraphicControlExtension的時候會把DelayTime設成0
請參考GIFImg.pas,如下code

所以不應該new,應該直接去找Images的某個成員的GraphicControlExtension

[code delphi]
constructor TGIFGraphicControlExtension.Create(AFrame: TGIFFrame);
begin
inherited Create(AFrame);

FGCExtension.BlockSize := 4;
FGCExtension.PackedFields := $00;
FGCExtension.DelayTime := 0;
FGCExtension.TransparentColorIndex := 0;
FGCExtension.Terminator := 0;

if (Frame <> nil) then
begin
if (Frame.GCE = nil) then
Frame.GCE := Self
else
Warning(gsWarning, sMultipleGCE);
end;
end;

[/code]

系統時間:2017-12-15 2:48:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!