Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 23:12   #31
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Не забудь событию формы OnDestroy назначить процедуру.
Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ShellCtrls, Grids, Outline, DirOutln, ExtCtrls,
  StdCtrls, FileCtrl, Spin, Buttons;

type
  TfmImageViewer = class(TForm)
    pnToolBar: TPanel;
    pnNavigation: TPanel;
    dcbDrives: TDriveComboBox;
    dlbFolders: TDirectoryListBox;
    flbFiles: TFileListBox;
    imgPhoto: TImage;
    chbFitToScreen: TCheckBox;
    seInterval: TSpinEdit;
    chbSlideShow: TCheckBox;
    Label1: TLabel;
    Timer1: TTimer;
    bbClose: TBitBtn;
    bbFullScreen: TBitBtn;
    procedure flbFilesChange(Sender: TObject);
    procedure chbFitToScreenClick(Sender: TObject);
    procedure chbSlideShowClick(Sender: TObject);
    procedure seIntervalChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure bbFullScreenClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    HKey: Integer;
    procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  fmImageViewer: TfmImageViewer;

implementation

{$R *.dfm}

Uses
  jpeg, FullScreen;

procedure TfmImageViewer.WMHotKey(var Msg: TWMHotKey);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) xor WS_EX_TRANSPARENT);
  AlphaBlendValue:=AlphaBlendValue xor 128;
end;

procedure TfmImageViewer.flbFilesChange(Sender: TObject);
Var
  Ext:String;
  JP:TJPEGImage;
  Rect:TRect;
begin
  Screen.Cursor:=crAppStart;
Try
  If ((flbFiles.FileName='') And (flbFiles.Count<>0)) Then
  Begin
    flbFiles.ItemIndex:=0;
  End;

  Ext:=ExtractFileExt(flbFiles.FileName);
  If ((Ext='.jpg') Or (Ext='.jpeg')) Then
  Begin
    JP:=TJPEGImage.Create;
    JP.LoadFromFile(flbFiles.FileName);
    imgPhoto.Picture.Assign(JP);
    JP.Free;
  End
  Else If Ext='.bmp' Then
  Begin
    imgPhoto.Picture.LoadFromFile(flbFiles.FileName);
  End
  Else Begin
    Rect.Left:=0; Rect.Top:=0; Rect.Right:=imgPhoto.Width-1; Rect.Bottom:=imgPhoto.Height-1;
    imgPhoto.Picture.Bitmap.Width:=imgPhoto.Width;
    imgPhoto.Picture.Bitmap.Height:=imgPhoto.Height;
    imgPhoto.Picture.Bitmap.Canvas.Brush.Color:=clGray;
    imgPhoto.Picture.Bitmap.Canvas.Brush.Style:=bsSolid;
    imgPhoto.Picture.Bitmap.Canvas.FillRect(Rect);
    imgPhoto.Picture.Bitmap.Canvas.Refresh;
  End;

  fmFullScreen.imgPhoto.Stretch:=imgPhoto.Stretch;
  fmFullScreen.imgPhoto.Picture.Assign(imgPhoto.Picture);
Except
  ShowMessage('Неизвестный формат файла!');
End;
  Screen.Cursor:=crDefault;
end;

procedure TfmImageViewer.chbFitToScreenClick(Sender: TObject);
begin
  imgPhoto.Stretch:=chbFitToScreen.Checked;
end;

procedure TfmImageViewer.chbSlideShowClick(Sender: TObject);
begin
  seIntervalChange(Self);
  Timer1.Enabled:=chbSlideShow.Checked;
end;

procedure TfmImageViewer.seIntervalChange(Sender: TObject);
begin
  Timer1.Interval:=seInterval.Value*1000;
end;

procedure TfmImageViewer.Timer1Timer(Sender: TObject);
begin
  If (flbFiles.ItemIndex+1<flbFiles.Count) Then
  Begin
    flbFiles.ItemIndex:=flbFiles.ItemIndex+1;
    flbFilesChange(Self);
  End
  Else If (flbFiles.ItemIndex+1=flbFiles.Count) And (flbFiles.Count>0) Then
  Begin
    flbFiles.ItemIndex:=0;
    flbFilesChange(Self);
  End;
end;

procedure TfmImageViewer.bbFullScreenClick(Sender: TObject);
begin
  fmFullScreen.imgPhoto.Stretch:=imgPhoto.Stretch;
  fmFullScreen.Show;
end;

procedure TfmImageViewer.FormCreate(Sender: TObject);
begin
  HKey:=GlobalAddAtom('Alt+F12');
  RegisterHotKey(Handle, HKey, MOD_ALT, VK_F12);

  FormStyle:=fsStayOnTop;
  AlphaBlend:=true;
  AlphaBlendValue:=127;

  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
end;

procedure TfmImageViewer.FormDestroy(Sender: TObject);
  UnRegisterHotKey(Handle, HKey);
  GlobalDeleteAtom(HKey);
end;

procedure TfmImageViewer.FormResize(Sender: TObject);
begin
  flbFilesChange(Self);
end;

end.
x128 вне форума Ответить с цитированием
Старый 10.12.2010, 23:41   #32
Ax_32
Пользователь
 
Регистрация: 25.11.2010
Сообщений: 24
По умолчанию

Вот и у меня так было, что неправильно?
Изображения
Тип файла: jpg Безымянный.jpg (152.3 Кб, 126 просмотров)

Последний раз редактировалось Ax_32; 10.12.2010 в 23:43.
Ax_32 вне форума Ответить с цитированием
Старый 11.12.2010, 00:26   #33
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Объект форма/Object Inspector/Events в поле OnDestroy кликнуть два раза.
x128 вне форума Ответить с цитированием
Старый 11.12.2010, 09:45   #34
Ax_32
Пользователь
 
Регистрация: 25.11.2010
Сообщений: 24
По умолчанию

сделал, всё равно:
Изображения
Тип файла: jpg Безымянный.jpg (163.7 Кб, 133 просмотров)
Ax_32 вне форума Ответить с цитированием
Старый 11.12.2010, 10:12   #35
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

в описании класса процедура объявлена?
x128 вне форума Ответить с цитированием
Старый 11.12.2010, 11:06   #36
Ax_32
Пользователь
 
Регистрация: 25.11.2010
Сообщений: 24
По умолчанию

незнаю... как это сделать?
Ax_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окно поверх всех Billys Общие вопросы Delphi 6 25.02.2011 22:17
Окно поверх остальных Артэс Win Api 5 22.05.2010 22:02
Окно поверх всех остальных Vikelf Помощь студентам 2 28.05.2009 17:11
Окно поверх остальных dsp Общие вопросы C/C++ 1 15.12.2008 14:49