File dcl non funzionante

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
Salve a tutti,
sto tentando invano di far funzionare questo semplice programmino il lisp e dcl.
Le ho provate tutte, vorrei sapere perché no funziona, ringrazio anticipatamente.

Codice:
; MyYesNo - Question dialog with one question line
; Arguments: 2
;   Title$ = Dialog Title
;   Question$ = Question line
; Syntax: (MyYesNo " My Yes No" "Do you like creating programs in AutoLISP?")
;----------------------------------------------------------------------------------------------------------
(defun C:MyYesNo (Title$ Question$ / Answer$ Dcl_Id% Return#)
  (princ "\nMyYesNo")(princ)
  (setq Dcl_Id% (load_dialog "MyYesNo.dcl"))
  (new_dialog "MyYesNo" Dcl_Id%)
  (set_tile "Title" Title$)
  (set_tile "Text1" Question$)
  (action_tile "Yes" "(done_dialog 1)")
  (action_tile "No" "(done_dialog 0)")
  (setq Return# (start_dialog))
  (unload_dialog Dcl_Id%)
  (if (= Return# 1)
    (setq Answer$ "Yes")
    (setq Answer$ "No")
  );if
  (princ "\n")(princ Answer$)(princ);Optional
  Answer$
);defun MyYesNo

//---------------------------------------------------------------------------------------------------------
// MyYesNo
// Note: The width for the Text1 key was determined by the syntax example and
// will need to be changed as per your requirements. Also note that the buttons
// for Yes and No, the added fixed_width = true;.
//---------------------------------------------------------------------------------------------------------
MyYesNo : dialog {
  key = "Title";
  label = "";//Title$ from lsp file
  spacer;
  : text {
    key = "Text1";
    label = "";//Question$ from lsp file
    width = 35.0;
    alignment = centered;
  }
  spacer;
  : row {
    fixed_width = true;
    alignment = centered;
    : button {
      key = "Yes";
      label = "&Yes";
      is_default = true;
      width = 7.92;
      fixed_width = true;
    }
    : button {
      key = "No";
      label = "&No";
      is_cancel = true;
      width = 7.92;
      fixed_width = true;
    }
  }
}//MyYesNo
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
Dopo
(new_dialog "MyYesNo" Dcl_Id%)
aggiungi
(if (not (new_dialog "MyYesNo" dcl_id%)) (exit))
se non trova il file MyYesNo.dcl il programma termina.
E' una regola da seguire sempre, ti evita di impazzire cercando di trovare il difetto che è solo nel mancato caricamento del file dcl.
Per ovviare a questo o aggiungi il path nei percorsi di ricerca o lo specifichi, esempio:
"c:/miopercorso/MyYesNo" o "c:\\miopercorso\\MyYesNo"
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
Grazie,
ho inserito la riga ma ottengo sempre l'errore : "Comando: MYYESNO ; errore: argomenti mancanti"
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#4
Dimenticavo:
Syntax: (c:MyYesNo " My Yes No" "Do you like creating programs in AutoLISP?")
Scusa
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#5
Scusa ma non riesco a farlo funzionare, ottengo sempre "errore argomenti mancanti"
Grazie
Codice:
; MyYesNo - Question dialog with one question line
; Arguments: 2
;   Title$ = Dialog Title
;   Question$ = Question line
; Syntax: (MyYesNo " My Yes No" "Do you like creating programs in AutoLISP?")
;----------------------------------------------------------------------------------------------------------
(defun C:MyYesNo (Title$ Question$ / Answer$ Dcl_Id% Return#)
  (princ "\nMyYesNo")(princ)
  (setq Dcl_Id% (load_dialog "MyYesNo.dcl"))
  (new_dialog "MyYesNo" Dcl_Id%)
  (if (not (new_dialog "c:MyYesNo" dcl_id%)) (exit))
  (set_tile "Title" Title$)
  (set_tile "Text1" Question$)
  (action_tile "Yes" "(done_dialog 1)")
  (action_tile "No" "(done_dialog 0)")
  (setq Return# (start_dialog))
  (unload_dialog Dcl_Id%)
  (if (= Return# 1)
    (setq Answer$ "Yes")
    (setq Answer$ "No")
  );if
  (princ "\n")(princ Answer$)(princ);Optional
  Answer$
);defun MyYesNo




//---------------------------------------------------------------------------------------------------------
// MyYesNo
// Note: The width for the Text1 key was determined by the syntax example and
// will need to be changed as per your requirements. Also note that the buttons
// for Yes and No, the added fixed_width = true;.
//---------------------------------------------------------------------------------------------------------
MyYesNo : dialog {
  key = "Title";
  label = "";//Title$ from lsp file
  spacer;
  : text {
    key = "Text1";
    label = "";//Question$ from lsp file
    width = 35.0;
    alignment = centered;
  }
  spacer;
  : row {
    fixed_width = true;
    alignment = centered;
    : button {
      key = "Yes";
      label = "&Yes";
      is_default = true;
      width = 7.92;
      fixed_width = true;
    }
    : button {
      key = "No";
      label = "&No";
      is_cancel = true;
      width = 7.92;
      fixed_width = true;
    }
  }
}//MyYesNo
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#6
Crea una directory e copiaci i due file.
Aggiungi ai percorsi di ricerca la directory creata.
Carica il file Dialog.lsp e immetti su command:
(c:MyYesNo "My Yes No" "Do you like creating programs in AutoLISP?")
L'ho provato e funziona.
 

Allegati

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#7
Ho provato funziona, ora vorrei modificare i due files in modo da usarli, non come "MyYesNo" in modo generico ma in modo particolare, quindi fornendo nel lancio, il testo della domanda.
Il testo della domanda dovrebbe far parte dei file stessi, lanciando quindi il comando solo col suo nome, come si lancia normalmente un LISP.
Si può fare?
La domanda è "Vuoi veramente cancellare il File '", il nome dei due file "EliminaLib" ed il nome dei pulsanti "Si" e "No"
Ho provato a farlo io ma con risultati deludenti.
Grazie
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#8
da lisp basta utilizzarla come funzione:
(if (= (c:MyYesNo "Elimina" "Vuoi veramente cancellare il File ?") "Yes")
(istruzioni per cancellare file)
)