|
|
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Привет! Собственно вопрос - если установить на форме кнопке ("Выход") свойство CANCEL (.Т.), то при нажатии ESC будет автоматом нажиматься эта кнопка. А есть ли стандартный способ узнать была ли эта кнопка нажата? Или это только ручными методами можно расписать, к примеру создать класс? Это нужно для некоторых объектов - на их дестрое от того была нажата кнопка CANCEL или нет зависит дальнейшее действие. вфп9 спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 13:37 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
lastkey() = 27 но тут подводные камни при работе клавой и мышей одновременно. Проще свойство-флаг завести и в форме KeyPress() прописать Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 14:06 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Нажатие Esc вызовет именно нажатие кнопки со свойством Cancel=.T. Разумеется, программное. Т.е. нажатие кнопки произойдет в любом случае, просто оно может предваряться нажатием Esc. Поэтому, не вполне понятна необходимость как-то различать эти режимы. Все события будут одинаковыми. Собственно, Esc в данном случае, интерпретируется как "горячая клавиша" для нажатия кнопки. Если Вы пытаетесь реализовать различную функциональность при разном способе "нажатия" кнопки, то это не лучший путь. Вы скорее получите дополнительные проблемы. Причем не в смысле программирования, а с пользователями. Они будут задавать вполне резонные вопросы: почему получается разный результат при выполнении одних и тех же действий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 18:11 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Функциональность следующая: юзеру выводицо форма, на ней текстбоксы. Один из них Имя. На его методе Release я пытаюсь пополнять бд имен, если введено какое-то новое. Но если юзер наберет в этом текстбоксе какой-нить бред и затем тупо нажмет Выход (неважно как, мышкой, клавой, но именно кнопку с CANCEL(.T.)) то бд имен будет обновлена этим бредом, а я этого не хочу. Выходит что ради такого функционала необходимо добавлять форме содержащей такой текстбокс пропертя типа CancelPressed и потом его обрабатывать - в клике кнопы Выхода ставить туды .Т. либо создать класс формы с таким свойством и кнопкой - вроде как не помешает в любом случае... Если добавлять в ините текстбокса (что по ходу мне все равно не подходит), то как уследить за тем чтобы не попытаццо добавить такое св-во форме несколько раз, т.к. таких текстбоксов может быть не 1 на одной форме? Короче либо класс формы, либо на ините формы добавлять пропертя, а тексбоксы научить это св-во проверять перед апдейтом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 20:14 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
да, забыл добавить, у формы 2 кнопки - первая Применить/Записать а вторая Выход. Обе заканчиваются одной строчкой Thisform.Release после чего срабатывает метод Release и у всех объектов формы. Поэтому-то и важно что нажал юзер - Выход или Применить. А заранее я не знаю сколько на форме объектов типа текстбокса Имя чтобы прописать это в кнопке Применить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 20:23 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
"CTAC-KO" <nospam@sql.ru> wrote in message news:5157067@sql.ru... Автор: CTAC-KO да, забыл добавить, у формы 2 кнопки - первая Применить/Записать а вторая Выход. Обе заканчиваются одной строчкой Thisform.Release после чего срабатывает метод Release и у всех объектов формы. Поэтому-то и важно что нажал юзер - Выход или Применить. А заранее я не знаю сколько на форме объектов типа текстбокса Имя чтобы прописать это в кнопке Применить Так не делается. Для чего тогда кнопка Применить ? Вот в ней и надо делать обновление базы с выходом, а в кнопке Выход - откат всех значений. Тогда и проблем таких не будет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 21:32 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
никогда так не делал.. на кнопке ВЫХОД просто релиз и все - форма закрылась.. а на кнопке применить - пошли задачи по вводу того, что на форме в БД... если применить не нажали - то ничего в БД и не изменится... вот и все дела.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 22:34 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Ну, Вам уже "намекнули", что "Выход" - это выход БЕЗ сохранения. Не важно, что там пользователь наизменял. Откат изменений - и все. В Вашей же постановке я по прежнему не вижу смысла. Ну, научились Вы как-то различать, что пользователь нажал именно Esc (проще всего для этого присвоить Cancel=.T. не кнопке "Выход", а кнопке "Применить"). А как Вы определите, что пользователь ввел "не бред" и этот "не бред" надо записать в базу? Процесс сохранения - это довольно сложный и не однозначный процесс. Требует множества проверок и условностей. Возможен диалог с пользователем. Вешать этот процесс на событие уничтожения , как минимум, не осмотрительно! А вдруг пользователь решил уточнить значение? А Вы уже уничтожили объект, где он мог бы ввести исправления. Ведь отменить действие Release невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 23:19 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
А не проще на queryunload повесить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. , на keypress формы Код: plaintext 1. 2. Вот и получаешь при нажатии эскейпа взов кверианлоад, а там уж проверяй в отдельном методе, для начала, вносились ли изменения в инфу на форме (checkchanges()) , корректно ли введена инфа (check()). Если правильно - сохраняй резы (mysave()) и выходи. Что еще нужно? Зачем придумывать велосипед? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 00:29 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Не, не, не!!! Вы все неправильно меня поняли. Вернее не совсем правильно!!! Это, безусловно, моя проблема... Все правильно, вопрос поставлен именно из-за нежелания изобретать велик, еси он уже... Знач дело вот в чем - есть тектбокс Имя. Если пользователь нажал кнопку Применить, то в соотв. базы происходит заполнение всяких полей из текстбоксов, в том числе Имя. Но!!! Есть ОТДЕЛЬНАЯ БАЗА ИМЕН!!! Я туда пытаюсь какбы справочник заливать. Типа чел на вводе набирает Анд а ему предлагается ввести Андрей (а чтоб такое было возможно необходимо внести в этот справочник такое имя). А это означает существование справочника имен (фамилий, отчеств, городов, стран, улиц и тд)! Именно его я хочу на методе Release заполнять или не заполнять, отдельно от тех заполнений бд что идут по кнопке Применить. Именно потому и важно что выбрал юзер - Применить или Выход. Еси Применить, то ясно что на Release текстбокса его справочник необходимо обновить если данные новы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 01:47 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
и собственно весь сыр-бор из-за чего? Я подумал так - раз есть такое св-во для кнопки как CANCEL то может быть есть и какой-то метод или системная переменная которые помогут определить сработало ли это самое CANCEL? т.е. по ходу исключить создание велосипеда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 01:57 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Ну ты даешь! :) Че ж сразу не объяснить по-русски :) Вот и сделай себе на кейпрес формы Код: plaintext 1. 2. 3. 4. Здесь savetoarh() - это сохранение всех новых записей в твой архив или справочник, как хочешь, так и называй. А уже в этом методе формы для начала пробегись по всем нужным контролам на форме (типа for each ocontrol in thisform.objects), а потом проверяй есть уже такое значение в справочнике или нет. После чего или добавляй в отдельном методе или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 02:54 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
CTAC-KOВсе правильно, вопрос поставлен именно из-за нежелания изобретать велик, еси он уже... Извини, но все же твой вопрос читается "Как сделать велик не как все" CTAC-KOЗнач дело вот в чем - есть тектбокс Имя. Если пользователь нажал кнопку Применить, то в соотв. базы происходит заполнение всяких полей из текстбоксов, в том числе Имя. Но!!! Есть ОТДЕЛЬНАЯ БАЗА ИМЕН!!! Я туда пытаюсь какбы справочник заливать. ... Какая разница где что хранится. Сохраняться надо по кнопке "Применить/Сохранить", а не в методе Release() Если текстбокс у тебя на основе своего класса, то сделай ему метод Save(), а далее несколько вариантов: 1. Дописать в кнопке "сохранить" на форме: Код: plaintext 1. 2. Если хочешь один раз написать и забыть сделай в базовом классе формы метод SaveAll(), который вызовает метод Save() каждому объекту, который есть на форме. Метод SaveAll() вызывай из кнопки сохранить. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 07:20 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
Dima T CTAC-KOВсе правильно, вопрос поставлен именно из-за нежелания изобретать велик, еси он уже... Извини, но все же твой вопрос читается "Как сделать велик не как все" та да, есь маленько, но в сабже коротко и ясно вроде... :) Короче как я понял вшитого велика нету, знач изобретаем свой. Решил просто все формы заменить на свою_классовую со свойством Canceled и кнопкой Выход в которой на клике свойство формы Canceled становиццо .Т. Ну а в классе текстбокса на дестрое обновляю справочнег только еси Canceled не тру :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 13:01 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
CTAC-KOКороче как я понял вшитого велика нету, знач изобретаем свой. Решил просто все формы заменить на свою_классовую со свойством Canceled и кнопкой Выход в которой на клике свойство формы Canceled становиццо .Т. Ну а в классе текстбокса на дестрое обновляю справочнег только еси Canceled не тру :) Тебе ВладимирМ уже писал, но я повторю: ты идеологически неправильное решение выбрал, поэтому и легкого решения не получается. Два способа: Твой: Запретить сохранение в текстбоксе отовсюду, кроме кнопки "сохранить" Правильный: Сохранить в текстбоксе при нажатии кнопки "сохранить" Чувствуешь разницу? Стоить тебе пропустить одно место для установки флага и твоя прога начнет неправильно работать, а ты об существовании этого способа отработки Destroy() можешь даже не догадываться, а юзер придумает "неправильную" комбинацию действий, и скажет прога кривая. И прав будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 14:44 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
К моему сожалению, мой метод решения поимел один минус. Я хотел по-любому избавиться от необходимости что-либо вносить в код кнопки Применить, если на форме присутствуют такие текстбоксы... Минус заключается в нажатии на стандратную кнопку закрытия формы (или CTRL-F4). Тогда кнопка со свойством CANCEL "не срабатывает". В итоге я записую в бд текстбоксов бред, т.к. соотв. свойство формы Canceled никто не изменяет на .Т. ... Пришлось установить форме изначально свойство Canceled = .T. и только в коде кнопки Применить изменять его на .F. Так что в итоге можно было не изгаляццо (выдумывать велик), а юзать предложенное мне Вами :), особенно SaveAll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 18:03 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
CTAC-KOТак что в итоге можно было не изгаляццо (выдумывать велик)... Изгаляцо можно, даже нужно. Для общего развития. Только потом (со временем) понимаешь что ерунда получилась. Проверено, сам таким был :) Долго по началу не понимал зачем умные дядьки в книжках такую "ерунду" написали когда в десять раз проше все делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2008, 18:09 |
|
||
|
У кнопок есть св-во CANCEL. А есть ли стандартный способ узнать что она была нажата?
|
|||
|---|---|---|---|
|
#18+
CTAC-KO Минус заключается в нажатии на стандратную кнопку закрытия формы (или CTRL-F4). Тогда кнопка со свойством CANCEL "не срабатывает". В итоге я записую в бд текстбоксов бред, т.к. соотв. свойство формы Canceled никто не изменяет на .Т. ... от йолы-палы ! Ну написали же ш Вы мне в первом же ответе про QueryUnload, а я теперь тут жаловаццо давай про "стандратную кнопку закрытия формы (или CTRL-F4)"... Вот и решен вопрос с минусом и в Применить ничего теперь не надо вписывать. А про изгаляццо - это да, я всегда стараюсь не просто взять что-то предложенное, но и попробовать создать что-то альтернативное, типа почему предложено так, а не эдак, если мне это сразу не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2008, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35066466&tid=1588282]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 390ms |

| 0 / 0 |
