Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.03.23;
Скачать: CL | DM;

Вниз

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

 
ПЛОВ ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.005 c
2-1370793552
Кристина
2013-06-09 19:59
2014.03.23
Помогите пожалуйста решить задачу! Никак не получается сделать(


2-1370071648
Fr
2013-06-01 11:27
2014.03.23
Drag & Drop и TDrawGrid


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


15-1380970650
xayam
2013-10-05 14:57
2014.03.23
Кубик-Рубика ведёт себя как атом, электрон или ... ?


15-1380876002
брат Птибурдукова
2013-10-04 12:40
2014.03.23
Вопрос по ассоциациям файлов, etc