Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
2-1138857641
unknowing
2006-02-02 08:20
2006.02.19
Работа с файлами


1-1137578199
__DATA__
2006-01-18 12:56
2006.02.19
CreateProcess не запускает файлы с параметрами


1-1136730423
Glex
2006-01-08 17:27
2006.02.19
Перенос формы за Client Area (Не глючный способ с WMNCHITTEST)


6-1130333737
AlexAndroID
2005-10-26 17:35
2006.02.19
перехватить контент до браузера, обработав, отдать ему


15-1138438980
ArtemESC
2006-01-28 12:03
2006.02.19
Файлы chm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский