| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему edit_box корректно отображает только первое и последнее значение?

Почему edit_box корректно отображает только первое и последнее значение?

Ответ
Поиск в этой теме
Непрочитано 28.04.2020, 06:24 #1
Почему edit_box корректно отображает только первое и последнее значение?
Fedorino
 
автоматизация и организация черчения
 
Sterlitamak
Регистрация: 17.11.2009
Сообщений: 135

Добрый день! Написана программа - таймер обратного отсчета. Задается количество секунд, нажимается кнопка и идет обратный отчет. В процессе работы, программа вставляет в поле таймера значения, но они не успевают отображаться за счет загруженности программы. Мы видим только первые и последние секунды. Если же помогать мышкой прощелкивать вручную поле edit_box, то можно уловить некоторые промежуточные значения таймера. Помогите решить проблему с отображением всех чисел. Задержка delay не помогает.
Код диалога dcl.
Код:
[Выделить все]
time2: dialog {label = "Таймер";

:text {key = "text1";}

:boxed_row
 {
 label = "Значение таймера";
:edit_box {key = "second";label = "Секунды"; value = ""; edit_width = "6"; fixed_width = true;}
}

:row{
:button {key = "eq_but"; label = "Запуск"; width=20;edit_width=15;is_default = true;}
:button {key = "accept2"; label = "Закрыть"; width=20;edit_width=15;is_cancel = true;}
}

}
Код программы.
Код:
[Выделить все]
 

(vl-load-com)

(defun c:test(/ text what_next val val2 second date actdoc chp err)
	
	; ошибка
	(defun *error* (msg)
		(princ msg)
	)

	; функция определения текущего времени в формате м:с
	(defun wait2 ( / date)
		(setq actdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
		(setq date (itoa (fix (* 1e6 (- (getvar "cdate") (fix (getvar "cdate"))))))) ;_ end of setq
		(setq date (substr date 2))
		date
	)
	
;----Установка начальных значений переменных
  (setq what_next 2 minute 0 second 0)
  (if (< (setq dcl_id (load_dialog "time2.dcl")) 0)(exit))
  
  (while (>= what_next 1) ;Начинаем бесконечный цикл 
     (if (not (new_dialog "time2" dcl_id)) (exit)) ;отобразить окно на экране. При неудаче - выйти

		(set_tile "second" (itoa second))
		
		(setq second (1+ second))
	(setq chp T)
	(if (eq what_next 1)
		(progn
			(defun ff (/)
				(if chp 
					(progn
						(setq date (wait2))
						(while (eq (wait2) date))
						(setq date (wait2))
						
						(setq val (substr date 3 2))

						(cond ((not (eq second 0))
								(cond ((not (eq val val2))					
										(set_tile "second" (itoa (setq second (1- second))))
										(setq val2 val)
									)
								)
								(ff)
							)
							((eq second 0)
								(set_tile "second" "0")
								(setq chp nil)							
							)
						)
					)
				)
			)
			(if chp (ff))
		)
	)
	
	(if text (set_tile "text1" text))
    
    (action_tile "eq_but" "(setq second (atoi (set_tile \"second\" (get_tile \"second\")))) (done_dialog 1)")  ;действие по нажатию на кнопку OK.
    (action_tile "cancel" "(done_dialog)(unload_dialog dcl_id)(exit)") ;действие по нажатию на кнопку Cancel

    (setq what_next (start_dialog))
		
    (cond ;выбор в зависимости от состояния флага what_next
	  ((= what_next 1)
	  
	  (setq err nil)
	  	(cond
			((eq second 0)
			   (setq text "Ошибка! Время не задано!")
			   (setq err T)
			)
			((> second 59)
			   (setq text "Ошибка! Количество секунд не должно быть больше 59!")
			   (setq err T)
			)
			((< second 0)
				(setq text "Ошибка! Отрицательные значения!")
				(setq err T)
			)
		)
		
		(if (not err) (setq text nil))
		(if err (setq what_next 2))
		(if (not err) (done_dialog))
		
	  )
	)	
  );while

  (unload_dialog dcl_id) ;выгрузка диалогового окна из памяти
 

	(print "OK!") 
	(*error* nil)
 
)


Вложения
Тип файла: rar time.rar (1.5 Кб, 4 просмотров)

__________________
слесарь САПР
Просмотров: 1718
 
Автор темы   Непрочитано 13.05.2020, 06:34
#2
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


В общем ответа так и не последовало. Да и решения подобной проблемы на ресурсе я не нашел. Но возможно кому-то когда-нибудь пригодится данная информация. После консультации с коллегами, было принято решение, создать 2 диалоговых окна. Первое загружается для ввода данных через edit_box. После запуска таймера, скрывается первое диалоговое окно и загружается второе. Данные таймера помещаются в элементы text, а не в edit_box, как в приведенном коде. Через text проблем с отображением нет, все данные корректно сразу обновляются, таймер без задержек выдает обратный отсчет. После достижения 0, диалоговое окно 2 скрывается, и грузится снова диалоговое окно 1, ожидающее нового ввода данных. Код приводить не буду, надеюсь алгоритм понятен.
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 13.05.2020, 08:53
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


даже представить себе не могу, зачем нужен самозакрывающийся диалог ввода с отсчетом времени закрытия)
Сергей812 вне форума  
 
Автор темы   Непрочитано 13.05.2020, 12:43
#4
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
даже представить себе не могу, зачем нужен самозакрывающийся диалог ввода с отсчетом времени закрытия)
Какие только задачи не дают студентам.
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 13.05.2020, 13:13
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от Fedorino Посмотреть сообщение
Какие только задачи не дают студентам.
да пользователя просто могут отвлечь, а в это время интерфейс программы живет своей собственной жизнью)
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему edit_box корректно отображает только первое и последнее значение?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с расчетом Ж/Б каркаса в ANSYS derik ANSYS 457 04.07.2017 16:16
Почему для крайнего ряда в двухветвевых колоннах связи ставят только по подкрановой ветви vlasctelin Металлические конструкции 40 17.05.2015 21:54
Не корректно отображает шрифт serj323 AutoCAD 1 24.05.2011 11:26
Почему выполненяется только 1 sql запрос к ADODB без использования базы данных по умолчанию? Дима_ Программирование 8 26.02.2009 08:50
Почему field возвращает координаты объекта только в мировой системе координат? stumpel AutoCAD 7 20.02.2009 12:43