|
简介:因学习这个东西浪费了几个小时,特此写出来给大家看看,多多指正。
在窗体中添加图形和图片,用于示意、logo等,如Paddesigner的views,在form中新建一个图形或图片可以概括为四个步骤
1.首先在form中定义一块区域,用于放置图像与图形。
关于尺寸没有严格要求,只要你比例得当就好。如你想画一个3X4的图形框,那么可以就定义图框的长宽为(axlGRPDrwmapWindow handle 3 4),那么其他的图形属性都要比例一致。为了更精细的图形比例,可以定义成(axlGRPDrwMapWindow handle 3000 4000);那么线宽要可能要达到50或100了,把握比例就好。通常为达到效果可以现在绘图软件中绘制好,然后标注,确定比例尺寸。
2.调用axlGRPDrwInit函数,这个函数的参数是form、field、callback。
这个函数是调用图形包的函数,通过它可以让图形包显示在form中,callback就是图形包。
3.用提供的函数绘制图形函数。
第二条讲的callback就是调用图形的函数包,这个包包含图形属性和路径等。
4.用于更新图形。
update,为了实时控制,可能需要更新,如果是静态logo的话一般就不用了。
注意:不要图形不要超出边界
主要结构:
图形的form结构:
A. 图片form的结构
FIELD bitmap
THUMBNAIL ;图形块的格式类型,位图不能大于256色
OPTIONS stretch ;用于图片尺寸自适应调整,默认以图片中心调整
FLOC 5 17
FSIZE 29 5 ;块的尺寸
ENDFIELD
B. 图片包的结构
图片包与图形包都是一个函数,图形源点都是左上。
defun( bitmap_callback (handle) ;handle是axlGRPDrwInit函数值的句柄,即通过handle就可以为axlGRPDrwInit函数值添加属性
axlGRPDrwMapWindow( handle 232 60);为Form的块映射一个图形区域,好比有outline了也要有routekeepin。
putprop( handle "unfilled" 'fill) ;为将要绘制的矩形框添加一些属性,具体参照allegroskill;
putprop( handle "black" 'color) ;在16.3版本中有color、fill、width、text_align、text_bkmode、infos;
putprop( handle 2 'width) ;这个属性也可表达为handle->width = 2,同样是添加属性。
axlGRPDrwRectangle( handle '(1 1) '(249 54));绘制一个矩形框,参数是句柄,矩形的左上与右下
axlGRPDrwBitmap( handle "D:/skill/test.bmp");加载一张图片,这个图片可以是绝对路径,也可以是相对路径。
);defun bitmap_callback
C. 图形包的结构(同上)
defun( graphic_callback (handle)
(axlGRPDrwMapWindow handle 1200 1800);为Form的块映射一个图形区域,
putprop( handle "unfilled" 'fill) ;填充
putprop( handle "red" 'color) ;红色
putprop( handle 3 'width) ;3个单位的线宽
axlGRPDrwRectangle( handle '(1 1) '(1200 1800));尺寸
);defun graphic_callback
D. 调用图形包与图片包
bitmap_handle = axlGRPDrwInit(form "bitmap" 'bitmap_callback);调用图片包
此函数参数为:form、块、图片包函数(无参数)
graphic_handle = axlGRPDrwInit(form "graphic" 'graphic_handle);调用图形包
此函数参数为:form、块、图形包函数(无参数)
就是调用2和3的函数,handle 的属性间接的添加到bitmap_handle的属性中:
bitmap_handle->?
=》(color fill width transparent left infos)
函数:
axlGRPDrwBitmap(handle_bmp path_bmp)
载入位图函数,参数为:图形句柄,位图有效路径,可以是相对或绝对路径。位图必须是256色或以下。
axlGRPDrwCircle(handle_ origin R);圆
axlGRPDrwRectangle( handle '(1 1) '(1200 1800));矩形
axlGRPDrwLine( handle (list '(500 500) '(750 750)));线
axlGRPDrwLine( handle (list '(100 1500) '(150 1600) '(200 1400)));多边形
axlGRPDrwText( handle '(300 100) "Left text");字符
axlGRPDrwInit(r_form t_field t_func);图形包调用函数,
其用处是不仅可以调用图形包,也可以通过它去对图形包进行操作,如显示、更新、动态等。
axlGRPDrwMapWindow(r_graphics x_hgt x_width);为Field映射一个绘图区域
如同逻辑管脚与物理管脚映射一样,hight与width只是一个相对的值,主要是保持比例
axlGRPDrwUpdate(r_graphics);对图形进行更新,对于动态图形来说是一个重要的函数。
allegro 代码示例- defun( IFormTest ()
- defvar(FFORM ,
- "
- \n FILE_TYPE=FORM_DEFN VERSION=2 \n
- \n FORM AUTOGREYTEXT \n
- \n FIXED\n
- \n PORT 44 14\n
- \n HEADER "Form"\n
- \n TILE\n
- \n
- \n FIELD redraw\n
- \n FLOC 21 8\n
- \n MENUBUTTON "Draw" 14 4\n
- \n ENDFIELD\n
- \n FIELD bitmap\n
- \n THUMBNAIL\n
- \n OPTIONS stretch\n
- \n FLOC 5 17\n
- \n FSIZE 29 5\n
- \n ENDFIELD\n
- \n FIELD graphic\n
- \n THUMBNAIL\n
- \n FLOC 3 1\n
- \n FSIZE 15 15\n
- \n ENDFIELD\n
- \n ENDTILE\n
- \n ENDFORM\n
- "
- );defvar
- fw = axlFormCreate((gensym) list("logoshow" FFORM) '("NE" "msglines" 1) '_afCallback t nil )
- bitmap_handle = axlGRPDrwInit(fw "bitmap" 'FlipIt) ;'FlipIt是callback函数,可以直接是'bitmap_callback
- bitmap_handle->Flip = 0 ;图形区域显示控制变量
- graphic_handle = axlGRPDrwInit(fw "graphic" 'FlipIt);'FlipIt是callback函数,可以直接是'graphic_callback
- graphic_handle->Flip = 1 ;图形区域显示控制变量
- fw->Bitmap_handle = bitmap_handle ;此式不是必须
- fw->Graphic_handle = graphic_handle ;此式不是必须
- axlFormDisplay(fw)
- );defun IFormTest()
- /* ***********************callback************************* */
- defun(_afCallback (fw)
- case(fw->curField
- ("redraw"
- axlGRPDrwUpdate(fw->Bitmap_handle)
- axlGRPDrwUpdate(fw->Graphic_handle)
- );#"redraw"
- );case
- );defun callback
- ;其实如下的flip不是一个特定属性,只是将两个THUMBNAIL做交换而已,1与0也只是一个返回值。
- defun( FlipIt (handle)
- if(handle->Flip == 0
- then
- bitmap_callback(handle)
- handle->Flip = 1
- else
- graphic_callback(handle)
- handle->Flip = 0
- )
- );defun flip
- /* ***********************.bmp************************* */
- defun( bitmap_callback (handle)
- ; Must map the window
- (axlGRPDrwMapWindow handle 232 60)
- ; Properties for outline rectangle
- putprop( handle "unfilled" 'fill)
- putprop( handle "black" 'color)
- putprop( handle 2 'width)
- axlGRPDrwRectangle( handle '(1 1) '(249 54))
- ; Example of using a bitmap
- (axlGRPDrwBitmap handle "D:/skill/test.bmp")
- )
- /* ***********************graphic************************* */
- defun( graphic_callback (handle)
- ; Must map the window
- (axlGRPDrwMapWindow handle 1200 1800)
- ; Example of setting option properties for fill, color and width
- putprop( handle "unfilled" 'fill)
- putprop( handle "red" 'color)
- putprop( handle 3 'width)
- ; Example of an unfilled, red, rectangle
- axlGRPDrwRectangle( handle '(1 1) '(1200 1800))
- ; Example of a filled black rectangle
- putprop( handle "black" 'color)
- putprop( handle "filled" 'fill)
- axlGRPDrwRectangle( handle '(50 50) '(200 200))
- ; Example of an unfilled yellow rectangle with a really thick line
- putprop( handle "unfilled" 'fill)
- putprop( handle "yellow" 'color)
- putprop( handle 50 'width)
- axlGRPDrwRectangle( handle '(950 50) '(1100 500))
- putprop( handle 3 'width)
- ; Example of a blue, unfilled circle
- putprop( handle "blue" 'color)
- axlGRPDrwCircle( handle '(600 900) 300)
- ; Example of a filled, green circle
- putprop( handle "green" 'color)
- putprop( handle "filled" 'fill)
- axlGRPDrwCircle( handle '(600 900) 50)
- ; Example of a solid filled, green circle
- putprop( handle "blue" 'color)
- putprop( handle "filled_solid" 'fill)
- axlGRPDrwCircle( handle '(200 1300) 90)
- ; Example of a red, simple line
- putprop( handle "red" 'color)
- ;handle->color = "green"
- putprop( handle 50 'width)
- axlGRPDrwLine( handle (list '(500 500) '(750 750)))
- ; Example of a red, poly line
- putprop( handle "red" 'color)
- putprop( handle 50 'width)
- axlGRPDrwLine( handle (list '(100 1500) '(150 1600) '(200 1400)))
- ; Example of a white, filled, polygon
- putprop( handle "white" 'color)
- axlGRPDrwPoly( handle (list '(500 1500) '(650 1600) '(700 1400)))
- ; Example of a black, text, opaque background, left justified
- putprop( handle "black" 'color)
- putprop( handle "opaque" 'text_bkmode)
- axlGRPDrwText( handle '(300 100) "Left text")
- ; Example of a red, text, transparent background. center justified
- putprop( handle "red" 'color)
- putprop( handle "transparent" 'text_bkmode)
- putprop( handle "center" 'text_align)
- axlGRPDrwText( handle '(300 200) "center text")
- );defun graphic_callback
复制代码 图片案例在附件,将其放在某一路径下,并在(axlGRPDrwBitmap handle "D:/skill/test.bmp");设置自己的路径即可使用。
|
-
-
test.rar
659 Bytes, 下载次数: 111, 下载积分: 贡献 1
案例
评分
-
查看全部评分
|