Ramana Posted March 8, 2012 Posted March 8, 2012 Hello Friends, Greetings, I am trying with DCL programing for Basic calculator. i have defined buttons for all numbers and functions. i am able to display a number in the edit box, how to control the display of all picked buttons till i pressed any function button. please give me an basic idea to proceed with lisp program Thanks in advance Ramana Quote
BlackBox Posted March 8, 2012 Posted March 8, 2012 Are you doing this just to do it? I only ask as AutoCAD includes a pretty good calculator already... Use Ctrl + 8 to toggle view. Quote
Dadgad Posted March 10, 2012 Posted March 10, 2012 (edited) RenderMan said: Are you doing this just to do it? I only ask as AutoCAD includes a pretty good calculator already... Use Ctrl + 8 to toggle view. Or you can find it near the bottom of your right click shortcuts menu. If you expand it to see the whole thing you can set and save your own constant or function based variables and customizations there, as well as all manner of rapid preset conversions. Edited March 10, 2012 by Dadgad Quote
MSasu Posted March 10, 2012 Posted March 10, 2012 To address your DCL question, I’m afraid that is not possible to identify if the user inputted an operator (+, -, * or /) while filing the edit_box. This is because DCL doesn’t have a key event; the only event is ACTION_TILE which occur when the user move to other tile. So you will need to rely only on buttons to input the operators. Regards, Mircea Quote
MSasu Posted March 10, 2012 Posted March 10, 2012 Thinking twice on this I will say that there is a solution – the ACTION_TILE event is triggered also when user press while inputting in the edit_box; so if the user is instructed to press after an operand key you can read the content of the tile, retain the last character (validate it if is an accepted operand, remove it if not) as function in use and clean the tile to next input. But, things will get complicated if the user forget to press after an operand. Regards, Mircea Quote
BlackBox Posted March 11, 2012 Posted March 11, 2012 The only way I know of how to successfully monitor keystrokes within LISP is to code yourself a .NET LispFunction Method which uses the System.Windows.Forms Namespace for KeyPress, or KeyDown Event to return the Keys Enumeration. Quote
pBe Posted March 19, 2012 Posted March 19, 2012 You can however use slide_image as buttons, a year ago i tried to create a DCL caculator just for the fun of it. i dropped the idea as I cant get around all those arithmetic functions especilly "divide" Attached is my failed attempt, maybe you'll have better luck with it. (defun c:calD ( / _operand _values curV STotal nums) (vl-load-com) (defun _operand (lst sym / a) (set_tile "Total" (setq a (if (>= (length lst) 2) (rtos (eval (cons (eval (read sym)) (mapcar 'atof lst))) 2) (car lst)))) a ) (defun _values (var str) (setq var (strcat var (if (and (wcmatch var "*.*") (eq str ".")) "" str))) ) (setq curV "" STotal "" nums nil) (setq Dcl_sm (load_dialog "CALCD.DCL")) (new_dialog "Numbers" Dcl_sm) (set_tile "Title" " pBe Calculator") (start_image "Title") (foreach slnm (setq vls '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" "iplus" "iminus" "idivide" "iequal" "imultiply" "idot" "iCan")) (setq _X (dimx_tile slnm)) (setq _Y (- (dimy_tile slnm) 2))(end_image) (start_image slnm)(slide_image 1 1 _X _Y slnm) )(end_image) (foreach dgt '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0" ) (action_tile dgt (vl-prin1-to-string (quote (progn (setq curV (_values curv $key)) (set_tile "Total" curV))))) ) (action_tile "idot" "(setq curV (_values curV \".\")) (set_tile \"Total\" curV) ") (action_tile "iminus" "(setq nums (cons curV nums)) (setq STotal (_operand nums (setq sy \"-\")) curV \"\") ") (action_tile "imultiply" "(setq nums (cons curV nums)) (setq STotal (_operand nums (setq sy \"*\")) curV \"\") ") (action_tile "iplus" "(setq nums (cons curV nums)) (setq STotal (_operand nums (setq sy \"+\")) curV \"\") ") (action_tile "iequal" "(set_tile \"T\" (setq STotal (_operand (cons curV nums) sy)))(setq curV \"\" nums nil)") (action_tile "iCan" "(setq curV \"\" nums nil)(set_tile \"Total\" \"\") ") (action_tile "accept" "(done_dialog 1)") (start_dialog) (unload_dialog Dcl_sm) STotal ) You're going to have to crate your own slides for some reasons it wont accept it here as attachment HTH CALCD.DCLFetching info... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.