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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2008, 00:16   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
Хорошо then Form2.Show;

Всем доброй ночи! Скажите, как реализовать такое: если Form1 без действия (мышкой не водиш/клацаеш, или клавиатурой) в тичении 3 минут, то открываеца Form2. Вобщем, что необходимо прописать в Timer1 (если можна без таймера, это хорошо), чтоб Form2 запустилась?
beegl вне форума Ответить с цитированием
Старый 16.07.2008, 00:23   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Вот посмотри. должно помочь.

Для наглядности

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AppEvnts;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    ListBox1: TListBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    ApplicationEvents1: TApplicationEvents;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    private
  FHookStarted : Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  JHook: THandle;

implementation

{$R *.dfm}

function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
var s: string;
begin
Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));
if Code < 0 then Exit;
if Code = HC_SYSMODALON then Exit; if Code = HC_ACTION then
 begin
  s := '';
  if EventStrut.message = WM_LBUTTONUP then
   s := 'Left Mouse UP at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
  if EventStrut.message = WM_LBUTTONDOWN then
   s := 'Left Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
  if EventStrut.message = WM_RBUTTONDOWN then
   s := 'Right Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
  if (EventStrut.message = WM_RBUTTONUP) then
   s := 'Right Mouse Up at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
  if (EventStrut.message = WM_MOUSEWHEEL) then
   s := 'Mouse Wheel at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH);
  if (EventStrut.message = WM_MOUSEMOVE) then
   s := 'Mouse Position at X:' + IntToStr(EventStrut.paramL) + ' and Y: ' + IntToStr(EventStrut.paramH);
  if s <> '' then Form1.ListBox1.ItemIndex := Form1.ListBox1.Items.Add(s);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetCursorPos(10,10);
end;

procedure TForm1.Button2Click(Sender: TObject);
var e:Tpoint;
begin
GetCursorPos(e);
label2.Caption:=inttostr(e.X)+' '+inttostr(e.Y);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FHookStarted then UnhookWindowsHookEx(JHook);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if FHookStarted then
 begin
  ShowMessage('Mouse is already being Journaled, can not restart');
  Exit;
 end;
JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);
if JHook > 0 then
 begin
  FHookStarted := True; end else ShowMessage('No Journal Hook availible');
 end;

procedure TForm1.Button4Click(Sender: TObject);
begin
FHookStarted := False; UnhookWindowsHookEx(JHook);
JHook := 0;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
Handled := False;
if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
 JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
end;

end.
Вложения
Тип файла: zip события мыши.zip (9.4 Кб, 23 просмотров)
Всё гениальное - просто!

Последний раз редактировалось Air; 16.07.2008 в 00:35.
Air вне форума Ответить с цитированием
Старый 16.07.2008, 00:32   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

сейчяс не могу, сижу со смартфона, за компом буду через 2 дня. Надеюсь пример хороший. Спасибо за помощь!
beegl вне форума Ответить с цитированием
Старый 16.07.2008, 08:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мы легких путей не ищем?...
Вот пример попроще:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, AppEvnts;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   ShowMessage('sdfsf');
   Timer1.Enabled:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Timer1.Enabled:=false;
Timer1.Enabled:=true;;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled:=false;
Timer1.Enabled:=true;;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Timer1.Enabled:=false;
Timer1.Enabled:=true;;

end;

end.
Тут разве что интервал таймера поставить нужный
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2008, 21:43   #5
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Stilet хорощий пример подал, но как быть с Form2? Необходимо, чтоб при любом действии Form2 исчезал (пример: как на ПК скринсервер).
Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
form1.Visible := false;
end;
end.]
этот код не подходит из-за Form1.WindowState := wsMaximized;
Подскажите как сделать эфект скринсервера?
beegl вне форума Ответить с цитированием
Старый 19.07.2008, 20:12   #6
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Тебе скринсейвер нужен или чтобы Form2 включалось только когда Form1 без действия стоит 3 минуты? Если скринсейвер то пример Air, если только Form1 без действия должно стоять тогда Stilet написал более оптимальный способ. Чтобы Form2 при любом действии исчез, надо то же самое что написано у Stilet сделать в Form2 только вместо таймера, написать Form2.Hide;
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 19.07.2008, 20:43   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от The_Darkness Посмотреть сообщение
Тебе скринсейвер нужен или чтобы Form2 включалось только когда Form1 без действия стоит 3 минуты? Если скринсейвер то пример Air, если только Form1 без действия должно стоять тогда Stilet написал более оптимальный способ. Чтобы Form2 при любом действии исчез, надо то же самое что написано у Stilet сделать в Form2 только вместо таймера, написать Form2.Hide;
The_Darkness, подскажи пожалуйста куда написать Form2.Hide; (без таймера)

Последний раз редактировалось beegl; 19.07.2008 в 20:46.
beegl вне форума Ответить с цитированием
Старый 19.07.2008, 21:00   #8
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

На мой взгляд, не самый кодоэкономичный вариант, зато работает.
Будут вопросы--обращайся.
P.S. таймер во втором юните из-за того, что если при активировании form2 мышка находится на ней, то это считается за mousemove. Поэтому мы начинаем следить за действиями только по прошествии некоторого времени
Вложения
Тип файла: rar for_beegl.rar (162.1 Кб, 17 просмотров)
NikLik вне форума Ответить с цитированием
Старый 19.07.2008, 21:08   #9
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

NikLik, хороший пример, спасибо большое за помощь.
NikLik, подскажи, как сжелать, чтоб это действовало и на компонент WebBrowser, а то WebBrowser закрывает Form1?
Пробовал:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.WebBrowser1.Show;
end;
не помогло.
Зарание прошу прощения, что задал вопрос не создав отдельной темы.

Последний раз редактировалось beegl; 19.07.2008 в 21:15.
beegl вне форума Ответить с цитированием
Старый 19.07.2008, 21:21   #10
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

Не понял сути вопроса


P.S. на счёт предыдущего исходника--вот ещё 1 получше, теперь реагирует на действия даже за пределами form2(если это конечно требуется)
Вложения
Тип файла: rar for_beegl.rar (165.5 Кб, 18 просмотров)
NikLik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос на засыпку по show columns smoke888 SQL, базы данных 5 17.09.2012 12:46
Нужно чтобы Form2 открывался по середине Form1 diznt Помощь студентам 1 31.08.2008 03:37
form.show в коде проекта Ozerich Общие вопросы Delphi 2 30.08.2008 22:05
Form2.sSkinManager1.Action := false; beegl Компоненты Delphi 2 17.06.2008 17:05
две формы Form1 и Form2 Михаил Юрьевич Общие вопросы Delphi 11 02.03.2008 19:38