回 帖 发 新 帖 刷新版面

主题:作图片浏览器的问题

各位高手,我想用delphi做一个图片浏览器,但是在正常运行时图片要充满整个屏幕,切换图片是根据下位机发送的数据来变化图片,不知那位高手能跟我提示一下怎么做吗?不胜感激!

回复列表 (共6个回复)

沙发

不知是太简单了吗?还是各位都不想解答这么简单的问题,我想用串口来切换图片,不知怎么实现?

板凳

我对你讲的问题不是太明白:
你看下面的是否合你用:

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 楼

谢谢二楼的解答,我主要是想用单片机根据外部检测信号来跟大机通讯,使大机根据通讯内容来切换图片,我想应该要用到串口通讯,但我看你那个好象没有用到,不知是不是可以不用,或者有其他更好的方法,还有就是这个程序好象不能编译成功,不知是什么原因,能不能一起解答,谢谢!

4 楼

代码是无问题的,http://upload.programfan.com/upfile/200607262125896.rar

5 楼

是不是想通过串口,单片机给大机器发个消息,让大机器的图片浏览程序来换图片.
还是要通过串口来传递图片的问题..
说具体点..

6 楼

谢谢五楼的,是这个意思,就是单片机发个切换的数据给大机,大机根据发送来的数据来判断怎么切换图片。而且大机在浏览时没有任何边框,在切换图片时也看不出有什么提示,不知在delphi中这样能实现吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册