大富翁都的些什么人,我的问题有7,8天都没答出来。(10分)

  • 主题发起人 主题发起人 sdl
  • 开始时间 开始时间
S

sdl

Unregistered / Unconfirmed
GUEST, unregistred user!
我曾经非常信任大富翁,常来这儿提出或回答一些问题,但是最近我问过一个问题“image.picture在读一个图片时,如何显示进度条?”但是已经有7,8天了,也没有人帮我解决。希望有哪位高手能帮我解决它,有50分在等您。
 
分数越多,回答越快
 
估计大富翁论坛上有不少懒人, 总想着天上掉馅饼... ^_*

其实读Picture要什么进度条显示嘛, 如果要, 也可以就放一个TTimer来
驱动一下, 自己估一下大约需要多少时间, 然后设置一个合适的Interval;
进度条从1~100, ttimer的ontimer显示:

if progressbar1.position<=90 then
progressbar1.step;

而在程序中:
timer1.enabled:=true;
image1.picture:=xxx;
timer1.enabled:=false;
progressbar1.position:=progressbar1.max;
sleep(100);
progressbat1.hide;
 
是啊,其实这是一个很烦但是其实没什么意思的问题,
如果你想做一个能真正跟踪image载入进程的进度条,
那几乎是不可能的,唯一的办法就是自己重写整个TImage,
如果要求不严格,那就有很多办法可以欺骗一下,
呵呵,就像上面的办法。
 
>>大富翁都的些什么人,我的问题有7,8天都没答出来
简直是笑话

sdl -- 登记日期7月8日,那个问题也是7月8日提出的,

“我曾经非常信任大富翁”
--4天时间也算曾经,我看真是“曾经沧海难为水”了。

“常来这儿提出或回答一些问题”
--除了那个问题,没有别的,更没有回答过任何问题。

“但是已经有7,8天了”
--7月8日到7月12日是7天还是8天? :-)

最后,加入大富翁的哪条规定写着有义务回答问题?

想必这位老兄用新的名字注册,可惜一生气就说漏了嘴 ^*^
 
温柔一刀在这里也给这位sdl一刀?呵呵……
 
to 温柔一刀:
您老别, 毕竟是新手, 稍微说说就行了, 我听着我也受不了.

 
大富翁上象wlq這樣的初學菜鳥居多,如果您認為這里的水平太差,建議您去

別的站點
 
to sdl:
不知你的图片有多大,居然需要进度条来显示读取进度?做程序并不是看用的控件多
就好,相反,程序需要简洁!
你若真的想用,可以象Iknow的提议做,不过若换个性能不同的机器,可能就不好用
了,呵呵。不过,你可以用流的方式来显示读取进度!
 
温一刀,偶对你的景仰 ()#*$U@#*$&amp;*&amp;
 
顺便给你一个龌鹾的方法:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
ProgressBar1: TProgressBar;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
const
bufsize = 2048;
var
bmpStream,tmpStream:TMemoryStream;
bmpLength,LeftSize:LongInt;
buf:array [0..bufsize-1] of char;
Max:Integer;
begin
bmpStream :=TMemoryStream.Create;
tmpStream :=TMemoryStream.Create;
bmpStream.LoadFromFile('d:/backup/xxxx.bmp'); //读取源文件
bmpLength :=bmpStream.Size;
if bmpLength < bufsize
then LeftSize :=bufsize
else LeftSize :=bmpLength;
bmpStream.Position :=0;
tmpStream.Position :=0;
ProgressBar1.Position :=0;
ProgressBar1.Max :=600;
Max :=ProgressBar1.Max;
while LeftSize > 0 do //模拟显示进度
begin
if LeftSize>bufsize
then begin
bmpStream.ReadBuffer(buf,bufsize);
tmpStream.WriteBuffer(buf,bufsize);
ProgressBar1.Position :=Trunc(ProgressBar1.Position + (bufsize / bmpLength)* Max);
end
else begin
bmpStream.ReadBuffer(buf,LeftSize);
tmpStream.WriteBuffer(buf,LeftSize);
ProgressBar1.Position :=Trunc(ProgressBar1.Position + (LeftSize / bmpLength)* Max);
end;
LeftSize :=LeftSize - bufsize;
end ;
ProgressBar1.Position :=ProgressBar1.Max;
tmpStream.Position :=0;
Image1.Picture.Bitmap.LoadFromStream(tmpStream);
bmpStream.Free;
tmpStream.Free;
end;

end.
 
TJPEGImage提供了此功能。
 
如果言语过重,有所冒犯,还请见谅。
问题没有人回答,心里着急,也可以理解。
可是也不要帖这种阴阳怪气的帖子。

关键是我希望净化一下大富翁的空气,
不要有太多无聊的帖子。

这一刀重一点,以儆效尤。

回到这个问题,我觉得lczhuohuo说的已经
很全面了,没什么要补充的。说说onprogress这个事件,
delphi Help写得很清楚,不是每种图像格式都支持,
而且该事件的参数含义也不统一,不一定是我们想象的那样,
因此即使有,也不一定能用来显示进度。
 
各位虾哥,小弟冒犯了。
我是一时兴起,才写下了这个贴子,目的是有人给我一个答案。
大家看到了,我这个贴子才给了大家10分,所以也没办法给各位加分,如有需要,请到我的另外那个贴子,给各位一点小小的回报!并且希望gcq一定要去,你是专家!
 
to sdl:
谢谢!呵呵
 
这个问题我已经回答一次了,大不了再抄copy一次给大家,不过都是从delphi的帮助中
copy过来的,没有加回车,大家凑合着看吧。
OnProgress:
Note:The PercentDone parameter is only an approximation. With some image formats, the value of PercentDone may actually decrease from the value in previous events, as the graphic object discovers there is more work to do. property IncrementalDisplay: Boolean;
Description
Set IncrementalDisplay to True on large compressed images that take a long time to load or on images that may be altered by a computationally slow process. When IncrementalDisplay is True, partial renderings of the image are drawn periodically during slow operations such as loading. Set IncrementalDisplay to False to wait until the entire operation is complete before drawing the image. For some classes of graphic objects, an OnProgress event occurs at various points during slow operations. If IncrementalDisplay is True, the OnProgress event occurs immediately after the approximate image is drawn. If IncrementalDisplay is False, OnProgress occurs, but the image is not updated. 能不能触发OnProgress事件应该是与图形文件的格式有关,我试了一下,如果是jpeg图的话,
在OnProgress事件中是可以判断装入一个图形的多少的,而bmp图则根本没有触发OnProgress
事件。
 
接受答案了.
 
后退
顶部