Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Закрытие формы по Escape [D5]


Ega23 ©   (2004-10-20 11:12:00) 

Есть вот такой код. При добавлении кнопки ставлю её свойство 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) всё прекрасно работает.

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


Ega23   (2004-10-20 12:12:00) [1]

DiamondShark ©   (20.10.04 12:08) [6]

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


DiamondShark   (2004-10-20 12:08:00) [2]

Если у мемо 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 11:58:00) [3]

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

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

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


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


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

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


-=SS=-   (2004-10-20 11:37:00) [5]

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


Ega23   (2004-10-20 11:30:00) [6]

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


-=SS=-   (2004-10-20 11:25:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо