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

Вниз

Закрытие формы по Escape   Найти похожие ветки 

 
Ega23 ©   (2004-10-20 11:12) [0]

Есть вот такой код. При добавлении кнопки ставлю её свойство Cancel:=True, однако по Escape форма не закрывается.
function ShowMessagesString(const aMessage:String; aCaption:String=""):Boolean;
var
aForm:TForm;
begin
Result:=False;
try
 Application.CreateForm(TForm, aForm);
 try
  With aForm do
   begin
    Caption:=aCaption;
    BorderStyle:=bsDialog;
    Height:=500;
    Width:=750;
    Position:=poScreenCenter;
   end;
  With TMemo.Create(aForm) do
   begin
    Parent:=aForm;
    Font.Name:="Courier New";
    Name:="memSQLLogMonitor";
    Align:=alTop;
    ScrollBars:=ssBoth;
    Height:=440;
    Clear;
    Lines.Text:=aMessage;
   end;
  With TButton.Create(aForm) do
   begin
    Parent:=aForm;
    Cancel:=True;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=aForm.ClientHeight-30;
    Left:=aForm.ClientWidth-110;
    Caption:="Закрыть";
    ModalResult:=mrCancel;
   end;
  aForm.ShowModal;
 finally
  aForm.Free;
 end;
except on E:Exception do
 raise Exception.Create("ShowMessagesString "+E.Message);
end;
end;


При статическом создании формы (в design-time) всё прекрасно работает.

В чём может быть проблема?


 
-=SS=- ©   (2004-10-20 11:25) [1]

Дело в том что фокус находится в Memo. А Memo не обрабатывает ESC


 
Ega23 ©   (2004-10-20 11:30) [2]

О, блин. А я на Edit проверял, с ним всё отрабатывает...
Чудеса какие-то...


 
-=SS=- ©   (2004-10-20 11:37) [3]

Если очень надо прийдется ставить обработчик OnKeyPress на форму


 
Amoeba ©   (2004-10-20 11:42) [4]


> -=SS=- ©   (20.10.04 11:37) [3]
> Если очень надо прийдется ставить обработчик OnKeyPress
> на форму

IMHO это лучшее решение задачи.


 
Ega23 ©   (2004-10-20 11:58) [5]

Ха, всё гораздо интереснее получается.
Провёл небольшое исследование:
Главная форма, на ней кнопка, по нажатию модально открывается вторая форма.
На ней: 5 TEdit, 1 TMaskEdit, 1 TComboBox, 1 TListBox, 1 TMemo, 1 TButton.
TButton.ModelResult:=mrOK;
TButton.Cancel:=True;

В TabOrder"е формы кнопку воткнул последней.

По Escap"у форма замечательно закрывается, если фокус стоит на ЛЮБОМ контроле, КРОМЕ TMemo.


 
DiamondShark ©   (2004-10-20 12:08) [6]

Если у мемо WantReturns = false, то Esc срабатывает.

А вот и разгадка:

procedure TCustomMemo.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
 inherited;
 if FWantTabs then Message.Result := Message.Result or DLGC_WANTTAB
 else Message.Result := Message.Result and not DLGC_WANTTAB;
 if not FWantReturns then
   Message.Result := Message.Result and not DLGC_WANTALLKEYS;
end;


 
Ega23 ©   (2004-10-20 12:12) [7]

DiamondShark ©   (20.10.04 12:08) [6]

О как! Большое спасибо, буду знать.  :о)



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

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

Наверх




Память: 0.48 MB
Время: 0.024 c
4-1096373735
Th
2004-09-28 16:15
2004.10.31
Странное поведение функции TryEnterCriticalSection()


3-1096522612
Softamas
2004-09-30 09:36
2004.10.31
Access -> ODBC -> BDE -> Delphi. Проблема с кодировкой


3-1096615743
Bes
2004-10-01 11:29
2004.10.31
как обновить DBGRID?


14-1097323092
андрей_
2004-10-09 15:58
2004.10.31
Какой монитор долговечнее?


14-1097253935
Leaner
2004-10-08 20:45
2004.10.31
Количество секторов в кластере