Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.031 c
9-1088730599
Xerx
2004-07-02 05:09
2004.10.31
А какая тут тема?


1-1097649544
Asker
2004-10-13 10:39
2004.10.31
Участок формы в графический файл


1-1097686792
AlexKocharin
2004-10-13 20:59
2004.10.31
Копирование Printer.Canvas в Bitmap


14-1097657094
klerk
2004-10-13 12:44
2004.10.31
Ссылка в Excel


14-1096481984
Sergey_Masloff
2004-09-29 22:19
2004.10.31
Почти как в анекдоте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский