prompt()

Здесь обсуждается всё, что касается макросов.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: prompt()

Post by Skirda »

Latest post of the previous page:

Я выше привел код, который возвращает 0 или ''
но prompt вернет, только если есть флаг 1

macro:post print("'"+prompt("Foo","prompt",1)+"'")
Enter (при пустой строке): ''
Esc (при пустой строке): '0'

macro:post print("'"+prompt("Foo")+"'")
Enter (при пустой строке): '0'
Esc (при пустой строке): '0'
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

А Esc при непустой строке? По-моему, правильнее так:

macro:post print("'"+prompt("Foo","prompt",1)+"'")
Enter (при пустой строке): ''
Esc (при любой строке): '0'

И вообще, нужно ли такое умолчальное поведение без флага 1, когда Enter при пустой строке не возвращает значения, - этим кто-нибудь пользуется?
Magically yours
Raistlin
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: prompt()

Post by Skirda »

дело в том, что prompt основан на API функции InputBox, у которой по умолчанию пустая строка не допускатся, т.е. нужен флаг FIB_ENABLEEMPTY (тот самый 1)
могу сделать так: удаляем поддержку флага:
0x00000001 - Даже если строка ввода пуста, функция вернёт значение (пустую строку).
и принудительно ставим этот флаг внутри prompt при вызове InputBox

ы?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: prompt()

Post by John Doe »

http://api.farmanager.com/ru2/macro/macrocmd/prop_func/general.html#prompt wrote:

Code: Select all

0x00000001	Даже если строка ввода пуста, функция вернёт значение (пустую строку).
Я что-то напрочь не пойму смысл этого флага. Сейчас он ни на что не влияет.
Поэтому не вижу зачем бы его оставлять.
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

Skirda wrote:могу сделать так: удаляем поддержку флага:
и принудительно ставим этот флаг внутри prompt при вызове InputBox
Мне тоже этот флаг на фиг не нужен, но народ (Yegor) выше беспокоился о совместимости. Можно 0 возвращать при установленном флаге, а при отсутствии - работать как раньше. Если, конечно, кому-то это реально надо.
Magically yours
Raistlin
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: prompt()

Post by Skirda »

John Doe wrote:Я что-то напрочь не пойму смысл этого флага. Сейчас он ни на что не влияет.
http://api.farmanager.com/ru2/service_f ... utbox.html
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: prompt()

Post by John Doe »

Raistlin wrote:...но народ (Yegor) выше беспокоился о совместимости
Тут глобальный слом, а они о совместимости..
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

Вообще да, ну их в топку, какие-то непонятные рудименты. А то будем все этот флаг постоянно пририсовывать :).
Magically yours
Raistlin
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: prompt()

Post by Skirda »

правильно я понял, что этот флаг по умолчанию выставлен для prompt?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

Да.
Magically yours
Raistlin
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

Мне кажется, среди флагов есть еще пара кандидатов в морг:

Code: Select all

0x00000010 Показать разделительную линию и кнопки [ Ok ] и [ Cancel ]. Диалог увеличится на 2 строки.
0x00000020 Не показывать в приглашении ввода амперсанд, использовать его для определения горячей клавиши. 
Второй так уж точно - куда переходить по горячей клавише в диалоге, где только одно поле и больше ничего? Ну, конечно, если заодно указать первого кандидата, то появляются еще две (бессмысленные) кнопки - можно, значит, сначала встать на них, а потом вернуться в поле редактирования - по горячей клавише, ага. Маразм.
Или есть планы по развитию prompt() до нескольких полей?
Magically yours
Raistlin
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: prompt()

Post by Skirda »

на счет 0x00000020 - это копипасте из другого места.
у GetString (на чем паразитирует промпт) можно выводить еще чекбокс.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

И какую функцию этот чекбокс тут может выполнять?
Вот если б prompt() работал как !?<title>?<init>! - выводил несколько полей одновременно, - это было бы хорошо.

Code: Select all

S=prompt([Title1[,Prompt1[,Flags1[,Src1[,History1]]]]...])
А?
Magically yours
Raistlin
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: prompt()

Post by HaRT »

Raistlin wrote:Второй так уж точно - куда переходить по горячей клавише в диалоге, где только одно поле и больше ничего? Ну, конечно, если заодно указать первого кандидата, то появляются еще две (бессмысленные) кнопки - можно, значит, сначала встать на них, а потом вернуться в поле редактирования - по горячей клавише, ага.
В Фаре есть несколько стандартных диалогов именно такого вида: поле ввода с меткой и кнопки OK и Cancel. И как раз меня уже много лет огорчает, что в этих диалогах амперсанд в метке поля ввода не приводит к созданию горячей клавиши. Т.ч. приходится извращаться и добавлять горячую клавишу в заголовок диалога — выглядит зачастую некрасиво, зато позволяет одним фиксированным аккордом перейти в поле ввода.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: prompt()

Post by Raistlin »

Ну, я-то конкретно про prompt() говорю. Тут переходить некуда.
Magically yours
Raistlin
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

prompt()

Post by John Doe »

Skirda wrote: Tue 23 Aug, 2011 16:08правильно я понял, что этот флаг по умолчанию выставлен для prompt?
Поскольку флаг 0x00000001 (FIB_ENABLEEMPTY) не задействован, его следует удалить из документации.
Post Reply

Return to “Обсуждение макросов”