Главная страница
    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.046 c
1-1097609853
Павел
2004-10-12 23:37
2004.10.31
прицепить PopupMenu к DBGrid


14-1097565062
AlexG
2004-10-12 11:11
2004.10.31
Менеджеры для разработки проектов на Delphi группой разработчиков


3-1096542219
Брат
2004-09-30 15:03
2004.10.31
Показ Memo-поля в DBGrid


3-1096880740
Начинающий освоение БД
2004-10-04 13:05
2004.10.31
Массив в поле таблицы


3-1096441296
Maxim_____
2004-09-29 11:01
2004.10.31
string conversion error





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский