Rekomendowane odpowiedzi

Witam.

Jakoś do tej pory nie było mi potrzebne ale przy pisaniu tego DCL'ka by mi się przydało. Czy jest możliwość w oknie DCL w elemencie edit_box validować wartość takiego pola tekstowego w trakcie zmiany jego wartości?

Chodzi mi o taką funkcjonalność, która na bieżąco w trakcie pisania sprawdzałaby wartość pola i podejmowała akcję po każdej zmianie wartości. Coś w stylu zdarzenia OnChange dla C# i WinForms.

Chciałbym sterować cechą enable przycisku w zależności od tego czy wartość w polu tekstowym jest prawidłowa lub nie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Na 99.9% da się to zrobić. Mam taki fragment kodu sprawdzający czy wpisana została liczba.
 

(defun DCL:CheckNum ( / )
 (if (not(> (atof $value) 0)) (set_tile $key  "")(set_tile $key (rtos(atof $value)) ) )
)

To jeszcze trzeba osadzić w kontekście DCLa i  na to nie mam przykładku tak na szybko.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

NIezupełnie wyszło tak jak chciałem, ale może wystarczy.

Blokuje inny element okna. ale nie przy każdej zmianie, ale przy zatwierdzaniu wartości, np przechodząc do innej komórki,albo [enter] na koniec.

plik DCL wygląda tak:

EditCheck : dialog {
	label = "";
	
    :edit_box{
		key="path"; 
		label="Ścieżka"; 
		edit_width=6;
		fixed_width=true;
		action = "(DCL:Edit:IsValid)";		
		}

	: button {
		action = "(done_dialog 0)";
		key = "accept";
		label = "Zapisz";
	}
	: button {
		action = "(done_dialog 0)";
		key = "cancel";
		label = "Anuluj";
		is_cancel = true;
	}
}

plik LSP tak:

(defun DCL:Edit:IsValid ( / 
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nDCL:Edit:IsValid :*error*: " ) (princ msg ) (princ "\n")	) )
	)      
	(print (strcat "wartość wpisana do okna: " $key  " to: " $value ) )
  (if (= "" $value)  
	(mode_tile "accept" 1)
	(mode_tile "accept" 0)
  )
  
)


(defun c:testEdit ( / dcl_id RunDialogResult coords LastPath 
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nc:testEdit:*error*: " ) (princ msg ) (princ "\n")	) )
	)   
		(setq DCL_Path "C:\\<<   TWOJA ŚCIEŻKA   >>\\edit_check.DCL")
		(setq dcl_id (load_dialog DCL_Path))
		(setq RunDialogResult t )
		(setq LastPath "" )
		(while RunDialogResult 
			(if(not(new_dialog "EditCheck" dcl_id))(exit))	
			(action_tile "cancel" "(done_dialog -1)")
			(setq RunDialogResult(start_dialog))
			(cond 				
				((= RunDialogResult 0) (progn (setq RunDialogResult nil )))	; ESC pressed
				(t (print RunDialogResult))
			)
		)
		(unload_dialog dcl_id)
		(princ)
	)

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się