Hmm...I've added a "readonly button" to it.
So now if you hit the read only button it will open the read only file, but as you stated it will open the dialog box up again to ask for cancel/readonly/open.
If you hit open it keeps both the original dwg open and the readonly copy open.
If you hit cancel it cancels the readonly copy, but keeps the orginal one open.
If you hit read only again, it goes into the dialog box again after it opens another read only copy.
Here's my modified version:
LSP file:
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; This program is designed to be used with the warnr14.dcl file.
;; They are to be stored locally on the users' machine under the product's support file area.
;; I.E.: C:Program Files_Autodesk Building Systems 2007_Support
;; This program uses the slide image "WarnImage.sld" that is stored here: F:HBEDT2K7_Setup
;; It was created to pop-up a warning when a dwg of a lower version is opened in a 2007 product.
;; The user will get a choice to cancel out of the open, or go ahead with the open.
;; Currently this pop-up will appear if the file is opened full out or read-only.
;; It will not affect any dwgs that are already open in that session of Acad (ADT or ABS).
;; Please do not use-alter-modify this file without contacting Abbie Meador first.
;; Created by Abbie Meador.
;; Last modified on 09-26-08 by Abbie Meador.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq mykey "sld") ;;Naming the slide image
(setq myslidename "F:\\HBEDT2K7\\Setup\\WarnImage.sld") ;;Locating the slide file
(setq dwgfile (strcat (getvar "dwgprefix")(getvar "dwgname"))) ;;Setting value to dwfile variable, pulling info from dwg file
(setq rfile (open dwgfile "r")) ;;Set value to rfile
(setq dwgver (substr (read-line rfile) 1 6)) ;;Set value to dwgver by reading version info from dwg file
(close rfile) ;;Closes rfile where dwg version info was stored
(cond ;;Conditions to assign acadv variable text info based off of dwg version
((= dwgver "AC1021") ;;If it is a 2007 version dwg it will automatically close out of this lsp routine
(close)
)
((= dwgver "AC1014")
(setq acadv "AutoCAD R14")
)
((= dwgver "AC1012")
(setq acadv "AutoCAD R13")
)
((= dwgver "AC1009")
(setq acadv "AutoCAD R11 or R12")
)
((= dwgver "AC1006")
(setq acadv "AutoCAD R10")
)
((= dwgver "AC1004")
(setq acadv "AutoCAD R9")
)
((= dwgver "AC1002")
(setq acadv "AutoCAD R2.6")
)
((= dwgver "AC1.50")
(setq acadv "AutoCAD R2.05")
)
((= dwgver "AC1015")
(setq acadv "AutoCAD 2000")
)
((= dwgver "AC1016")
(setq acadv "AutoCAD 2000i")
)
((= dwgver "AC1017")
(setq acadv "AutoCAD 2002")
)
((= dwgver "AC1018")
(setq acadv "AutoCAD 2004")
)
((= dwgver "AC1019")
(setq acadv "AutoCAD 2005")
)
((= dwgver "AC1020")
(setq acadv "AutoCAD 2006")
)
;;;; ((= dwgver "AC1022") ;;For future use the 2008 ad 2009 version info is in here, but commented out
;;;; (setq acadv "AutoCAD 2008")
;;;; )
;;;; ((= dwgver "AC1023")
;;;; (setq acadv "AutoCAD 2009")
;;;; )
) ;;End of condition
;; (setq DwgName (strcat (vla-get-path(vla-get-activedocument(vlax-get-acad-object))) "\\" (vla-get-name(vla-get-activedocument(vlax-get-acad-object)))))
;; (vl-cmdf "vbastmt" (strcat "acadapplication.documents.open\"" DwgName,"\"TRUE"))
(setq dclid (load_dialog "warnr14.dcl")) ;;Loading the DCL file
(new_dialog "warnr14" dclid)
(defun edit_action1 (val)
(setq NT val)
) ;;End of defun
(setq width (dimx_tile mykey)) ;;Get the width of the slide
(setq height (dimy_tile mykey)) ;;Get the height of the slide
(start_image mykey) ;;Start the slide definition
(fill_image 0 0 width height -15) ;;Wipe out the background
(slide_image 0 0 width height myslidename) ;;Put the slide in the image area
(end_image) ;;Finish the slide definition
(action_tile "accept" "(unload_dialog)") ;;Closes dialog and leaves dwg open if Open button from DCL is clicked
(action_tile "readonly" "(setq DwgName (strcat (vla-get-path(vla-get-activedocument(vlax-get-acad-object))) \"/\" (vla-get-name(vla-get-activedocument(vlax-get-acad-object)))))
(done_dialog 1)")
(action_tile "cancel" "(done_dialog)") ;;Closes dialog and dwg if Cancel button from DCL is clicked
;;(vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) dwgfile :VLAX-TRUE))))
(set_tile "mytile" (strcat "YOU JUST OPENED AN " acadv " DWG IN 2007.")) ;;Creates tile to be used on DCL that shows version variable info
(setq ans(start_dialog))
(unload_dialog dclid)
(if (= ans 1)
(vl-cmdf "vbastmt" (strcat "acadapplication.documents.open\"" DwgName"\",TRUE"))
(progn
(done_dialog)
(command "_.close" "Y")
))
;; (start_dialog) ;;Starts dialog box
;; (done_dialog) ;;Finishes dialog box
;; (command "_.close") ;;Closes dwg
;; (command "y") ;;Answers yes to do you really want to close this file question
;; (unload_dialog dclid) ;;Unloads dialog box
;;;;
;;;;End of the AutoLISP routine
;;;;
Here's my modified DCL for the read only button:
Code:
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// This program is designed to be used with the acaddoc.lsp file.
// They are to be stored locally on the users' machine under the product's support file area.
// I.E.: C:Program Files_Autodesk Building Systems 2007_Support
// This program uses the slide image "WarnImage.sld" that is stored here: F:HBEDT2K7_Setup
// It was created to pop-up a warning when a dwg of a lower version is opened in a 2007 product.
// The user will get a choice to cancel out of the open, or go ahead with the open.
// Currently this pop-up will appear if the file is opened full out or read-only.
// It will not affect any dwgs that are already open in that session of Acad (ADT or ABS).
// Please do not use-alter-modify this file without contacting Abbie Meador first.
// Created by Abbie Meador.
// Last modified on 09-26-08 by Abbie Meador.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
warnr14 : dialog {label = "WARNING!!! WARNING!!!"; //Controls the text on the pop-up's title
: image { //This creates a stripe or bar of color along the top
key = "im"; //Creating a variable called "im" for this stripe
height = 1.0; //Setting height of stripe to 1
width = 1.0; //Setting width of stripe to 1
color = 1; //Setting color of stripe to 1 = Red
} //Ends stripe "im" creation
:row{ //Creates a row
: image { //Adds in the image from the LSP for the Slide
key = "sld"; //Calls the slide image
height = 0; //Sets the height of the image
width = 15; //Sets the width of the image
color = -15; //Sets the color to the background color -15 = grey
is_enabled = false;
is_tab_stop = false;
} //Ends row for image slide
: paragraph { //Begins a paragraph of text
: text { key = "mytile"; } //Calls the tile created in the LSP to print out in a text line
: text_part {
label = "Verify this file is Read-only before clicking 'Open' (Check the header).";
}
: text_part {
label = "If you ignore this warning and end up saving this as a 2007 dwg,";
}
: text_part {
label = "YOU WILL REPAIR THIS FILE ON YOUR OWN TIME!!";
}
} //End paragraph of text
} //End of row
: image { //This creates a stripe or bar of color underneath the paragraph text
key = "im2"; //Creating a variable called "im2" for this stripe
height = 1.0; //Setting height of stripe to 1
width = 1.0; //Setting width of stripe to 1
color = 1; //Setting color of stripe to 1 = Red
} //Ends stripe "im2" creation
: row { //Begins row for buttons
: button { //Begins first button creation
label = "CANCEL"; //Labels first button cancel
key = "cancel"; //Attaches a call of cancel to the button
mnemonic = "C"; //Sets up a keyboard shortcut for the button
alignment = centered; //Alignment of the button
width = 0.5; //Sets width of button
height = 3; //Sets height of button
is_default = true; //Sets the default selection to this button...If user hits enter this button will be selected
} //Ends first button
: button { //Begins second button creation
fixed_width = true; //Sets a fixed width of button
fixed_height = true; //Sets a fixed height of button
label = "Read-Only"; //Labels second button open
key = "readonly"; //Attaches a call of readonly to the button
mnemonic = "R"; //Sets up a keyboard shortcut for the button
} //Ends second button
: button { //Begins third button creation
fixed_width = true; //Sets a fixed width of button
fixed_height = true; //Sets a fixed height of button
label = "Open"; //Labels third button open
key = "accept"; //Attaches a call of accept to the button
mnemonic = "O"; //Sets up a keyboard shortcut for the button
} //Ends third button
} //Ends row
} //Ends program