Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизВставка апострофа во всех контролах Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c