Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];

Вниз

вопрос по событиям   Найти похожие ветки 

 
ПЛОВ ©   (2013-10-02 11:54) [0]

Можно ли как-то обычную процедуру привязать к форме как событие?  Типа такого:

procedure MyKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
...

Form1.OnKeyDown := MyKeyDown;


 
брат Птибурдукова   (2013-10-02 11:56) [1]

В сети были примеры… Чё-то там с типом TMethod. На ДелфиКингдом поищи. А лучше поищи другое решение.


 
Dimka Maslov ©   (2013-10-02 12:08) [2]

type TMyKeyDown = class (TObject)
class procedure MyKeyDown(...)
end;

Form1.OnKeyDown := TMyKeyDown.MyKeyDown;


 
брат Птибурдукова   (2013-10-02 12:21) [3]


> Dimka Maslov ©   (02.10.13 12:08) [2]
Вопрос ведь не о методе другого класса, а о не-методе.


 
vuk ©   (2013-10-02 12:25) [4]

А кто вообще мешает в обычном методе-обработчике вызвать эту процедуру?


 
ПЛОВ ©   (2013-10-02 12:28) [5]


> type TMyKeyDown = class (TObject) class procedure MyKeyDown(.
> ..)end;Form1.OnKeyDown := TMyKeyDown.MyKeyDown;


Спасибо, но это немного не то.


> TMethod


Нашел пример, но там онклик. Сделал аналогично - ахис в момент срабатывания. Код такой:

var
M: TMethod;
...
M.Code := @_KeyDown;
M.Data := nil;

Btn[bi].OnKeyDown := TKeyEvent(M);


Btn[bi] - девэкспрессовская кнопка...


 
Плохиш ©   (2013-10-02 12:29) [6]


> Типа такого:

Типа такого нельзя, параметра не хватает.


 
Dimka Maslov ©   (2013-10-02 15:39) [7]

procedure MyKeyDown(P: Pointer; Sender: TObject; var Key: Word; Shift: TShiftState);

тогда можно будет TMethod


 
[ВладОшин] ©   (2013-10-02 17:15) [8]

>> P: Pointer;
Точно, это ж Self :)
забыл..


 
RWolf ©   (2013-10-02 17:26) [9]

Почему бы просто не вызвать эту процедуру в обработчике события?


 
ProgRAMmer Dimonych ©   (2013-10-02 20:47) [10]

А я предлагаю ещё обсудить, что делается в этой процедуре. Как бы не оказалось, что процедуре самое место в методах класса.


 
ПЛОВ ©   (2013-10-03 09:27) [11]

создается форма для вывода сообщения, по нажатию эскейпа эту форму нужно закрыть


 
ПЛОВ ©   (2013-10-03 09:29) [12]

пож, только не пишите что есть рабоче-крестьянский MessageBox - он не годится :)


 
ProgRAMmer Dimonych ©   (2013-10-03 09:33) [13]

> [11] ПЛОВ ©   (03.10.13 09:27)
> [12] ПЛОВ ©   (03.10.13 09:29)

Чем не устраивает буржуазный ShowModal? Закрытие по Esc — это поведение формы с сообщением, туда и дорога этой строчке из 5 букв.


procedure TMyMessageForm.OnKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #27 then
    Close;
end;


А ежели в ней ещё и кнопка «Отмена» будет, как в лучших месседжбоксах винапи, так и вообще Cancel = True и забыть как страшный сон.


 
ПЛОВ ©   (2013-10-03 09:43) [14]

TMyMessageForm - у меня нету. Есть TForm - он создается, на него ставится текст и кнопки. Нужно к нему прикрутить обработчик.
Еще такой вопрос - как создать свой класс-наследник от TForm, чтобы он не требовал наличия dfm?


 
ПЛОВ ©   (2013-10-03 09:45) [15]

У меня ShowModal -ом форма и отображается. Но при нажатии Esc - закрытия не происходит.


 
[ВладОшин] ©   (2013-10-03 09:45) [16]

function Answer: TAnswer;
 var
   F: TCoolFormForQuest;
 begin
   F := TCoolFormForQuest.Create(nil);
   F.ShowModal;
   Result := CalcResult(F.SomePublicVal);
   F.Free;
 end;

