Я запускаю Delphi XE под Windows 7 64 бит.Создать всплывающее окно с плавающим изображением в Delphi XE (Windows 7)
Я эти сторонние компоненты загружены: Virtual Trees Version 4.8.7 TZip Version 1.5 JVCL 3,45 Graphics32 1,9 Final GExperts 1.33 DWS DCP Crypt версии 2.0 TeeChart Pro v2011
I хотите создать всплывающее «предварительное» изображение PDF-файла, когда мышь вытаскивает объект TListBox Item. Я бы подумал, что я создам 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.
Лучше подход может создать окно пользовательских подсказок. –
Является ли пользовательское окно подсказки, способным отображать изображение или PDF? –
И вы хотите показать только окно с предварительным просмотром PDF (например, с первой страницы документа) или вы хотите создать окно подсказки *, где будет возможно также сосредоточиться и работать с документом (например, AdobeReader делать) ? – TLama