Главная страница
    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.042 c
2-1138760750
Приятель
2006-02-01 05:25
2006.02.19
Как открепить панельку от основного окна?


15-1138597218
begin...end
2006-01-30 08:00
2006.02.19
С Днём рождения! 30 января


2-1139124267
PARUS
2006-02-05 10:24
2006.02.19
Автоответчик


2-1138722904
Arazel
2006-01-31 18:55
2006.02.19
КАк поместить все данные поля в DbLokupComboBox с помощью SQL


2-1138868039
alexus
2006-02-02 11:13
2006.02.19
передать команду другому приложению





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский