全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:984
推到 Plurk!
推到 Facebook!

请教TOLEGraphic读取图形的尺寸问题。

尚未結案
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 20:00:52 IP:218.94.xxx.xxx 未訂閱
我的一个程式用TOLEGraphic来读取gif、jpg文件,不知为何他的尺寸与windows资源管理器读出的尺寸不同。 程式码如下: var ole1: TOleGraphic; fs: TFileStream; begin if not FileExists(afile) then Exit; PreviewImage.Visible := false; try ole1 := TOleGraphic.Create; fs := TFileStream.Create(afile, fmOpenReadWrite); try ole1.LoadFromStream(fs); PreviewImage .Picture .Assign (ole1) except end; finally ole1.Free; fs.Free; end; PreviewImage.Visible := True; end; 显示出来比windows显示要小一些,不知何故?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-29 01:39:42 IP:61.31.xxx.xxx 未訂閱
原因不求甚解?我懶..... 主要是轉換單位誤差所產生的問題。 大概跟SetWindowExtEx、SetViewPortExtEx....有點相關吧!    OK. 快睡著了!..... 有一個簡單的作法:
Type
  TMyOleGraphic = Class(TOleGraphic)
  protected
    function GetHeight: Integer; override;
    function GetWidth: Integer; override;
  end;    function TMyOleGraphic.GetHeight: Integer;
begin
  Result := Round(((MMHeight * 0.001)/2.54)* 96);
end;    function TMyOleGraphic.GetWidth: Integer;
begin
  Result := Round(((MMWidth * 0.001)/2.54)* 96);
end;
用 TMyOleGraphic取代 TOleGraphic 就這樣吧!大概跟DC 解析等等相關吧。...
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-29 09:44:52 IP:218.94.xxx.xxx 未訂閱
十分感谢wameng大哥。 我的电脑是120 DPI,把96改成120,就跟windows显示的一样了。 不过另外有个问题。 我如何知道用户设置的是120DPI还是96DPI啊?
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-29 10:32:46 IP:218.94.xxx.xxx 未訂閱
找到api了 function TMyOleGraphic.GetHeight: Integer; begin Result := Round(((MMHeight * 0.001)/2.54)* GetDeviceCaps(getdc(GetDesktopWindow ),LOGPIXELSX))); end; function TMyOleGraphic.GetWidth: Integer; begin Result := Round(((MMWidth * 0.001)/2.54)* GetDeviceCaps(getdc(GetDesktopWindow ),LOGPIXELSY))); end; 不过TOLEGraphic似乎不支持gif动画
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-29 11:43:22 IP:61.222.xxx.xxx 未訂閱
procedure TForm1.Button2Click(Sender: TObject);
var
  DC :HDC;
begin
  DC := GetDC(0);
  Showmessage(inttostr(GetDeviceCaps(DC, LOGPIXELSX)));
  ReleaseDC(0,DC);
end;
可以這樣取得。
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-29 13:02:49 IP:61.222.xxx.xxx 未訂閱
想當然爾。.... AniGif 可用TGifImage 到處都有得下。
pcsoftdiy
一般會員


發表:8
回覆:14
積分:4
註冊:2005-03-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-29 13:50:32 IP:218.94.xxx.xxx 未訂閱
TGifImage的示例程式bug多多,不太敢用
系統時間:2024-04-26 20:02:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!