![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие формы по 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