主题:作图片浏览器的问题
mmww
[专家分:0] 发布于 2006-07-19 18:50:00
各位高手,我想用delphi做一个图片浏览器,但是在正常运行时图片要充满整个屏幕,切换图片是根据下位机发送的数据来变化图片,不知那位高手能跟我提示一下怎么做吗?不胜感激!
回复列表 (共6个回复)
沙发
mmww [专家分:0] 发布于 2006-07-24 20:38:00
不知是太简单了吗?还是各位都不想解答这么简单的问题,我想用串口来切换图片,不知怎么实现?
板凳
wealthy [专家分:1840] 发布于 2006-07-25 09:51:00
我对你讲的问题不是太明白:
你看下面的是否合你用:
unit Unit1;
interface
uses
Windows,SysUtils,Forms, Dialogs, ExtCtrls,jpeg, FileCtrl, StdCtrls,
Graphics, Controls, Classes, Menus ;
type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Panel1: TPanel;
Image1: TImage;
Panel2: TPanel;
Splitter1: TSplitter;
Splitter2: TSplitter;
DirectoryListBox1: TDirectoryListBox;
DriveComboBox1: TDriveComboBox;
Label1: TLabel;
Panel3: TPanel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Panel4: TPanel;
Panel5: TPanel;
procedure DirectoryListBox1Change(Sender: TObject);
procedure Image1DblClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
procedure bigimage(Sender: TObject);
procedure addimage(imagefile:string);
procedure imagefreeall;
procedure scrolllist;
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer=10;
lefti:integer=10;
left_view_count:integer=1;
implementation
{$R *.dfm}
procedure FindFile(Dir: String;file_type:string;var save_str:tstringlist);
var
sr: TSearchRec;
FileAttrs: Integer;
begin
FileAttrs := faReadOnly+faHidden+faSysFile+faVolumeID+faArchive;
if FindFirst(Dir + file_type, FileAttrs, sr) = 0 then
begin
if (sr.Attr and FileAttrs) = sr.Attr then
save_str.Add(Dir + sr.Name);
while FindNext(sr) = 0 do
if (sr.Attr and FileAttrs) = sr.Attr then
save_str.Add(Dir + sr.Name);
FindClose(sr);
end;
end;
procedure tform1.bigimage(Sender: TObject);
begin
if sender is timage then
image1.Picture:=(Sender as timage).Picture;
end;
procedure tform1.imagefreeall;
var
i:integer;
tmpimage:timage;
begin
tmpimage:=timage.Create(nil);
for i:=ScrollBox1.ComponentCount - 1 downto 0 do
if ScrollBox1.Components[i] is TImage then
begin
tmpimage:=TImage(ScrollBox1.Components[i]);
FreeAndNil(tmpimage);
end;
tmpimage.Free ;
end;
procedure tform1.addimage(imagefile:string);
var
image:timage;
begin
image:=timage.Create(ScrollBox1);
try
image.Picture.LoadFromFile(imagefile);
image.Hint :=ExtractFileName(imagefile);
image.ShowHint :=true;
image.Width:=100;
image.Height:=100;
image.Left:=lefti;
image.top:=i;
image.AutoSize:=false;
image.Center:=true;
image.Stretch:=true;
image.Parent :=scrollbox1;
image.Visible:=true;
image.OnClick :=bigimage;
if left_view_count<(scrollbox1.Width div 110) then
begin
lefti:=lefti+110;
inc(left_view_count);
end
else
begin
i:=i+110;
left_view_count:=1;
lefti:=10;
end;
except
;
end;
end;
procedure tform1.scrolllist;
var
strlist:tstringlist;
i:integer;
dirstr:string;
begin
dirstr:=trim(DirectoryListBox1.Directory)+'\';
strlist:=tstringlist.Create ;
FindFile(dirstr,'*.bmp',strlist);
FindFile(dirstr,'*.jpg',strlist);
FindFile(dirstr,'*.ico',strlist);
FindFile(dirstr,'*.emf',strlist);
FindFile(dirstr,'*.wmf',strlist);
FindFile(dirstr,'*.jpeg',strlist);
for i:= 0 to strlist.Count-1 do
addimage(strlist.Strings[i]);
strlist.Free ;
end;
procedure TForm1.DirectoryListBox1Change(Sender: TObject);
begin
i:=10;
lefti:=10;
left_view_count:=1;
imagefreeall;
scrolllist;
end;
procedure TForm1.Image1DblClick(Sender: TObject);
begin
showmessage('图片浏览工具'+#13+#13+'程序设计:罡正科技'+#13+'Mail:mzw-wealthy@163.com');
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Panel2.Visible:=False;
Panel3.Visible:=False;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Panel2.Visible:=True;
Panel3.Visible:=True;
end;
end.
3 楼
mmww [专家分:0] 发布于 2006-07-26 18:46:00
谢谢二楼的解答,我主要是想用单片机根据外部检测信号来跟大机通讯,使大机根据通讯内容来切换图片,我想应该要用到串口通讯,但我看你那个好象没有用到,不知是不是可以不用,或者有其他更好的方法,还有就是这个程序好象不能编译成功,不知是什么原因,能不能一起解答,谢谢!
4 楼
wealthy [专家分:1840] 发布于 2006-07-26 21:26:00
代码是无问题的,http://upload.programfan.com/upfile/200607262125896.rar
5 楼
ILikePromgram [专家分:190] 发布于 2006-08-04 21:43:00
是不是想通过串口,单片机给大机器发个消息,让大机器的图片浏览程序来换图片.
还是要通过串口来传递图片的问题..
说具体点..
6 楼
mmww [专家分:0] 发布于 2006-08-14 19:02:00
谢谢五楼的,是这个意思,就是单片机发个切换的数据给大机,大机根据发送来的数据来判断怎么切换图片。而且大机在浏览时没有任何边框,在切换图片时也看不出有什么提示,不知在delphi中这样能实现吗?
我来回复