[DCL] Walidacja wartości edit-box'a


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.

Odnośnik do komentarza
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.

Odnośnik do komentarza
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)
	)

 

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie