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

Вниз

Формы и горячие клавиши   Найти похожие ветки 

 
Елена ©   (2002-06-26 06:57) [0]

В главной форме для одного из пунктов меню в качестве горячей клавиши назначена клавиша Backspace. Когда из главной формы вызывается другая форма (главная при этом прячется), то если в поле редактирования второй формы нажать клавишу Backspace, то срабатывает функция главной формы, а символ в поле редактирования не стирается.

Что прикажете делать?


 
MBo ©   (2002-06-26 07:01) [1]

1) Отказаться от такого использования BackSpace- нехорошо переопределять стандартные действия
2) Если очень надо, по "прятанию" главной формы изменять ее меню,
а по OnShow восстанавливать


 
Proton ©   (2002-06-26 09:10) [2]

Вот что коллега по этому поводу говорит

Как сказать VCL, чтобы клавиши shortcut пунктов главного меню главной формы
действовали только в этой форме (но не в модальных окнах, к примеру)?
A>:
Знакомая проблема.
Лечится так:

function WindowHook(var Message: TMessage): Boolean;

procedure .FormCreate(Sender: TObject);
begin
// MainForm
Application.HookMainWindow(WindowHook);

function .WindowHook;
begin
Result := False;

with Message do
case Msg of
CM_APPKEYDOWN{??????? ??????? .MainMenu ???????? ?? _????_ ??????.
?????!}, CM_APPSYSCOMMAND{????? .MainMenu ?? ?????? ????. ?????!}: Msg :=
WM_NULL;

Author>:
Александр Петросян, Зеленоград.
(2:5020/468.8)

-----
Уж не знаю что он этим хотел сказать :)


 
Елена ©   (2002-06-26 12:24) [3]

И мне интересно было бы знать :o)


 
Proton ©   (2002-06-26 15:09) [4]

Ладно чего не сдлаеш ради девушки с таким дивным именем :)
Вообщем если надо то вот пример - разбирайся.
Я набрал вроде работает

Возможно еще нужна проверка
if not (GetForeguraundWindow = Application.MainForm.handle) then
message.msg := WM_NULL;
Но по чему то все работает и так - наверное ни внимательно смотрел.

* Project1.dpr
program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas" {Form2};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
* Unit1.dfm
object Form1: TForm1
Left = 192
Top = 106
Width = 544
Height = 375
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object MainMenu1: TMainMenu
Left = 144
Top = 8
object GFDHDFGH1: TMenuItem
Caption = "GFDHDFGH"
object GHDFG1: TMenuItem
Caption = "GHDFG"
ShortCut = 16449
OnClick = GHDFG1Click
end
end
end
end
* Unit1.pas
unit Unit1;

interface

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

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
GFDHDFGH1: TMenuItem;
GHDFG1: TMenuItem;
procedure GHDFG1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function WindowHook(var Message: TMessage): Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.GHDFG1Click(Sender: TObject);
begin
ShowMessage("a");
end;

function TForm1.WindowHook(var Message: TMessage): Boolean;
begin
result := false;
case Message.Msg of
CM_APPKEYDOWN, CM_APPSYSCOMMAND: message.msg := WM_NULL;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HookMainWindow(WindowHook);
end;

end.
* Unit2.dfm
object Form2: TForm2
Left = 215
Top = 153
Width = 544
Height = 375
Caption = "Form2"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
Visible = True
PixelsPerInch = 96
TextHeight = 13
end
* Unit2.pas
unit Unit2;

interface

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

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

end.



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
1-23555
BKV
2002-06-26 15:57
2002.07.08
Не доходит сообщение windows


3-23464
AndrewK
2002-06-14 15:57
2002.07.08
Как составить запрос. Неужели это невозможно.


1-23548
PTE
2002-06-26 17:12
2002.07.08
как выбрать путь к файлу и скопировать его в Edit


1-23632
_Smart
2002-06-24 03:54
2002.07.08
Перетаскивание формы не только за её caption


1-23662
Cosinus
2002-06-26 11:11
2002.07.08
Подскажите, как понять, какая именно клавиша нажата на мыши?