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