prompt()

Здесь обсуждается всё, что касается макросов.
User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 12:49

Latest post of the previous page:

Это как? Если надо различить пустое значение и Esc? То есть, по сути, Enter и Esc?
Magically yours
Raistlin

User avatar
zg
zero-gravity
Posts: 5621
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 104 times
Contact:

Re: prompt()

Post by zg » Tue 23 Aug, 2011 13:22

Raistlin wrote:Это как? Если надо различить пустое значение и Esc? То есть, по сути, Enter и Esc?
у символа 65536 возможных значений. я думаю, влезет :roll:

User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 13:30

Не понимаю все равно. У меня значение по умолчанию - пустое. Нажимается или Esc, или Enter. И как различать?
Magically yours
Raistlin

User avatar
HaRT
Moderator
Posts: 9091
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 161 times

Re: prompt()

Post by HaRT » Tue 23 Aug, 2011 13:35

Raistlin wrote:И как различать?
Очевидно, zg имел в виду не то, как это можно использовать сейчас в макросах, а как это можно малой кровью реализовать в Фаре.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 13:40

Гм. А возвращать 0 - это большая кровь?
Magically yours
Raistlin

Yegor
Posts: 1030
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 8 times
Been thanked: 19 times

Re: prompt()

Post by Yegor » Tue 23 Aug, 2011 14:06

Для уже написанных макросов - огромная :)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 14:12

Хотелось бы услышать разработчиков. Возможна ли вообще эта "малая кровь"? Короче говоря, что-то надо делать, а то такая порнография в логике работы макросов получается - мама не горюй.
Magically yours
Raistlin

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: prompt()

Post by Skirda » Tue 23 Aug, 2011 14:23

macro.cpp::promptFunc()

Code: Select all

  if (GetString(...
  {
   ...
  }
+> else
+>   Result=0;
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

Re: prompt()

Post by John Doe » Tue 23 Aug, 2011 14:43

Raistlin wrote:А что тут можно придумать? По идее, надо возвращать и значение, и код ошибки, но это такой глобальный перекрой...
Можно то что предложил выше HaRT, или то что zg.
Лично меня простой 0 устроит, просто надо разжевать в Писании.
HaRT wrote:Очевидно, zg имел в виду не то, как это можно использовать сейчас в макросах, а как это можно малой кровью реализовать в Фаре.
Я так понял что речь именно о макросах.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: prompt()

Post by Skirda » Tue 23 Aug, 2011 14:46

John Doe wrote:Можно то что предложил выше HaRT.
Кудой? Уже и так перебор с параметрами:

Code: Select all

S=prompt("Title"[,"Prompt"[,flags[, "Src"[, "History"]]]])
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 14:49

Skirda wrote:
John Doe wrote:Можно то что предложил выше HaRT.
Кудой? Уже и так перебор с параметрами:
Ну, лишних там нет. И я в результате не понял твоей позиции, честно говоря. Ты за status quo?
Magically yours
Raistlin

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

Re: prompt()

Post by John Doe » Tue 23 Aug, 2011 14:50

Skirda wrote:Уже и так перебор с параметрами:
Можно было бы ещё один опциональный, он ведь на практике далеко не всегда нужен.
Но да, многовато конечно, я думаю обойдёмся нулём.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: prompt()

Post by Skirda » Tue 23 Aug, 2011 15:14

Raistlin wrote:И я в результате не понял твоей позиции, честно говоря. Ты за status quo?
возврата нуля недостаточно?
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Raistlin
Posts: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 15:17

Достаточно, конечно. Я просто не понял ответа. :oops:
Magically yours
Raistlin

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: prompt()

Post by Skirda » Tue 23 Aug, 2011 15:32

Я выше привел код, который возвращает 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: 698
Joined: Wed 16 Mar, 2005 16:01
Location: St. Petersburg
Has thanked: 1 time
Been thanked: 1 time
Contact:

Re: prompt()

Post by Raistlin » Tue 23 Aug, 2011 15:39

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

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

И вообще, нужно ли такое умолчальное поведение без флага 1, когда Enter при пустой строке не возвращает значения, - этим кто-нибудь пользуется?
Magically yours
Raistlin

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 3 times

Re: prompt()

Post by Skirda » Tue 23 Aug, 2011 15:46

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

ы?
We are the Borg. You will be assimilated.
So Say We All!

Post Reply

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