Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Вставка апострофа во всех контролах   Найти похожие ветки 

 
RDA   (2006-01-17 10:13) [0]

Как сделать так чтобы в программе во всех контролах при нажатии, к примеру Ctrl+~ результатом вставлялся бы апостроф?


 
TUser ©   (2006-01-17 10:16) [1]

Перебрать в цикле все Components


 
RDA   (2006-01-17 11:16) [2]

Нет, не это имелось ввиду, нужно просто сделать подмену ввода для каждого контрола в отдельности, можно конечно у каждого описать OnKeyDown - но можно же как-то єто сделать по другому через клавиатурный хук или еще как-то иначе. Подскажите решение.


 
Desdechado ©   (2006-01-17 11:18) [3]

а один обработчик OnKeyDown на всех?


 
medvedenator ©   (2006-01-17 11:22) [4]

Удалено модератором


 
Leonid Troyanovsky ©   (2006-01-17 12:47) [5]


> RDA   (17.01.06 11:16) [2]

> у каждого описать OnKeyDown - но можно же как-то єто сделать
> по другому через клавиатурный хук или еще как-то иначе.


Например, сделать Action (ActionList) with OnExecute:

procedure TForm1.Action1Execute(Sender: TObject);
begin
   ActiveControl.Perform(WM_CHAR, Ord(""""), 0);
end;

--
Regards, LVT.


 
RDA   (2006-01-17 12:53) [6]

Сделать то можно, вот только форм же много, для каждой делать? Может есть лучше вариант?


 
Игорь Шевченко ©   (2006-01-17 13:51) [7]


> Может есть лучше вариант?

unit HookUnit;

interface

procedure SetHook;
procedure RemoveHook;

implementation
uses
 Windows, Messages, SysUtils;

var
 hGetMsgHook: THandle;

const
 VK_OEM_3 = $C0;
 
function GetMsgProc(Code: Integer; wParam1: Integer;
 lParam: Integer): LRESULT; stdcall;

 function KeyIsPressed (Key: Integer): Boolean;
 begin
   Result := GetKeyState(Key) and $80000000 <> 0;
 end;

begin
 if Code >= 0 then begin
   if (PMsg(lParam)^.Message = WM_KEYDOWN)  and (wParam1 = PM_REMOVE) then
     if (PMsg(lParam)^.wParam = VK_OEM_3) and
         KeyIsPressed(VK_CONTROL) then begin
       PMsg(lParam)^.message := WM_NULL;
       PostMessage(PMsg(lParam)^.hWnd, WM_CHAR, Ord(""""),
          PMsg(lParam)^.lParam);
     end;
 end;
 Result := CallNextHookEx(hGetMsgHook, Code, wParam1, lParam);
end;

procedure SetHook;
begin
 Assert(hGetMsgHook = 0);
 hGetMsgHook := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, 0,
   GetCurrentThreadId);
end;

procedure RemoveHook;
begin
 Assert(hGetMsgHook <> 0);
 UnhookWindowsHookEx(hGetMsgHook);
 hGetMsgHook := 0;
end;

end.


И пример использования:

unit main;

interface

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

type
 TfMain = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation
uses
 HookUnit, Other;

{$R *.DFM}

procedure TfMain.FormCreate(Sender: TObject);
begin
 SetHook;
end;

procedure TfMain.Button1Click(Sender: TObject);
begin
 with TfOther.Create (Application) do
   try
     ShowModal;
   finally
     Free;
   end;
end;

end.


unit Other;

interface

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

type
 TfOther = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Edit2: TEdit;
 end;

var
 fOther: TfOther;

implementation

{$R *.DFM}

end.


 
RDA   (2006-01-17 14:40) [8]

Игорь Шевченко
То что доктор приписал. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
2-1138892204
Silver__Dragon
2006-02-02 17:56
2006.02.19
Перехват нажатия Minimize


2-1137979351
TUpDown
2006-01-23 04:22
2006.02.19
Как изменить цвет TUpDown?


15-1138709234
Digitman
2006-01-31 15:07
2006.02.19
Разыскиваю человека. Москвичи, помогите в пределах возможного...


1-1136990344
DelphiLexx
2006-01-11 17:39
2006.02.19
Сохранить рисунок с TPanel


15-1138191869
Pazitron_Brain
2006-01-25 15:24
2006.02.19
CDMA телефон