Hallo,
Mijn programma is bijna klaar maar ik zit nog met een klein probleem.
Ik heb een DCL bestand waar ik waardes in kan vullen.
Als ik echter in geen enkel vak iets nieuws invul maar de ingestelde "value" accepteer en meteen op <OK> druk dan geeft hij in het LSP bestand een foutmelding en wordt er niets getekend.
Als ik alle waardes in het DCL bestand wel "opnieuw"invul dan werkt het wel.
Wat doe ik verkeerd ?
Alvast bedankt.
Adri
DCL bestand :
BOX2 : dialog {
label="LAMELLENROOSTERS";
: text {label="Invoer roostergegevens"; }
: spacer {height=1;}
: edit_box {label="Roosterlengte "; key="9lengte";edit_width=10;value="1000";}
: edit_box {label="Roosterbreedte "; key="9breedte";edit_width=10;value="1000";}
: edit_box {label="Dragerhoogte "; key="9draaghoog";edit_width=10;value="30";}
: edit_box {label="Dragerdikte "; key="9draagdik";edit_width=10;value="2";}
: edit_box {label="Vullerhoogte "; key="9vulhoog";edit_width=10;value="40";}
: edit_box {label="Vullerdikte "; key="9vuldik";edit_width=10;value="2";}
: edit_box {label="Randhoogte "; key="9randhoog";edit_width=10;value="30";}
: edit_box {label="Randdikte "; key="9randdik";edit_width=10;value="5";}
: edit_box {label="Maaswijdte 1 "; key="9maas1";edit_width=10;value="66.66";}
: edit_box {label="Maaswijdte 2 "; key="9maas2";edit_width=10;value="33.33";}
: edit_box {label="Hoek lamellen "; key="9hoek";edit_width=10;value="45";}
ok_cancel;
}
LSP bestand :
(defun lamel (/)
;-----------------------------------------------------------------------------
; automatisch tekenen van rooster met zijaanzicht van lamellen
; auteur : A. Bongers 09-10-2009
;-----------------------------------------------------------------------------
(command "layer" "s" "werk" "")
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setq nummer (load_dialog "c:/rooster/lsp/lamel.dcl")) (new_dialog "BOX2" nummer)
;-----------------------------------------------------------------------------
; omzetten STRING waardes naar getallen
;-----------------------------------------------------------------------------
(action_tile "9lengte" "(setq 99lengte (atof $value))")
(action_tile "9breedte" "(setq 99breedte (atof $value))")
(action_tile "9draaghoog" "(setq 99draaghoog (atof $value))")
(action_tile "9draagdik" "(setq 99draagdik (atof $value))")
(action_tile "9vulhoog" "(setq 99vulhoog (atof $value))")
(action_tile "9vuldik" "(setq 99vuldik (atof $value))")
(action_tile "9randhoog" "(setq 99randhoog (atof $value))")
(action_tile "9randdik" "(setq 99randdik (atof $value))")
(action_tile "9maas1" "(setq 99maas1 (atof $value))")
(action_tile "9maas2" "(setq 99maas2 (atof $value))")
(action_tile "9hoek" "(setq 99hoek (atof $value))")
(start_dialog)
(unload_dialog nummer)
(setq 99plaats (getpoint "Plaatsingspunt linksboven : "))
;-----------------------------------------------------------------------------
; roosteromranding
;-----------------------------------------------------------------------------
(setq 99punt2 (list (+ (car 99plaats) 99breedte) (cadr 99plaats) (caddr 99plaats)))
(setq 99punt3 (list (car 99punt2) (- (cadr 99plaats) 99lengte) (caddr 99plaats)))
(setq 99punt4 (list (car 99plaats) (cadr 99punt3) (caddr 99plaats)))
(command "pline" 99plaats 99punt2 99punt3 99punt4 "close")
;-----------------------------------------------------------------------------
; randdikte roosteromranding
;-----------------------------------------------------------------------------
(setq 99punt5 (list (+ (car 99plaats) 99randdik) (-(cadr 99plaats) 99randdik) (caddr 99plaats)))
(setq 99punt6 (list (- (+ (car 99plaats) 99breedte) 99randdik) (cadr 99punt5) (caddr 99plaats)))
(setq 99punt7 (list (car 99punt6) (+ (- (cadr 99plaats) 99lengte) 99randdik) (caddr 99plaats)))
(setq 99punt8 (list (car 99punt5) (cadr 99punt7) (caddr 99plaats)))
(command "pline" 99punt5 99punt6 99punt7 99punt8 "close")
(setvar "osmode" oldosmode)
)
Je kunt twee dingen doen:
1. Voordat je de waardes met action_tile uitleest, lees je de reeds ingevulde waardes uit:
(setq
99lengte (atof (get_tile "9lengte"))
99breedte (atof (get_tile "9breedte"))
...
)
(action_tile "9lengte" "(setq 99lengte (atof $value))")
(action_tile "9breedte" "(setq 99breedte (atof $value))")
...
2. Een nettere oplossing is om aan de OK-knop een action te koppelen:
BOX2 : dialog {
label="LAMELLENROOSTERS";
: text {label="Invoer roostergegevens"; }
: spacer {height=1;}
: edit_box {label="Roosterlengte "; key="9lengte";edit_width=10;value="1000";}
: edit_box {label="Roosterbreedte "; key="9breedte";edit_width=10;value="1000";}
: edit_box {label="Dragerhoogte "; key="9draaghoog";edit_width=10;value="30";}
: edit_box {label="Dragerdikte "; key="9draagdik";edit_width=10;value="2";}
: edit_box {label="Vullerhoogte "; key="9vulhoog";edit_width=10;value="40";}
: edit_box {label="Vullerdikte "; key="9vuldik";edit_width=10;value="2";}
: edit_box {label="Randhoogte "; key="9randhoog";edit_width=10;value="30";}
: edit_box {label="Randdikte "; key="9randdik";edit_width=10;value="5";}
: edit_box {label="Maaswijdte 1 "; key="9maas1";edit_width=10;value="66.66";}
: edit_box {label="Maaswijdte 2 "; key="9maas2";edit_width=10;value="33.33";}
: edit_box {label="Hoek lamellen "; key="9hoek";edit_width=10;value="45";}
: row {
: spacer { width = 1; }
: button { // defines the OK button
label = "OK";
is_default = true;
key = "accept";
width = 8;
fixed_width = true;
}
: button { // defines the Cancel button
label = "Cancel";
is_cancel = true;
key = "cancel";
width = 8;
fixed_width = true;
}
: spacer { width = 1;}
}
}
(action_tile
"accept"
"
(setq
99lengte (get_tile \"9lengte\")
99breedte (get_tile \"9breedte\")
...
)
(done_dialog)
"
)
Let hierbij op het gebruik van: \
Nog een kleine tip:
plaats dit:
(setvar "osmode" 0)
na dit:
(setq 99plaats (getpoint "Plaatsingspunt linksboven : "))
dan kan de gebruiker nog wel gewoon "snappen".
Werkt perfect (1e oplossing)
Bedankt.
Adri