图形编程教程
❶ 图形化编程主要学什么
图形化编程就是编写有界面的程序,编程语言是一种被标准化的交流技巧,用来向计算机发出指令,定义计算机程序。
一、图形化编程
1、使用图形化编程可以进行良好的页面布局,在现有的很多Web应用中,其应用程序的页面布局经常需要使用图像,这样能够让页面整体效果更加友好帆培。用户会对界面友好的应用程序印象深刻从而会进行回访。
2、在页面布局中,很多设计人员喜欢使用CSS设计,这样能够简化页面代码,将页面布局代码和页面代码相分离,从而提高了维护性。
二、编程语言
1、允许程序员准确地定义计算机需要使用的数据以及在不同情况下要采取的行动。在不断的发展和变化过程中,从最初的机器语言到2500多种高级语言,每种语言都有其特定的目的和不同的发展道路。
2、昌敬编程语言不像人类自然语言的发态迅唯展和变化那样缓慢和持久,它的发展是相当迅速的。这主要是因为计算机硬件、互联网和IT产业的发展促进了编程语言的发展。
相关信息:
图形编程不仅仅是一项技术,更是一门艺术。图形编程的概念很广,有UI编程,还有游戏编程,游戏编程又分为2D游戏、3D游戏等。
有人觉得游戏不是一门艺术,因为受众也是参与者;有人觉得游戏是一门艺术,尤其是一门交互艺术。使用图形化编程可以进行良好的页面布局,在现有的很多Web应用中,其应用程序的页面布局经常需要使用图像,这样能够让页面整体效果更加友好。
❷ 图形学编程
在三维绘图蓬勃发展的过程中,计算机公司推出了大量的三维绘图软件包。其中SGI公司推出的OpenGL,作为一个性能优越的图形应用程序设计界面(API)异军突起,取得了很大的成就。它以高性能的交互式三维图形建模能力和易于编程开发,得到了Microsoft、IBM、DEC、Sun、HP等大公司的认同。因此,OpenGL已经成为一种三维图形开发标准,是从事三维图形开发工作的必要工具。
1、初始化OpenGL绘图环境
1.1 定义颜色格式和缓冲模式
OpenGL提供两种颜色模式:RGB(RGBA)模式和颜色索引模式(调色板)。在RGBA模式下所有颜色的定义用RGB三个值来表示,有时也加上Alpha值(表示透明度)。RGB三个分量值的范围都在0和1之间,它们在最终颜色中所占的比例与它们的值成正比。如:(1、1、0)表示黄色,(0、0、1)表示蓝色。颜色索引模式下每个象素的颜色是用颜色索引表中的某个颜色索引值表示(类似于从调色板中选取颜色)。由于三维图形处理中要求颜色灵活,而且在阴影,光照,雾化,融合等效果处理中RGBA的效果要比颜色索引模式好,所以,在编程时大多采用RGBA模式。
OpenGL提供了双缓存来绘制图像。即在显示前台缓存中的图像同时,后台缓存绘制第二幅图像。当后台绘制完成后,后台缓存中的图像就显示出来,此时原来的前台缓存开始绘制第三幅图像,如此循环往复,以增加图像的输出速度。
设置窗口显示模式函数:
void auxInitDisplayMode(
AUX_DOUBLE | // 双缓存方式
AUX_RGBA // RGBA颜色模式
);
1.2 设置光源
OpenGL的光源大体分为三种:环境光(Ambient light),即来自于周围环境没有固定方向的光。漫射光(Diffuse light)来自同一个方向,照射到物体表面时在物体的各个方向上均匀发散。镜面光(Specular light)则是来自于同一方向,也沿同一个方向反射。全局环境光是一种特殊的环境光,它不来自特于某种定光源,通常做为场景的自然光源。
指定光源函数:
void glLightfv(
Glenum light, // 光源号
Glenum pname, // 指明光源类型:
// GL_DIFFUSE 光源为漫射光光源
// GL_AMBIENT 光源为环境光光源
// GL_SPECULAR 光源为镜面光光源
const Glfloat* params // 指向颜色向量的指针
);
设置全局环境光函数:
void glLightModelfv(
GL_LIGHT_MODEL_ AMBIENT,
const Glfloat* param // param:指向颜色向量的指针
);
起用光源函数:
void glEnable(GL_LIGHTING);
void glEnable(GL_enum cap); // cap:指明光源号
1.3 设置材质
在OpenGL中,用材料对光的三原色(红绿蓝)的反射率大小来定义材料的颜色。与光源相对应,材料的颜色,也分为环境色,漫反射色和镜面反射色,由此决定该材料对应不同的光呈现出不同的反射率。由于人所看到物体的颜色是光源发出的光经物体反射后进入眼睛的颜色。所以,物体的颜色是光源的环境光,漫反射光和镜面反射光与材料的环境色,漫反射色和镜面反射色的综合。例如:OpenGL的光源色是(LR、LG、LB),材质色为(MR、MG、MB),那么,在忽略其他反射效果的情况下,最终进入眼睛的颜色是(LR*MR、LG*MG、LB*MB)。
材质定义函数:
void glMaterialfv(
GLenum face, // 指明在设置材质的哪个表面的颜色。
// 可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK
GLenum pname, // 与光源的pname参数相似
const float* params // 指向材质的颜色向量
);
1.4 定义投影方式
也即选择观察物体的角度和范围。由于我们是三维绘图,所以采用不同的视点和观察范围,就会产生不同的观察效果。由于计算机只能显示二维图形,所以在表示真实世界中的三维图形时,需将三维视景转换成二维视景。这是产生三维立体效果的关键。OpenGL提供了两种将3D图形转换成2D图形的方式。正投影(Orthographic Projection)和透视投影(Perspective Projection)。其中,正投影指投影后物体的大小与视点的远近无关,通常用于CAD设计;而透视投影则符合人的心理习惯,离视点近的物体大,离视点远的物体小。此外,在OpenGL中还要定义投影范围,只有在该范围中的物体才会被投射到计算机屏幕上,投影范围外的物体将被裁减掉。
定义投影范围(不同的投影方式对应不同函数):
void glOrtho(
GLdouble left, GLdouble right,
// (left,bottom,near)及(right,top,far)分别给出正射投
GLdouble bottom, GLdouble top, // 影投影范围的左下角和右上角的坐标。
GLdouble near,GLdouble far);
2、定义与Windows接口的系统函数
2.1 定义绘图窗口的位置
// (x,y)给出窗口左上角坐标
// width及heigh给出窗口的宽高
void auxInitPosition(GLint x,GLint y,GLsizei width, GLsizei heigh);
2.2 定义绘图窗口的标题
// STR表示窗口标题字串
void auxInitWindow(GLbyte* STR);
2.3 定义绘图窗口改变时的窗口刷新函数
// 当窗口改变形状时调指定的回调函数
// NAME表示回调函数名称
void auxReshapeFunc(NAME);
2.4 定义空闲状态的空闲状态函数以实现动画
// 当系统空闲时调用指定的回调函数
// NAME表示回调函数名称
void auxIdleFunc(NAME);
2.5 定义场景绘制函数(当窗口更新或场景改变时调用)
// 当窗口需要更新或场景变化时调用
// NAME表示回调函数名称
void auxMainLoop(NAME);
在VC编辑器下键入下述代码后,保存为后缀是.cpp的C++文件。开始编译,在“The build command requires an active project workspace”。“Would you like to create a default project workspace”? 的提示后,选择“是(Y)”。进入“Project”菜单,选择“Setting”项,弹出“Project Setting”对话框,选择“Link”项,在“Libaray”栏目中加入OpenGL提供的函数库:“opengl32.lib glu32.lib glaux.lib”。(注意:在执行程序时,Windows的system目录下要包含opengl32.dll及glu32.dll两个动态连接库)。附源程序代码:
#include "windows.h"
#include "gl/gl.h"
#include "gl/glaux.h"
#include "gl/glu.h"
#include "math.h"
void myinit()
{
glClearColor(1,1,0,0);
GLfloat ambient[]={.5,.5,.5,0};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
GLfloat mat_ambient[]={.8,.8,.8,1.0};
GLfloat mat_diffuse[]={.8,.0,.8,1.0};
GLfloat mat_specular[]={1.0,.0,1.0,1.0};
GLfloat mat_shininess[]={50.0};
GLfloat light_diffuse[]={0,0,.5,1};
GLfloat light_position[]={0,0,1.0,0};
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0,GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
}
void CALLBACK display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
auxSolidSphere(1.0); // 绘制半径为1.0的实体球
glFlush(); // 强制输出图像
auxSwapBuffers(); // 交换绘图缓存
_sleep(100);
}
void CALLBACK Idledisplay()
{
// x,y满足x2+y2=0.01。这样可以使物体沿该圆轨迹运动。
static float x=-.1,y=0.0;
static BOOL mark=TRUE;
static float step=.01;
x+=step;
if(x<=.1&&x>=-.1)
{
if(step>0)
y=sqrt(.01-x*x);
else
y=-sqrt(.01-x*x);
glTranslatef(x,y,0);
}
else
{
step=0-step;
}
display();
}
void CALLBACK myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
glOrtho(-3.5,3.5,-3.5*(GLfloat)w/(GLfloat)h, 3.5*(GLfloat)w/(GLfloat)h,-10,10);
else
glOrtho(-3.5*(GLfloat)w/(GLfloat)h,3.5* (GLfloat)w/(GLfloat)h,-3.5,3.5,-10,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
auxInitPosition(0,0,400,400);
auxInitWindow(" circle ");
myinit();
auxReshapeFunc(myReshape);
auxIdleFunc(Idledisplay);
auxMainLoop(display);
}
给你一个关于VC和OPENGL的网站,不错的
http://dev.yesky.com/402/2084902.shtml
❸ 怎么用codeblocks编写c语言的图形程序
在codeblocks中,可以通过集成EGE库,来实现C语言图形程序的编写,具体方式如下:
一、安装:
1、下载ege安装包;
2、将安装包解压;
3、把压缩包里include目录下所有文件,复制到编译器安装目录下的include目录内,例如D:MinGWinclude;
4、把lib目录下对应编译器名目录下的文件,复制到编译器安装目录下的lib目录内,例如D:MinGWlib。
二、建立工程:
只要第1步做好以后,其实已经安装好ege了,剩下的只是配置build option.
点击file-new-projects,选择Console application:
❹ 统赢慢走丝编程教程的步骤是什么
一、前期工作
先在指定界面中任意画一个图形。
然后点击“ 图元更改” 来确认你所画图形的图层。左下条指令中提示“ 请选取图形(+):” ,圈中你所选图形。 被选中图形既变成虚线,按鼠标右击完成选图。
输入“ L” 选中图层 ,然后右击鼠标。 选中你所要确定的图层。
画图前期工作完毕后,按“ 档案” →“ 另存新档”。 然后系统提示输入新档的名称。
二、 后置处理
1.点击“ 线割应用”
在指令条中输入“ S” 按回车。出现切割路径设置。输入引入线长度, 切割方向,路径形态。 设置完毕按确定。指定你要切割的路径和启始点位置,点击鼠标左键。 此时所选图形中便会显示该工件的路径形态( 凹模或凸模 ),引入线长度,切割方向。
2.然后在MID OF 中打入“P”,回车进液友游入P处理。选择S:编程设置。然后具体可以输入你所需要的“过切长度”,“脱离线长度”?等括号内的数据。
3.设置完备后按“空格”键进入“CHARMILLES专用工件设置窗口”
读取你所加工机床的型号。随后根据不同的机床型号,其“图层名称”后所对应的精修次数就会有所变化,确定你所想要的加工次数与实际加工图层相符。选择好*.*TEC文件和工件高度,按确定结束。
4. 空格后,选择好文件的输出路径。按保存。
5.程序便自动进行模拟。如想让其暂停可按“空格”或“鼠标右键”。
6.最后把所保存的文件*.*.ISO同C:/TWINCAD/*.*.CMD文件COPY到机床上并运行*.*.CMD程序便可以。
三、 模式解析
1.部分斜度/斜度加工:
画完图形后,进入后置处理“WTCAM”。在路径设置后进入D:其他细节--T:斜度,输入用户需要的斜度,然后手动选择该斜度图形的边。不同的边斜度选定只要重新在T:斜度 中输入新的斜度既可。
2.加工告配模板:
作完模板图形,进入“WTCAM”,在路径设置后按照你想要的加工顺序依次点中模板上的加工图形。如果你要对次序修改,进入O:秩序,可以分别选择I:依次设定/S:对调顺序/(C:改变顺序 )来调换模板内闹销程序的加工秩序。进入P处理—S:编程设定。在编程设定的其他条件窗口中选择“自动穿丝方式” 。
3.图形路径设置完后,可以对上下异形的拐角部分进行强制对接。在3D:上下异形—J:指定对接 开面加工。
4. 作一不封闭的图形(开面图形),注意:也要对其进行自动串接。在自动选择路径模式下选中被加工图形,在出现的对话框中选“确定”,随后它会提示确定补偿方向。所谓补偿方向就是加工是偏移量的方向,既左偏还是右偏。你点中的那个面既为偏移量移动的方向。
5. 若需对开面加工图形的某一边进行斜度加工。
6备注:
a:WTCAM模板保存路径在 TWINCAD/SUPPORT/*.*.TCAD
b: 若要移动原点坐标,点中“图元移动”或打指令“MOVE”,选好图形。点中设置原点的点,并且移动图形到指定基准点:(0,0)
c: 若要查看某个点的坐标可选择“模具式标注”或打指令:“Odim” 按“空格”。
❺ DELPHI基础教程:Delphi图形图像编程(二)[1]
画直线纳李时 用户只有在松开鼠标才能看见直线 对直线的变化不能进行实时观测 这是因为鼠标移动时程序没有进行某种应 Delphi定义了搭岁OnMouseMove事件来响应鼠标移动 以下代码可使用户随时观测直线的变化
procere TForm FormMouseMove(Sender:Tobject)
begin
Drowto(X Y)
Moveto(origin)
end
origin是起始点
绘图功能的实现
绘图软件常根据用户的要求改变绘图工具 Graphex dpr例程中 当用户按下某个按钮时 可选择绘图工具中的画笔或画刷 在程序类型说明部分定义了五种绘图工具
type
TDrawingTool = (dtLine dtRectangle dtEllips dtRoundRect dtPolygon)
当选中某种按钮 则选中了相应的绘图工具 如
procere TForm LineButtonClick(Sender: TObject)
begin
DrawingTool := dtLine;
end;
procere TForm RectangleButtonClick(Sender: TObject)
begin
DrawingTool := dtRectangle;
end;
procere TForm EllipseButtonClick(Sender: TObject)
begin
DrawingTool := dtEllipse;
end;
洞枝迟procere TForm RoundRectButtonClick(Sender: TObject)
begin
DrawingTool := dtRoundRect;
end;
procere TForm PolygonButtonClick(Sender: TObject)
begin
DrawingTool :=dtPolygon;
end;
DrawShape过程定义了每种绘图工具的动作
procere TForm DrawShape(TopLeft BottomRight: TPoint; AMode: TPenMode)
begin
with Image Canvas do
begin
Pen Mode := AMode;
case DrawingTool of
dtLine: begin
MoveTo(TopLeft X TopLeft Y)
LineTo(BottomRight X BottomRight Y)
end;
dtRectangle: Rectangle(TopLeft X TopLeft Y BottomRight X BottomRight Y)
dtEllipse: Ellipse(TopLeft X TopLeft Y BottomRight X BottomRight Y)
dtRoundRect: RoundRect(TopLeft X TopLeft Y BottomRight X BottomRight Y
(TopLeft X BottomRight X) div (TopLeft Y BottomRight Y) div )
dtPolygon:Polygon([Point( ) TopLeft BottomRight]) end;
end;
end;
程序刚运行时 只有一个工具栏 当用户单击画笔和画刷时 则出现相应的工具栏 其代码如下
procere TForm PenButtonClick(Sender: TObject)
begin
PenBar Visible := PenButton Down;
end;
procere TForm BrushButtonClick(Sender: TObject)
begin
BrushBar Visible := BrushButton Down;
end;
在设计绘图程序时 还要解决一些问题 如为了在鼠标移动时能观测图形的变化 我们定义了OnMouseMove事件 但会出现这样的现象 当鼠标进入绘图区时 用户未按下鼠标键 画布上却出现绘制的图形 这是我们不希望看到的 其原因是没有对鼠标按钮是否按下进行判断 因此在窗体对象中定义了drawing的域 当鼠标按钮按下时 drawing 设置成真值 只有drawing为真 鼠标移动才执行绘图功能 当鼠标键松开时 drawing设置成假 鼠标移动将不执行绘图动作
lishixin/Article/program/Delphi/201311/25246
❻ Error 200:Division by zero
Turbo Pascal图形编程教程
Pascal是一款有很强图形功能的开发工具,它可以编制各种图形窗口,并且听说还支持鼠标.但是时过境迁,
在vb,vc一统天下的今天,关于Pascal图形操作的书已经像古董一样难于寻找了,我现在将Tp 7.0的Help文件
中的一些有关图形操作的过程与函数整理了一下,并自己写了一些例子,加入了一些自己的看法,便得到了这篇
教程.其中如有错误,望各位不吝赐教。阅读之前希望大家做好准备,比如:找一些食品放在跟前,因为你可能
因为钻研一个函数而耗费大量的时间,还有你可能因为初始化无法完成而大动肝火。
第一章 使用Pascal进行图形操作前的准备
在 Turbo Pascal 中有一个 CRT 单元及一个 GRAPH 单元,简单的说 crt 单元是为了实现
字符的显示与处理,另外的那个称为 GRAPH 单元是专门用来处理图形的。我们看到的有关图形的
程序往往都要用到。所以若是要在 Turbo Pascal 中实现图形操作,就必须要调用 CRT 单元及
GRAPH 单元。那么怎么样来调用 CRT 及 GRAPH 单元呢?现在线来介绍一下单元调用语句:USES
USES的语法:
USES 单元表识符,……,单元表识符;
说明:
扩展名为*.TPW是Windows下的单元文件,*.TPU是DOS下的单元文件。
位置:变量说明var之前。
讲到这里,我还是要顺便提一下什么是单元?是这样的:我们在编程序的时候,要用到 procere
或者 function ,中文名称一个是过程另一个是函数。做不同的程序时,往往要用到一些相同的过程
或者相同的函数。如果统统放到程序中,程序会硕大无比,比例与调试与编译,并且在过去
“惜kb如金”的年代里,这样的程序也很浪费。于是,简单的讲,人们把它们做成“包”--我
们称之为单元。一来,免去很多重复的痛苦,大家共享代码也很简单,另外,很多不愿意让别人看
到源程序的人也很乐于如此----这只是我的杜撰。生产 pascal 语言的公司也提供一些做好的
单元,放在安装盘上方便实用。 crt ,graph 即使如此,还有 dos ,system 等等。
第二章 Pascal图形模式的初始化及退出
1.初始化
Pascal的图形操作在使用之前必须先进行初始化。如果说你编写图形程序中出现问题,是有八九十悉桐卡
在这里了。 这也是非常令我头疼的问题。 用过程 initgraph(GraphDriver,GraphMode,PathToDriver)
其中 GraphDriver , GraphMode 为整形变量, PathToDriver为字符串变量, GraphDriver为图形驱动器,
GraphMode为图形模式 , PathToDriver指定的路径名中建筑图形驱动程序(以.BGI为后缀)。initgraph使
用方法见下例:
program t001 (input,output);
uses crt,graph;
var
gd:gm:integer; {定义GraphDriver,GraphMode变量}
begin
gd:=detect;
initgraph(gd,gm,''); {调用initgraph过程,PathToDriver缺省则表示在当前目录中寻找
《-------这个很重要,一般也可以写成 initgraph(gd,gm,'c:\tp\bgi'); 当然
如果你是如此安装的话。}
bar(100,100,200,200); {画一个以(100,100),(200,200)为顶点的矩形,这是一个标准过程,
你在后面还会看到一个名为bar3d的东东,那个是画立体矩形的}
delay(1000); {将此图形保留一秒,10000就是10秒,依此类推}
end.
2.退出
Closegraph过程
功能:退出图形模式.
在图形模式下如果使用 write 等等文本输出可能会出问题---比如无法看到等等。好像还可能引
起显示上的问题,反正养成一个好习惯也没什么不好的。这里有一个技备差巧,当你发现无论如何调整都无
法显示图形时,你可以调用自带的例子,用来测试,看看是否是程序本身的问题。
注意,这里有一个不属于图形的,但是非常容易遇到的问题。前面我们说过,在图形编程使用 graph 单睁滚坦
元的时候,我们也常常会使用crt单元,这就有一个问题:crt 单元在主频高的机器上无法正常运行。会出
现 200 号错误!!!请下载补丁,在我们的网站上就有。还有一种情况,就是出了问题没有提示!表现是
运行程序什么反应也没有。如果你出现这种情况,首先检查程序,如果没有问题,非常有可能使这种情况,
也请下载补丁!据报告奔腾180以上的机器具都不同程度存在这种问题!
第三章 基本几何图形的绘制
画直线:
1.Line过程
描述:procere Line(x1, y1, x2, y2: Integer);两点确定一直线.够简单吧!
2.Lineto过程
描述:procere LineTo(X, Y: Integer);从当前点项目标点(x,y)作直线.
画圆:
1.Circle过程
功能:以(X,Y)为圆心、Radius为半画一圆。
描述:procere Circle(X,Y:Integer;Radius:Word);
示例:Circle(100,100,200) {画一个以(100,100)为圆心,200为半径的圆}
画椭圆:
1. Ellipse过程
功能:画一个以(X,Y)为中心,XRadius和YRadius为半轴,StAngle和EndAngle为始角和终角的椭圆弧。
描述:procere Ellipse(X,Y:Integer;StAngle,EndAngle:Word;XRadius,YRadius:Word);
说明:角度沿逆时针方向,单位是度。0度指向东。
画圆弧:
1.Arc过程
功能: 画一个以(X,Y)为中心,Radius为半径,StAngle和EndAngle为始角和终角 的圆弧。
描述: procere Arc(X,Y : Integer; StAngle,EndAngle,Radius:Word);
说明: 角度沿逆时针方向,单位是度。0度指向东。
示例: Arc(100,100,0,90,50) {画出第一卦限1/4圆,半径50,圆心(100,100)}
画矩形:
1.Bar过程
功能:画一个以(x1,y1),(x2,y2)为两个对角顶点的矩形。
描述:procere Bar(x1,y1,x2,y2:integer);
示例:Bar(100,100,200,200) {画一个以(100,100),(200,200)为对角顶点的矩形}
2.Bar3d过程
功能:画一个长方体.
描述:procere Bar3d(x1,y1,x2,y2:integer,depth:word,top:boolean); {x1,x2,y1,y2同上,为长方体的厚度 ,top为是否画出顶面.}
线形,颜色,及填充设置
线形设置:
1.setlinestyle过程
功能:设置线形,及线宽.
描述:procere SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);
说明:linestyle(线形)一共有三种.代号0,1,2;线形如下图:
Thichness(线宽)有两种.代号1,3.1为普通线.3为宽线.
2.GetLineSettings过程
功能:返回当前设置的线型设置信息.
描述:procere GetLineSettings(var LineInfo: LineSettingsType);{参见LineSettingsType类型}
3.LineSettingsType类型
描述:LineSettingsType = record
LineStyle : Word; {线形}
Pattern : Word; {模式}
Thickness : Word; {线宽}
end;
此类型记录了一种线形的信息.
线形,颜色及线形设置
颜色设置:
在pascal中共有16种颜色可以使用.
1.setcolor过程
描述: procere SetColor(Color: Word);
设置线的颜色.颜色代码如上图.
2.GetColor函数
功能:返回最后一次作图时的颜色值
描述:function GetColor:word
示例:color:=GetColor; {color:word}
3.GetMaxColor函数
功能:返回系统可用的最大颜色数.
描述:num:=GetMaxColor; {将最大颜色数存到num变量中}
填充设置:
1.SetFillStyle过程
功能 设置填充模式和颜色。
描述 procere SetFillStyle(Pattern:Word;Color:Word);
说明 设置用于Bar,Bar3D的填充模式和颜色。可生系列填充模式。缺省模式是实心点,缺省模式
是实心点,缺省颜色是调色板中最大颜色序号值。如果传递给SetFillStyle的输入参数无效,
GraphResult将返回值grError,且当前填充参数不改变。
填充设置如下图:<![endif]>
2.FillSettingsType 类型
描述:FillSettingsType=record
Pattern:word;
Color :word;
end;
此类型记录了一种填充模式的信息.
这些知识都很简单,更多的可以在编辑环境中按下f1观看帮助文档。
更多实例在 www.cpascal.com 的自编程序中
❼ 利用mfc编程来开发图形应用程序的基本步骤主要有几步
开发简单 MFC 应用程序的步骤主要有:
1. 前期策划---确定应用程序要执行哪些基本任务。
2. 新建项目---用VS新建MFC项目,设置初始属性。
3. 界面设计---使用"对话框编辑器"设计界面:添加想要的对话框控件,设置它们的属性,然后精确调节它们的位置和大小以看起来更加美观。
4. 设计实现---为控件添毕槐物加成员变量,同时添手液加必需的程序变量以及控件的事件处理程序,然后为你的程序编写实现代码以便让它做你想要的事情。
5. 测试程序---试运行程序并明则检查其是否按预期工作。如果存在问题,需进行修改。
❽ DELPHI基础教程:Delphi图形图像编程(二)[2]
另外一个问题是 我们希望得到的是鼠标按钮按下和松开这两点所形成的图形 但OnMouseMove却把鼠标轨迹上各点与起始点所形成的所有图形画在屏幕上 这同样是我们不希望看到的 为了解决这些问题 程序定义了鼠标的三个事件
procere TForm FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X Y: Integer)
begin
Drawing := True;
Image Canvas MoveTo(X Y)
Origin := Point(X Y)
MovePt := Origin;
OriginPanel Caption := Format( Origin: (%d %d) [X Y])
end;
procere TForm FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X Y: Integer)
begin
if Drawing then
DrawShape(Origin Point(X Y) pmCopy)
Drawing := False;
end;
procere TForm FormMouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer)
begin
if Drawing then
begin
DrawShape(Origin MovePt pmNotXor)
MovePt := Point(X Y)
DrawShape(Origin MovePt pmNotXor)
end;
MovePt用来记录鼠标当陵御前位置 当下次鼠标移动时 就衡局能在上次鼠标绘制的图形上画一个形状 大小一样的图形 并把画笔颜色设置成PmNotXor 使上次绘制的图形颜色变成了屏幕颜色 从而达到 橡皮擦 的效果
将画笔 画刷的Style属性设置成用户希望的值 可实现对画笔和画刷风格的选择
procere TForm SetBrushStyle(Sender: TObject)
begin
with Image Canvas Brush do
begin
咐汪让if Sender = SolidBrush then Style := bsSolid
else if Sender = ClearBrush then Style := bsClear
else if Sender = HorizontalBrush then Style := bsHorizontal
else if Sender = VerticalBrush then Style := bsVertical
else if Sender = FDiagonalBrush then Style := bsFDiagonal
else if Sender = BDiagonalBrush then Style := bsBDiagonal
else if Sender = CrossBrush then Style := bsCross
else if Sender = DiagCrossBrush then Style := bsDiagCross;
end;
procere TForm SetPenStyle(Sender: TObject)
begin
with Image Canvas Pen do
begin
if Sender = SolidPen then Style := psSolid
else if Sender = DashPen then Style := psDash
else if Sender = DotPen then Style := psDot
else if Sender = DashDotPen then Style := psDashDot
else if Sender = DashDotDotPen then Style := psDashDotDot
else if Sender = ClearPen then Style := psClear;
end;
end;
图像对象概述
TGraphic对象
TGraphic对象是TBitmap TIcon Tmetafile对象的基类 如果知道图像的具体类型( 如位图 图标元文件) 则应将图像贮存在相应类型的对象中( 如TBitmap TIcon Tmetafile) 否则应该使用可贮存任何图像类型的TPicture对象
TPicture对象
TPicture对象可以保存位图 图标或元文件 Graphic属性中包括图像的类型 图像的高度和宽度分别定义在Height Width属性中 调用LoadFromFile方法 可以从文件中装载一幅图像
procere TForm FormCreate(Sender: TObject)
begin
BitBtn Glyph LoadFromFile( TARTAN BMP )
end;
要保存一个位图 则要用SaveToFile方法 要把图像复制到剪切板 可以调用TClipboard对象的Assign方法
TImage部件
TImage部件用以在窗体中显示图像 它的Picture 属性保存着要显示的图像 这是一个TPicture对象 AutoSize Stretch属性是用来调节部件与图像的大小的 当AutoSize 为真值时 TImage部件将根据它所包含的图像的大小来调整自身的大小 当AutoSize为假值时 不论图像有多大 部件将保持设计时的大小 如果部件比图像小 那么只有一部分图像是可见的 当Stretch为真值时 位图像将根据部件的大小调整自身的大小 当部件大小改变时 元文件也做相应变化 Stretch属性对图标没有作用
TBitmap Object(位图对象)
位图对象包含一个位图图像 有HBITMAP HPALETE句柄 可自动管理调色板 位图对象也有画布属性 位图的Palette属性用来控制位图的颜色映射 它包括 种可显示的颜色 如果应用程序用前景色绘制位图 Palette 属性的颜色将被加入Windows系统调色板 其它颜色被映射到系统调色板已存在的颜色 如果应用程序用自己的颜色绘制位图 而其它程序已占有系统调色板 位图的颜色将被映射到系统调色板中
如果Monochrome属性设置成假 位图将显示成彩色 反之显示成黑白色
调用Draw和StretchDraw方法可在画布上绘制位图
图像对象的应用
本章例程中 单击(文件|浏览)菜单项 将弹出一个图像浏览窗体 如果用户在窗体中选择文件列表框的图形文件 窗体右上角的图像部件上将出现此文件所代表的图像 若选择 雕刻效果 按钮中检查框 窗体中的加速按钮和位图按钮上将出现位图
以下代码是将图像文件装载至图像部件上
procere TImageForm FileListBox Click(Sender: TObject)
var
FileExt: string[ ];
begin
FileExt := UpperCase(ExtractFileExt(FileListBox Filename))
if (FileExt = BMP ) or (FileExt = ICO ) or (FileExt = WMF ) then
begin
Image Picture LoadFromFile(FileListBox Filename)
Label Caption := ExtractFilename(FileListBox Filename)
if (FileExt = BMP ) then
begin
Label Caption := Label Caption +
Format( (%d x %d) [Image Picture Height Image Picture Width])
ViewForm Image Picture Bitmap := Image Picture Bitmap;
ViewAsGlyph(FileExt)
end;
if FileExt = ICO then Icon := Image Picture Icon;
if FileExt = WMF then
ViewForm Image Picture Metafile := Image Picture Metafile;
end;
end;
这个过程首先判断文件类型 如果是图像文件 则将图像装载至图像部件上 并在标签上列出文件名称 如果是位图文件 还将显示其大小
lishixin/Article/program/Delphi/201311/25244
❾ DELPHI基础教程:Delphi图形图像编程(一)[3]
响应鼠标事件
鼠标常被用作绘图的工具 应用程序利用鼠标位置的变化来绘制各种不同的图形 鼠标有三个动作 鼠标按钮按下 鼠标移动 鼠标按钮弹起 在Delphi中 对应三个动作有三个不同的事件 OnMouseDown OnMouseMove OnMouseUp
当Dlephi应用程序探测到一个鼠标动枝慧作时 它传递五个参数 并调用相应的事件响应
程序员可利用这些参数来定义事件程序 五个参数如下表 :
表 鼠标事件的五个参数
━━━━━猛颤答━━━━━━━━━━━━━━━━━━━━━━
参数 含义
──────────────────────────
Sender 探测鼠标动作的对象
Button 涉及的鼠标按钮 左键 中键 右键
Shift 鼠标动作时 Alt Ctrl Shift按钮的状态
X Y 事件发生时鼠标的坐标
━━━━━━━━━━━━━━━━━━━━━━━━━━━
当鼠标按下时发生OnMouseDown事件 举一个简单例子来说明程序如何对该事洞磨件进
行响应 假如我们想在鼠标按下的地方出现 Here
响应鼠标的OnMouseDown事件
可在该事件中调用TextOut方法
procere TForm FormMouseDown(Sender: TObject Button: TMouseButton;
Shift : TShifState; X Y : Integer)
begin
Canvas TextOut(X Y Here! )
end;
用户放松鼠标键时发生OnMouseUp事件 该事件发生时 鼠标到达的对象并不一定是鼠标键按下时鼠标所在的对象 例如 用户可在窗体之外画一条线段 (鼠标在窗体外 线段在窗体内) 下面的代码可用鼠标绘制直线
procere TForm FormMouseDown(Sender:TObject)
begin
Moveto(x y)
end;
procere TForm FormMouse Up(Sender:Tobject)
begin
Lineto(X Y)
end;
返回目录 DELPHI基础教程
编辑推荐
Java程序设计培训视频教程
J EE高级框架实战培训视频教程
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLE G数据库开发优化指南
Java程序性能优化 让你的Java程序更快 更稳定
C嵌入式编程设计模式
Android游戏开发实践指南
lishixin/Article/program/Delphi/201311/25249