2012-11-27 17:22 UTC
Hi
I'm having trouble with a little application i wrote.
It's a small dialog, that lets you browse by images a return a value to lisp associated with that image.
After a few calls to the dialog and each time paging through the images the dialog stops showing the images.
However the browsing itself still works (Return-Value and Tooltip are shown)
Does anybody have an idea to solve this issue?
Edit 1:
ODCL-Runtime in use is 7.0.0.9 an AutoCAD 2012 Architecture (D A CH)
Other CAD-Systems will be tested tomorrow, but testing an older runtime is not possible/desired since the application has to run on AutoCAD 2013 and BricsCAD V13.
Paging-function:
(defun p:BitmapAuswahl_BitmapBrowser_update (/ p-3 p-2 p-1 p0 p+1 p+2 p+3 s-3 s-2 s-1 s0 s+1 s+2 s+3 )
(dcl_Control_SetValue BitmapAuswahl_BitmapBrowser_sliderBitmapBrowse x:bitmapwahl_selected)
(setq p-3 (car (nth (p:rem+ (- x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p-2 (car (nth (p:rem+ (- x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p-1 (car (nth (p:rem+ (- x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p0 (car (nth (p:rem+ (+ x:bitmapwahl_selected 0) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+1 (car (nth (p:rem+ (+ x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+2 (car (nth (p:rem+ (+ x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+3 (car (nth (p:rem+ (+ x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs)))
(setq s-3 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s-2 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s-1 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s0 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 0) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+1 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+2 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+3 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs)))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_imgMainImage p0 'T)
(cond (s0
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgMainImage (car s0))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgMainImage (cadr s0)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgMainImage "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgMainImage "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img-2 p-2 'T)
(cond (s-2
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-2 (car s-2))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-2 (cadr s-2)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-2 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-2 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img-1 p-1 'T)
(cond (s-1
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-1 (car s-1))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-1 (cadr s-1)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-1 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-1 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_imgSelected p0 'T)
(cond (s0
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgSelected (car s0))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgSelected (cadr s0)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgSelected "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgSelected "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img+1 p+1 'T)
(cond (s+1
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+1 (car s+1))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+1 (cadr s+1)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+1 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+1 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img+2 p+2 'T)
(cond (s+2
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+2 (car s+2))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+2 (cadr s+2)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+2 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+2 "")
))
)
x:bitmapwahl_selected is a list of lists containig the image file name, return value, help string (for use in help calls) and a list of strings containig the tooltip headline and text
(list
(list "01.png" "01" "hlp_01" (list "Typ 1" ""))
(list "02.png" "02" "hlp_02" (list "Typ 2" ""))
(list "03.png" "03" "hlp_03" (list "Typ 3" ""))
(list "04.png" "04" "hlp_04" (list "Typ 4" ""))
(list "05.png" "05" "hlp_05" (list "Typ 5" ""))
)
Functions not included in source
(defun p:dcl_Project_Load (pname / s)
(if (setq s (findfile (strcat pname ".odcl")))
(dcl_Project_Load s); 'T)
'nil)
)
(defun p:zei (s / ) (princ)) ; opens application help file on selected topic
(DEFUN p:GET-ACAD-WINDOW (Pos / app w h x y) ; Based on http://www.opendcl.com/forum/index.php?topic=952.msg4779#msg4779
(COND ((MEMBER Pos '(0 1 2 3 4 5 6 7 8 9)) ; achk
(SETQ app (VLAX-GET-ACAD-OBJECT)
w (VLA-GET-WIDTH app)
h (VLA-GET-HEIGHT app)
x (VLA-GET-WINDOWLEFT app)
y (VLA-GET-WINDOWTOP app)
)
(COND ((= Pos 0) (LIST w h))
((= Pos 1) (LIST x y))
((= Pos 2) (LIST x (+ y (/ h 2))))
((= Pos 3) (LIST x (+ y h)))
((= Pos 4) (LIST (+ x (/ w 2)) y))
((= Pos 5) (LIST (+ x (/ w 2)) (+ y (/ h 2))))
((= Pos 6) (LIST (+ x (/ w 2)) (+ y h)))
((= Pos 7) (LIST (+ x w) y))
((= Pos 8) (LIST (+ x w) (+ y (/ h 2))))
((= Pos 9) (LIST (+ x w) (+ y h)))
('T 'NIL)
)
)
)
)
;**********************************************************
(defun p:dcl_Form_Center (form / p x y)
(cond (form
(setq x (dcl_control_getwidth form)
y (dcl_control_getheight form)
p (p:GET-ACAD-WINDOW 5)
x (- (car p) (* 0.5 x))
y (- (cadr p) (* 0.5 y)))
(dcl_Control_SetPos form x y)
))
)
Attached:
Dialog working
Dialog broken
Full code (missing functions should all be in code above)
odcl-file
I'm having trouble with a little application i wrote.
It's a small dialog, that lets you browse by images a return a value to lisp associated with that image.
After a few calls to the dialog and each time paging through the images the dialog stops showing the images.
However the browsing itself still works (Return-Value and Tooltip are shown)
Does anybody have an idea to solve this issue?
Edit 1:
ODCL-Runtime in use is 7.0.0.9 an AutoCAD 2012 Architecture (D A CH)
Other CAD-Systems will be tested tomorrow, but testing an older runtime is not possible/desired since the application has to run on AutoCAD 2013 and BricsCAD V13.
Paging-function:
(defun p:BitmapAuswahl_BitmapBrowser_update (/ p-3 p-2 p-1 p0 p+1 p+2 p+3 s-3 s-2 s-1 s0 s+1 s+2 s+3 )
(dcl_Control_SetValue BitmapAuswahl_BitmapBrowser_sliderBitmapBrowse x:bitmapwahl_selected)
(setq p-3 (car (nth (p:rem+ (- x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p-2 (car (nth (p:rem+ (- x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p-1 (car (nth (p:rem+ (- x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p0 (car (nth (p:rem+ (+ x:bitmapwahl_selected 0) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+1 (car (nth (p:rem+ (+ x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+2 (car (nth (p:rem+ (+ x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
p+3 (car (nth (p:rem+ (+ x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs)))
(setq s-3 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s-2 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s-1 (cadddr (nth (p:rem+ (- x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s0 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 0) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+1 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 1) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+2 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 2) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs))
s+3 (cadddr (nth (p:rem+ (+ x:bitmapwahl_selected 3) (length x:bitmapwahl_kv_pairs)) x:bitmapwahl_kv_pairs)))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_imgMainImage p0 'T)
(cond (s0
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgMainImage (car s0))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgMainImage (cadr s0)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgMainImage "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgMainImage "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img-2 p-2 'T)
(cond (s-2
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-2 (car s-2))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-2 (cadr s-2)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-2 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-2 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img-1 p-1 'T)
(cond (s-1
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-1 (car s-1))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-1 (cadr s-1)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img-1 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img-1 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_imgSelected p0 'T)
(cond (s0
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgSelected (car s0))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgSelected (cadr s0)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_imgSelected "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_imgSelected "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img+1 p+1 'T)
(cond (s+1
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+1 (car s+1))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+1 (cadr s+1)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+1 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+1 "")
))
(dcl_PictureBox_LoadPictureFile BitmapAuswahl_BitmapBrowser_img+2 p+2 'T)
(cond (s+2
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+2 (car s+2))
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+2 (cadr s+2)))
('T
(dcl_Control_SetToolTipTitle BitmapAuswahl_BitmapBrowser_img+2 "")
(dcl_Control_SetToolTipMainText BitmapAuswahl_BitmapBrowser_img+2 "")
))
)
x:bitmapwahl_selected is a list of lists containig the image file name, return value, help string (for use in help calls) and a list of strings containig the tooltip headline and text
(list
(list "01.png" "01" "hlp_01" (list "Typ 1" ""))
(list "02.png" "02" "hlp_02" (list "Typ 2" ""))
(list "03.png" "03" "hlp_03" (list "Typ 3" ""))
(list "04.png" "04" "hlp_04" (list "Typ 4" ""))
(list "05.png" "05" "hlp_05" (list "Typ 5" ""))
)
Functions not included in source
(defun p:dcl_Project_Load (pname / s)
(if (setq s (findfile (strcat pname ".odcl")))
(dcl_Project_Load s); 'T)
'nil)
)
(defun p:zei (s / ) (princ)) ; opens application help file on selected topic
(DEFUN p:GET-ACAD-WINDOW (Pos / app w h x y) ; Based on http://www.opendcl.com/forum/index.php?topic=952.msg4779#msg4779
(COND ((MEMBER Pos '(0 1 2 3 4 5 6 7 8 9)) ; achk
(SETQ app (VLAX-GET-ACAD-OBJECT)
w (VLA-GET-WIDTH app)
h (VLA-GET-HEIGHT app)
x (VLA-GET-WINDOWLEFT app)
y (VLA-GET-WINDOWTOP app)
)
(COND ((= Pos 0) (LIST w h))
((= Pos 1) (LIST x y))
((= Pos 2) (LIST x (+ y (/ h 2))))
((= Pos 3) (LIST x (+ y h)))
((= Pos 4) (LIST (+ x (/ w 2)) y))
((= Pos 5) (LIST (+ x (/ w 2)) (+ y (/ h 2))))
((= Pos 6) (LIST (+ x (/ w 2)) (+ y h)))
((= Pos 7) (LIST (+ x w) y))
((= Pos 8) (LIST (+ x w) (+ y (/ h 2))))
((= Pos 9) (LIST (+ x w) (+ y h)))
('T 'NIL)
)
)
)
)
;**********************************************************
(defun p:dcl_Form_Center (form / p x y)
(cond (form
(setq x (dcl_control_getwidth form)
y (dcl_control_getheight form)
p (p:GET-ACAD-WINDOW 5)
x (- (car p) (* 0.5 x))
y (- (cadr p) (* 0.5 y)))
(dcl_Control_SetPos form x y)
))
)
Attached:
Dialog working
Dialog broken
Full code (missing functions should all be in code above)
odcl-file

