我在Windows 7 64位下運行Delphi XE。在Delphi XE中創建浮動圖像彈出窗口(Windows 7)
我有這些第三方組件加載: 虛擬樹木版本4.8.7 TZip 1.5版 JVCL 3.45 Graphics32 1.9最終 GExperts 1.33 DWS DCP地穴2.0版 的TeeChart Pro的V2011
我當鼠標懸停在TListBox項目上時,希望創建PDF的彈出式「預覽」圖像。我想我會創建一個TForm在我的窗口的FormCreate,並隱藏它,直到(ListBox.ItemIndex> -1)在我的TfrmMain.ListBoxMouseMove例程。
現在,我只是想要掌握使用JPEG圖像,而不是PDF。
我注意到使用TImage和OnMouseOver相當慢。 有沒有更快的方法做到這一點?也許使用JEDI組件?
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, PicUnit, jpeg, GraphUtil;
type
TfrmMain = class(TForm)
lst: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure lstClick(Sender: TObject);
procedure lstMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure lstMouseLeave(Sender: TObject);
public
popPic: TfrmPic;
ImagePaths: TStringList;
LastHoover: Integer;
procedure LoadImages(Item: Integer);
end;
var
frmMain: TfrmMain;
Implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
popPic := TfrmPic.Create(nil);
ImagePaths := TStringList.Create;
LastHoover := -1;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
popPic.Free;
ImagePaths.Free;
end;
procedure TfrmMain.lstClick(Sender: TObject);
begin
if (lst.ItemIndex > -1) then
begin
popPic.Show;
end { ItemIndex > -1 }
else
popPic.Hide;
end;
procedure TfrmMain.lstMouseLeave(Sender: TObject);
begin
frmPic.Hide;
end;
procedure TfrmMain.lstMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
HooverItem : Integer;
begin
{ Returns -1 if the mouse is NOT over a item on the list }
HooverItem := lst.ItemAtPos (Point (X, Y), True);
if (HooverItem > -1) and (HooverItem <> LastHoover) then
begin
{ Match the image onto the screen }
frmPic.Left := frmMain.ClientToScreen(Point(X, Y)).X;
frmPic.Top := frmMain.ClientToScreen(Point(X, Y)).Y;
LoadImages(HooverItem);
LastHoover := HooverItem;
if (ImagePaths.Count > 0) then
begin
{ TImage Method }
frmPic.imgStd.Stretch := True;
frmPic.imgStd.Picture.LoadFromFile (ImagePaths [0]);
frmPic.Show;
frmMain.SetFocus;
end
else
frmPic.Hide;
end
else
if (HooverItem = -1) then
frmPic.Hide;
end;
procedure TfrmMain.LoadImages(Item: Integer);
begin
{ Clear off the existing list }
ImagePaths.Clear;
if (Item = 0) then
begin
ImagePaths.Add ('C:\Floating Image Demo\0.jpeg');
ImagePaths.Add ('C:\Floating Image Demo\1.jpeg');
end
else
if (Item = 1) then
begin
ImagePaths.Add ('C:\Floating Image Demo\1.jpeg');
ImagePaths.Add ('C:\Floating Image Demo\0.jpeg');
end;
end;
end.
一個更好的方法是創建一個自定義提示窗口。 – 2012-04-25 14:26:40
是否能夠顯示圖像或PDF的自定義提示窗口? – 2012-04-25 21:19:06
你是否想僅顯示一個帶有PDF預覽的窗口(例如用第一個文檔頁面),或者你想創建一個*提示窗口*哪裏可能還需要關注和處理文檔(例如AdobeReader )? – TLama 2012-04-25 23:13:40