Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Горячие клавиши...


Автор: pomogite 14.5.2006, 16:27
Я прячу программу вот этим,
Код

ShowWindow(Handle,SW_Hide);
ShowWindow(Application.Handle,SW_HIDE);

 а как потом её вернуть горячей клавишей? 
PS: Я никогда не пользовалась ГК если можно поподробней плз... 

Автор: Albinos_x 14.5.2006, 16:57
к примеру:
Код


procedure TForm1.FormCreate(Sender: TObject);
...
RegisterHotKey(Handle,25,MOD_ALT or MOD_CONTROL,32);
...

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
...
UnregisterHotKey(Handle,25);
...


Добавлено @ 16:59 
забыл написать: теперь отлавливаем сообщение:
Код
.............
private
    { Private declarations }
    procedure WMHotKey(var a:TWMHotKey); message WM_HOTKEY;
.............
procedure TForm1.WMHotKey(var a:TWMHotKey);
begin
if (a.HotKey=25) and (er<>1) then  Form1.Show;
end;
...
 

Автор: pomogite 14.5.2006, 17:05
Можете написать как интегрировать например сюда? 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Handle,SW_Hide);
ShowWindow(Application.Handle,SW_HIDE);
end;

end.

 

Автор: Albinos_x 14.5.2006, 17:11
ctrl+alt+пробел 

Автор: pomogite 14.5.2006, 17:16
Я не пойму куда это всё писать... 

Автор: Albinos_x 14.5.2006, 17:26
второй параметр id (у меня 25) должен лежать в пределах от 0 до $BFFF, для DLL от $C000 до $FFFF, но надёжней его получать с помощью функции GlobalAddAtom()... 

Автор: pomogite 14.5.2006, 17:27
Напиши пример плиз, а то я уже всё перепробывала ни как не получаеться...  smile  

Автор: Albinos_x 14.5.2006, 18:01
прошу прощения забыл er<>1 удалить и плюс к этому ты скрыл приложение поэтому обычный Form1.Show не работал, сделай так:
Код
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure WMHotKey(var a:TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMHotKey(var a:TWMHotKey);
begin    
if (a.HotKey=25) then
   begin
   ShowWindow(Handle,SW_NORMAL);
   ShowWindow(Application.Handle,SW_NORMAL);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowWindow(Handle,SW_Hide);
ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   RegisterHotKey(Handle,25,MOD_ALT or MOD_CONTROL,8);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnregisterHotKey(Handle,25);
end;

end.
 

Автор: pomogite 14.5.2006, 18:09
Всё компилируется вот только при нажатии alt+ctrl+пробел программа не появляется =( 

Автор: Albinos_x 14.5.2006, 18:15
да, потому, что я при экспериментах оставил как у меня в другом приложении на ctrl+alt+Бакспейс, поменяй:
Код

RegisterHotKey(Handle,25,MOD_ALT or MOD_CONTROL,8);

цифру 8 на 32 , т.е.:
Код

RegisterHotKey(Handle,25,MOD_ALT or MOD_CONTROL,32);
 

Автор: pomogite 14.5.2006, 18:23
Всё спасибо большое-приогромное!!!! Ещё была загвостка что я в Events оставляла пустыми поля On... 
А как узнать цифровые коды символов? Типа 32-пробел, 8-бэкспейс?
 

Автор: Albinos_x 14.5.2006, 18:32
много способов есть.... можно в стрингрид перебрать все сделать таблицу... можно так:
кидаешь на форму едит и пишешь:
Код
...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Edit1.Text:=inttostr(ord(key));
key:=#0;
end;
...

теперь когда нажимаешь на клавишу у тебя в эдите отсвечивается код...
ну и т.д. у кого на сколько фантации хватает... 

Автор: pomogite 14.5.2006, 18:59
А наоборот как? Из цифр в буквы? например строчку 213 456 879 456 123 456? 

Автор: Albinos_x 14.5.2006, 19:12
Код

Edit1.Text:=char(213);


Добавлено @ 19:13 
только больше 255 не может быть... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)