Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.034 c
8-1126183451
Максим
2005-09-08 16:44
2006.02.19
Конвертация цветовых схем


1-1137329594
SergP
2006-01-15 15:53
2006.02.19
Array ==> Tdataset


5-1125262102
jack128
2005-08-29 00:48
2006.02.19
Опубликованные события у TPesistent


11-1119532053
вад
2005-06-23 17:07
2006.02.19
IdSMTP


1-1137417843
avsam
2006-01-16 16:24
2006.02.19
Delphi 2006 и QuickReport




   Наверх