Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизЗакрытие формы по 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c