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


Recommended Posts

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.

Link to comment
Share on other sites

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)
	)

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...