и рисуй как хочешь TCoolFormForQuest, с любыми кнопками и любым поведением
а перед закрытием логику в паблик переменную сохранить


 
Dimka Maslov ©   (2013-10-03 10:24) [17]


> У меня ShowModal -ом форма и отображается. Но при нажатии
> Esc - закрытия не происходит.


Для этого достаточно
1. Кнопке назначить Cancel = True
2. В обработчике её OnClick явно прописать Close или ModalResult := mrCancel (или что там ещё)

Всё. Не надо для этого изголяться и приписывать простые методы обработчику OnKeyDown всё формы


 
ProgRAMmer Dimonych ©   (2013-10-03 11:11) [18]

> TMyMessageForm - у меня нету. Есть TForm - он создается,
> на него ставится текст и кнопки. Нужно к нему прикрутить
> обработчик.

Это и есть TMyMessageForm. Как он называется у Вас — дело десятое. Закрыть она себя может и сама, без всяких обработчиков-не-методов.


> Еще такой вопрос - как создать свой класс-наследник от TForm,
> чтобы он не требовал наличия dfm?

Ответьте на два вопроса и поймёте, почему просите не странного, а невозможного.
1. Какая информация записывается в DFM?
2. Можно ли при наследовании избавиться от published-членов базового класса?


 
jumping jack   (2013-10-03 11:18) [19]

>...TForm, чтобы он не требовал наличия dfm?

просто вызывать CreateNew вместо Create (если что - и вместо Application.CreateForm)


 
Чайник ©   (2013-10-03 14:18) [20]


> У меня ShowModal -ом форма и отображается. Но при нажатии
> Esc - закрытия не происходит.


У TForm усть такое свойство - KeyPreview. Поставь его в True и тогда при нажатии эскейпа будет вызываться обработчик OnKeyPress самой формы, а потом уже ее контролов. Ну а в OnKeyPress формы вставь  
 if Key = #27 then Close;


 
Kerk ©   (2013-10-03 14:23) [21]

Почти не оффтоп. В XE5 появился еще один механизм работы модальных окон.
http://blog.marcocantu.com/blog/xe5_anonymous_showmodal_android.html


 
брат Птибурдукова   (2013-10-03 14:28) [22]


> Ну а в OnKeyPress формы вставь    if Key = #27 then Close;
Повбывав бы…

Православный способ уже был озвучен в [17], пункт 1. На кой чёрт тут назначать обработчики событий — совершенно неясно.


 
ProgRAMmer Dimonych ©   (2013-10-03 20:50) [23]

> [22] брат Птибурдукова   (03.10.13 14:28)
>
> > Ну а в OnKeyPress формы вставь    if Key = #27 then Close;
>
> Повбывав бы…
>
> Православный способ уже был озвучен в [17], пункт 1. На
> кой чёрт тут назначать обработчики событий — совершенно
> неясно.

Ну, хотя бы потому что ТС до сих пор не подтвердил, что у него для этого действия есть соответствующая кнопка. Пока мы просто знаем, что там есть какие-то кнопки.


 
все арамисы, а я Дартаньян   (2013-10-03 21:03) [24]


> ТС до сих пор не подтвердил, что у него для этого действия
> есть соответствующая кнопка
Ну это да, зато желание назначить хитровыпиленный метод он изъявил в [0]… И не какой-то попсовый KeyPress, а хардкорный KeyDown (ждём ветки про KeyPreview, хотя о нём и сказали выше). .



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
15-1381091402
Юрий
2013-10-07 00:30
2014.03.23
С днем рождения ! 7 октября 2013 понедельник


2-1370372241
oliksin
2013-06-04 22:57
2014.03.23
Помогите разобраться с программой. Строки.


2-1371628834
DanilTraum
2013-06-19 12:00
2014.03.23
Рекурсия с квадратом


1-1323639179
RAD
2011-12-12 01:32
2014.03.23
Удалить файл, открытый другим процессом


15-1380924488
xayam
2013-10-05 02:08
2014.03.23
Помогите распознать мелодию





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