Тема: DCL и alert

Как известно в LISP'е есть функция (alert "Сообщение"), которая выводит в диалоговом окне сообщение. Но есть один недостаток - только кнопка OK. Хотел сделать подобную функцию, но столкнулся с тем, что при передаче в DCL текстовой строки, она обрезается от первого пробела до конца. Кто знает, где собака зарыта?

Re: DCL и alert

Вот пример для твоего вопроса (При условии если я егог правильно понял, если нет то покажи свой)
DCL
Alerts : dialog {           
           label = "Метод выбора объектов";
           : text {
        key = "strings";
        label = "str";
      }
    ok_cancel;
         }               
LISP
(defun str_vb (/ rad1 rad2 rad3 userclick)
   (setq dcl_id (load_dialog "Vibor.dcl"))
   (if (not (new_dialog "Alerts" dcl_id))
     (exit)
   )                    ;if
   (set_tile "strings" "proba ff tre") передача строки (можно сделать переменной)
   (start_dialog)
   (unload_dialog dcl_id)
)                    ;defun

Re: DCL и alert

Да, все именно так. Но если нужно вывести текст в несколько строк (примерно так: "Первая строка\nВторая строка\nТретья строка"), то выводится только до управляющего символа "\n". А alert'ом это возможно...

Re: DCL и alert

Kos, если знаешь кол-во строк, или возьми на пару больше, если сомневаешься,
Alerts : dialog {
label = "Метод выбора объектов";
: text {
key = "strings1";
label = "str1";
}
: text_part {
key = "strings2";
label = "str2";
}
и т.д.
ok_cancel;
}

Re: DCL и alert

Так и делаю, но хочется необычайной красоты и универсальности.

Re: DCL и alert

Вариантов два. Учить С++ или генерировать исходник DCL из программы.

Re: DCL и alert

Вообщето можно более универсально но более сложно
- Пишем эмулятор dcl, попросту функция при посылке строки с \n анализируя, разбивает на подстроки нашу строку и затем генерирует dcl файл согластно кол-ву подстрок. запускаем функцию вызова  ентого dcl и передаем в него наши подстроки. после завершения dcl удаляем. Вот и все.

Re: DCL и alert

Точно не помню, ноя решал эту проблему через ДЦЛ.

Просто для текстового поля ставил высоту на несколько строк, и фиксировал!

height=5;
fixed_height=true;

Вроде так!!

Re: DCL и alert

Если нужно выводить много строк, надо использовать не текстовые поля, а список.

А самое лучшее, сделать ARX с использованием WinAPI и забыть про DCL и конструирование простых диалогов (сообщения, ДА-НЕТ и тому подобное)

DCL, в нынешних услвиях, слишком коряв, архаичен и "нефотогеничен"

Re: DCL и alert

А я вообще очень часто использую генератор DCL.
Но не влоб из программы, а использую файл-"болванку", закачиваю этот файл в список, а потом программно меняю нужные строки и записываю во временный DCL.
Таким образом у меня написано, к примеру, универсальное диалоговое окно со списком выбора, высота которого автоматически подстраивается под длину списка, а ширина - под длину самой длинной строки в списке.

Re: DCL и alert

Если обрезается строка надо в dcl в атрибутах edit_box - установить width=<значение>; fixed_width = true;

Re: DCL и alert

Скачайте бесплатную библиотеку DosLib.

http://www.mcneel.com/download.htm

И попробуйте, например:
(dos_msgbox "Привет1\nПривет2\nПривет3\nПривет4!" "Сообщение об ошибке !" 1 2)

Кстати, в этой библиотеке много чего полезного.