PowerBuilder DataWindow 38个开发技巧

 

1 使DataWindow列只能追加不能修改

如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:

将每一列的 Protect 属性设置为:

If( IsRowNew(), 0, 1) )

在 PowerScript中可以动态修改Protect 属性:

dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")

这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

2 如何在DataWindow中实现列的自动折行

使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便.介绍方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:

1) 在DataWindowPainter中打开此DataWindow.

2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.

3) 选择Position标签, 选中Autosize Height 多选框.

4) 选择Edit标签, 不选中Auto Horz Scroll多选框.

5) 单击OK按钮, 保存所做的修改.

6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.

7) 选中Autosize Height多选框.

8) 单击OK按钮, 保存所做的修改.

9) 保存此DataWindow.

注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.

3 在数据窗口中实现动画

要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。比如要改变某字段的背景颜色,可设:

ackgound.color = RGB(Integer(Right(string(now(),'hhmmssf'),1))*256/10, Integer(Right(string(now(),'hhmmssf'),1))*256/10,0)

当然,您不仅可以改变背景颜色,而且可以改变字体等等任何属性,使他可以动起来!

4 使数据窗口中的被选中行具有更好的外观

大家都知道,在选择数据窗口中的某一行时,如果使用pb提供的选择函数SelectRow(),那么的外观真是不能恭维,单调而古板的蓝色背景,可能和您的漂亮而生动的应用程序格格不入。有没有办法改变呢?当然有啰,请听我慢慢道来。

   改变某一行的背景比较简单,改变每一列的背景属性(backgroundcolor)即可,可要根据鼠标选择情况自动改变,并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说明。

单行选择

  单行选择比较简单,我们只要将所有字段的背景色的表达式改为:

if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))

  其中第一个颜色为被选中的颜色,第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。

多行选择

  多行选择比较复杂,如果单纯依靠改变数据窗口的属性没法实现,我们必须使用数据窗口属性和代码结合起来才能实现

  首先,改变数据窗口的SQL语句,增加一个计算字段:0 asflag,Select 语句改为:

Select col1,col2 ,1 as flag from tablename where .....,

  当返回数据窗口painter时,您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。

  其次,修改各个字段的背景颜色属性,设置为:if(flag=1,RGB(255,126,0),RGB(255,255,255))

  第三:在数据窗口控件中,增加对clicked 事件的处理,代码如下:

if row<1 then return // setredraw(false)

if this.o b j e c t.flag[row]=1 then //如果该行被选中,撤销选择,否则选中该行

 this.Object.flag[row]=0

else

 this.Object.flag[row]=1

end if

setredraw(true)

您还可以定制本选中行的字体,文本属性等等。原理相同,不再赘述。

5 将日期型字段初始化为当天的日期

   使用 ColumnSpecifications 对话框来设置数据的初始值是一个比较好又比较通用的方法。为了将日期型字段初始化为当天的日期,只要设置初始化值为today,而不是today()即可。同样设置初始值为NUll,可以使用null,而不是 null()。

6 在DataWindow中调整列顺序

在 Gird 风格的 DataWindow 中,列的排列顺序是按照你选择Column 的顺序排列的,并且不能改变.要改变列的顺序则必须重新制作 DataWindow.

最近我发现一个办法可以改变列的顺序: 在 DataWindow 画板中打开要修改的 DataWindow,然后按 'Preview' 按钮切换到预览模式下,选择要移动的列标题并拖动到预定位置,然后返回 DataWindow 画板,存盘即可.

7 Retrieve时不清除原有Datawindow数据

当你调用Retrieve函数,PowerBuilder自动清除原有DataWindow然后Retrieve数据。在DatawindowRetrieveStart事件中,使用Return 2,这样PowerBuilder不会清除原有数据而是追加新数据。

8 美化DataWindow的显示效果

使DataWindow 的单双行显示颜色不同,不仅仅可以使你的应用程序更显专业性,并使数据的可读性增强。先调出你需要改动的DataWindow,在Detail band按下右键选择Properties,选择Tab页中的Expressions,在color属性中输入下面内容:(注意是在Detail明细显示 段按右键,而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255,255)) 马上Preview一下,看一看效果如何。

9 用Line建立漂亮的Grid DataWindow的技巧

虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风 格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。 在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量:在vertical lines,改变它的属性,在ExpressionsTab上,y1行上输入0,y2行上输入rowheight()- 1 在horizontallines, 设置 y1 和 y2 = rowheight() - 5 这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下,看一看效果! 你再也不需要因为行的高度发生改变而重新调整线条位置。

10 如何创建一个报表,如下形式

Quantity Running Total

5,000 5,000

2,500 7,500

3,000 10,500

12,000 22,500

  对于RunningTotal列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。

11 数据窗口的数据送缓冲区之前确认的四个步骤判断数据类型是否正确。如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。 判断是否有数据被改动。判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。

12 如何在DataWindow中用数据类型为Datetime的列为条件进行查找

  1.当要查找的日期条件是一常数时使用如下表达式:

   ls_Find ="datetime_col

    = DateTime('1/1/1999')"

  2.当要查找的日期条件是一个变量时使用如下的表达式:

   ls_Find ="datetime_col = DateTime ('" + ls_Date + "')"

  3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式:

   ls_Find ="datetime_col = DateTime ('" + String (ldt_DateTime) + "')"

13 设置数据窗口Boolean型属性的三种方法

  PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, 'Yes'/'No'。例如:

dw_1.Object.address.Visible = 0dw_1.Object.address.Visible = False dw_1.Object.address.Visible = 'No'

  PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。

14 如何在DataWindow中快速删除多行

  在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:

FOR ll_RowOn = 1 TO dw_1.RowCount()dw_1.DeleteRow(ll_RowOn) NEXT

  一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:

dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1,Delete!)

  不过不要忘了过滤的行在不同的缓冲区中。

15 如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行

  起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:"city < > city [-1] or GetRow () = 1"

16 如何在分组形式的DataWindow中分别显示各组的行号

  当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为

GetRow() - First(GetRow() for Group 1) + 1的计算列。

17 如何改变列的字体颜色,提醒用户此列已做修改

  在列的Color属性中,输入如下表达式

IF (column_name < >column_name.Original, RGB(255,0, 0), RGB(0, 0, 0))。

  在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。这个表达式主要用column_name < > column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。

18 在数据窗口中移走行,但不是去做过滤或删除操作

  RowsDiscard()函数可做到这一点,它在数据窗口中执行移除工作,但被移走的行它不可被删除或做任何修改性的保存。

19 如何在多行显示的DataWindow 中的Footer Band中显示当前数据的首行和最后行的行号

  我们先看两个计算列的表达式: IF(GetRow() = First(GetRow() FOR Page), 1, 0) // 1 为当前页的第一行

IF (GetRow() < > 1 AND GetRow() = Last(GetRow() FORPage), 1, 0) // 1 为当前页的最后一行

  由上面可知,在Footer Band中设置如下计算列表达式:

'Rows ' + String(First(GetRow() FOR Page)) + ' to ' +String(Last(GetRow() FOR Page)) + ' are displayed'。

即可达到这项功能。

20 使可编辑的数据窗口只读

有时,你可能需要将一个用于编程的数据窗口用作显示目的,可以有以下几种方法来实现这一要求:

1.建立两个数据窗口,一个用于编辑,一个用于显示

2.将数据窗口中的全部对象的taborder设置为0.

3.也可以将数据窗口中的列的protect属性设为On或Off,但你不能使用protect属性进行编辑操作

4.数据窗口有一个将datawindow设为只读的属性(readonly),使用它最方便。

21 数据窗口检查重复行

dw_1.SetSort ("user_id A")

dw_1.Sort()

dw_1.SetFilter ("user_id = user_id[-1]")

dw_1.Filter()

if dw_1.RowCount() > 0 then

Messagebox("注意","用户编码重复.")

end if

dw_1.SetFilter ("")

dw_1.Filter()

22 如何在分组形式的DataWindow中分别显示各组的行号

---- 当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()

---- 计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为

GetRow() - First(GetRow() for Group 1) + 1的计算列。

23 如何能让数据窗口的某几列在其他列横拉时固定不动

//  功能说明:用于冻结左边的滚动栏

//  变更记录: 变更或版本更新的时候

//

int i

if pane = 1 then

i = integer(this.o b j e c t.datawindow.horizontalscrollposition2)

if i < 1 or isnull(i) then return

if scrollpos > 0 then

this.o b j e c t.datawindow.horizontalScrollPosition = 0

end if

else

i = integer(this.Object.DataWindow.HorizontalScrollSplit)

if i < 1 or isnull(i) then return

if i > scrollpos then

this.o b j e c t.datawindow.horizontalScrollPosition2 = i

end if

end if

24 在数据窗口中如果要使其中一列的属性为只读,也就是不允许用户修改,那么只需简单地将这一列的Table Order 设置成0就可。然而,在有些情况下

需要对这一列的某些行修改,而某些行不能修改,这就要用到这一列的protect属性了。打开列的属性中的Expressions,在protect中输入条件判别

式。例如:允许用户修改新增加的记录,而检索出来的记录则不允许修改。条件判别式可以写成如下:

if(isRowNew(),0,1)

在 PowerScript中可以动态修改Protect 属性:

dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")

这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

25 控制DATAWINDOW里每页显示的行数

1、在Datawindow中增加一个计算域,起名为:ceil_page,此计算域必须放在Detail段中,

Expression中输入 ceiling(getrow()/25) 25表示每页打印25行,也可以是一个参数。

2、分组,选择菜单RowsCreate Group,选择ceil_page

按ceil_page分组,并选中New Page OnGroup Break(意思是新组开始时换页)。

3、将此计算域设为隐藏(在属性页中的expression页中在visible属性中写0)。

4、补空行:

在窗口的open事件中写如下代码:

long li_count,li_i

li_count=dw_1.retrieve()

if mod(li_count,25)<>0 then

for li_i=1 to 25 - mod(li_count,25)

dw_1.insertrow(0)

next

end if

26 数据窗口的closeQuery事件:提示保存数据

dw_1.AcceptText()

IF dw_1.ModifiedCount() + dw_1.DeletedCount() > 0 THEN

CHOOSE CASE MessageBox("操作提示","数据已经发生变化,是否保存?",Question!,YesNoCancel!,1)

CASE 1

cb_save.TriggerEvent(clicked!)

CASE 2

Return 0//不做任何操作直接关闭窗口

CASE 3

Return 1//不会运行Close Event,维持原来的情况

END CHOOSE

END IF

27 Getchild函数主要被用来得到一个数据窗口的子数据窗口

该函数在两种情况下可以使用,

1、取出数据窗口对象的下拉式数据窗口;

2、取出复合风格(composite)数据窗口对象里所嵌入的子数据窗口对象。

语法:integerdwcontrol.GetChild (string name, REF DataWindowChild dwchildvariable )

例子1这段程序取出一个composite数据窗口对象的两个子数据窗口,并对他们进行过滤,和排序的操作。

/*dw_dy是连接一个composite数据窗口对象的一个数据窗口控件。dw_1、dw_2分别是嵌套的数据窗口的NAME*/

String ls_filter

DataWindowChild dwc_czrw,dwc_czx//定义子数据窗口变量

dw_dy.Settranso b j e c t(sqlca)

dw_dy.Retrieve()

dw_dy.GetChild("dw_2",dwc_czrw)

dw_dy.Getchild("dw_1",dwc_czx)

ls_filter = "czrw_bh ='"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"//过滤条件

dwc_czrw.SetFilter(ls_filter)

dwc_czrw.Filter()

ls_filter = "czx_rwbh ='"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"

dwc_czx.SetSort("czx_sx A")

dwc_czx.Sort()

dwc_czx.SetFilter(ls_filter)

dwc_czx.filter()

当然也可以通过数据共享(ShareData)等方式操作子数据窗口中的数据。

访问复合数据窗口对象.方法 :dw_dy.o b je c t.dw_1.o b j e c t.对象

例子2 下拉数据窗口动态过滤

在数据窗口dw_1的ItemFocusChanged事件中写入如下脚本:

Integer rtncode

String ls_nowFld,ls_deptid,ls_sql

DataWindowChild fld_child

rtncode = dw_1.GetChild("Unit_id",fld_child) //获得Unit_id字段名下拉数据窗口的句柄

If rtncode = -1 Then MessageBox("错误!","不是下拉数据窗口!")

fld_child.SetTransObject(SQLCA) //设置事务对象

ls_sql = Lower(fld_child.GetSQLSelect())// 获得DDDW的SQL语句

// 去除Sql 语句中的Where条件子句, 如原Sql 语句中须有Where条件子句,此处则需进行较

//复杂的处理,应视具体情况而定。

if Pos(ls_sql, " where ")>0 then ls_sql =Left(ls_sql,Pos(ls_sql, " where "))

//重新设置Sql 语句中的Where条件子句

ls_deptid=dw_1.Object.dept_id[GetRow()] //取得当前dept_id选定值

ls_sql = ls_sql + " Where dept_id = '"+Trim(ls_deptid)+"'"

//重新设置Sql 语句

fld_child.SetSQLSelect(ls_sql)

fld_child.Retrieve()//取得满足条件的数据

28 从数据窗口中获取数据

单条:假设我们要读取dept_id字段的第一笔数据,可以用下列方式表示∶li_id =dw_1.o b j e c t.dept_id[1]

假设我们要读取第一行中第二个字段的数据,可以用下列方式表示∶ls_name =dw_1.o b j e c t.DATA[1,2]

假设我们要读取dept_id字段的所有数据,可以用下列方式表示∶li_array =dw_1.o b j e c t.dept_id.CURRENT

假设我们要读取过滤缓冲区 (filter buffer) 内dept_id字段的第一笔数据,可以用下列方式表示∶li_id = dw_1.o b j e ct.dept_id.Filter[1]

假设我们要读取从第二笔数据的第一个字段到第三笔数据的二个字段之间的数据,表示∶lstr_array =dw_1.o b j e c t.DATA[2,1,3,2]

假设我们要读取整个第二笔的数据,可以用下列方式表示∶lstr_dept =dw_1.object.DATA[2]

使用GetItemX ( )函数  x为stringnumber等

lstr_name = dw_1.getitemstring (li_count ,"emp_name")  li_count为哪一条

多条:string ls_name[ ]

ls_name = dw_ 1.object.emp_name.current

数据的读取  一般格式∶数据窗口控件.Retrieve ()  返回个数 ,-1为错误

增加数据   数据窗口控件.InsertRow(行数)  参数为0加到最后

数据的删除       数据窗口控件.Deleterow(行数)

数据的过滤l  数据窗口控件.SetFilter(条件字符串).

数据窗口控件.Filter ( )

用法∶将主要缓冲区 (PrimaryBuffer) 内不符合过滤条件的数据移到过滤缓冲区 (Filter Buffer)

内。

例子: string ls_exp

ls_exp = "dept_id = 100"

dw_1.SetFilter (ls_exp)

dw_1.Filter ( )

排序   dw_1.SetSort ("dept_id")     dw_1.Sort ( )

将数据从所有的缓冲区 (Buffer) 中清除   dw_1.ReSet ( )

计算数据数目。例如∶dw_1.Rowcount ( )  类似:.DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )

数据窗口的滚动  数据窗口控件.ScrollToRow(行数)

29 数据窗口属性改变:

描述数据窗口对象本身颜色,可以表示如下∶longll_color    ll_color = dw_emplist.Describe("DataWindow.Color")

描述数据窗口对象内标题 dept_id_t 的颜色,可以表示如下∶long ll_color   ll_color = dw_emplist.Describe("dept_id_t.Color")

修改数据窗口对象本身颜色,可以表示如下:dw_emplist.Modify ("DataWindow.Color = 255")

修改数据窗口对象内标题 dept_id 的颜色,可以表示如下∶dw_emplist.Modify ("dept_id_t.Color = 255")

假设当我们希望在程序运行阶段才给予下行条件∶薪水超过 50000 时显示红色,低于 50000 时显示黑色。程序的写法如下∶

ls_modstring = "Salary.Color = '0~tIf(Salary > 50000,255,0) '"

dw_1.modify (ls_modstring)

30 得到当前鼠标所指对象所在的带区

string str_band

str_band = GetBandAtPointer() //得到当前鼠标所指对象所在的带区

str_band = left(str_band,(pos(str_band,'~t') - 1))//得到"header"、"detail"等

if str_band<>'header' then return //单击非头区,退出

31 得到鼠标指向的列对象名

str_object = GetObjectAtPointer() //得到当前鼠标所指对象名

str_object = left(str_object,(pos(str_object,'~t') - 1))

//得到列对象名(默认为列名_t为列标题)

str_column=left(str_object,(len(str_title) - 2))

//判断该名称是否为列名字

if this.describe(str_column+".band")='!'then return //非是列名,即列标题不是按正常规律起名的。

32 得到当前行、列,总行、列

//this 针对数据窗口而言

li_col = this.GetColumn()

li_ColCount =long(describe(this,"datawindow.column.count"))

ll_row = this.GetRow()

ll_RowCount = this.RowCount()

//设置当前行、列

scrolltorow(this,ll_Row)

setrow(this,ll_Row)

setcolumn(this,li_col)

this.SetFocus()

33 得到所有列标题

ll_colnum = Long(dw_1.o b j e ct.datawindow.column.count)

for i = 1 to ll_colnum

//得到标题头的名字

ls_colname = dw_1.describe('#' + string(i) +".name") + "_t"

ls_value = dw_1.describe(ls_colname + ".text")

next

34 如何用代码取得数据窗口汇总带计算列的值?  

String ls_value

ls_value =dw_1.Describe("Evaluate("'compute_1',1)")

如果是数值型,要转换。

35 取得单击的列标题、列名、数据库字段名

string ls_dwo

long ll_pos

string ls_type

string ls_title

string ls_column

string ls_dbname

if Not KeyDown(KeyControl!) then  return

ls_dwo = dwo.Name

if trim(ls_dwo) = '' or isnull(ls_dwo) then return

ls_type = This.describe(ls_dwo + '.type')

if ls_type = 'column' then

ls_title =  This.describe(ls_dwo +'_t.text')//标题

ls_column = This.describe(ls_dwo + '.Name') //数据窗口列名

ls_dbname = This.describe(ls_dwo + '.dbname') //数据库中字段名

messagebox('信息',   '标 题 文 本  :' + ls_title+ &

'~r~n数据窗口列名  :' +ls_column + &

'~r~n数据库中字段名:' +ls_dbname )

end if

36 窗口为w_gcde内,放入一个DW_1,如何得到dw_1内的某列值yuonghu_id列的内容

方法:

long lng_column_count

integer i

stringstr_column[]         //列名

string str_column_text[]  //text的名字

  //得到数据窗口的总列数

  lng_column_count= long(dw_1.Describe("DataWindow.Column.Count"))

  //循环依次读取

  for i = 1 tolng_column_count

  str_column[i] = dw_1.Describe("#"+string(i)+".name")

     str_column_text[i] = dw_1.Describe(str_column[i] +"_t.text")

next

37 在DDDW中实现当前高亮行随鼠标移动

DataWindowChild ldwc_Child

String ls_Pointer

Long ll_Row

GetChild( "dept_id", ldwc_Child ) // Replacethe column name "dept_id" as you needed

IF hwndchild = Handle( ldwc_child ) THEN

if notificationcode = 2311 then //DDDW的mousemove事件

//得到鼠标所在行

ls_Pointer =ldwc_Child.GetObjectAtPointer()

ll_Row=Long(Mid( ls_Pointer, Pos( ls_Pointer, "~t" ) + 1 ))

//移到鼠标所在行

IFldwc_Child.GetRow() <> ll_Row AND ll_Row > 0 THEN

ldwc_Child.ScrollToRow( ll_Row )

END IF

end if

END IF

38 实现打印完一个DataWindow后不换页

首先将datawindow的print输出到一个打印文件中,把其他的print也输入这个prn,然后,打印这个打印文件就行了。

如:

datawindow_control1.object.datawindow.print.filename="c:printfilepathexam_1.prn"

datawindow_control2.object.datawindow.print.filename="c:printfilepathexam_1.prn"

dw_1.print()

dw_2.print()

run("print //d:\printservenamesharename"c:printfilepathexam_1.prn")

//d:\printservenamesharename打印机名

PowerBuilder DataWindow 38个开发技巧相关推荐

  1. Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动

    Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动 使用cookie类型的纹理模拟云层的移动 现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着 ...

  2. Unity 游戏开发技巧集锦之创建自发光材质

    Unity 游戏开发技巧集锦之创建自发光材质 创建自发光材质 自发光材质(self-illuminated material)是指自己会发光的材质.生活中与之相似的例子,就是液晶显示屏上显示的信息,文 ...

  3. ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机

    ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现 ...

  4. Unity 4.x游戏开发技巧集锦第2章摄像机的应用

    Unity 4.x游戏开发技巧集锦第2章摄像机的应用 作为游戏开发者,千万不要忽略了摄像机(Camera)的重要性.毕竟玩家是通过摄像机,才看到了游戏的视图.本章将介绍一些摄像机的常见应用.本文选自& ...

  5. 【转】几点 iOS 开发技巧

    [译] 几点 iOS 开发技巧 原文:iOS Programming Architecture and Design Guidelines 原文来自破船的分享 原文作者是开发界中知晓度相当高的 Mug ...

  6. 我的新书 asp net开发技巧精讲

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 搜    ...

  7. unity 发光字体_Unity 游戏开发技巧集锦之创建自发光材质

    Unity 游戏开发技巧集锦之创建自发光材质 Unity游戏开发技巧集锦教程大学霸内部资料 创建自发光材质 自发光材质(self-illuminated material)是指自己会发光的材质.生活中 ...

  8. 赖信仁-EA和UML团队开发技巧-UMLChina讲座-音频和幻灯

    时间 北京时间2009年10月28日(周三)晚上19:00-21:00 演讲人 赖信仁.信仁软体设计负责人.精通物件导向观念.UML.程式设计.系统设计实务及资料仓储等.担任多家公司(台湾电通.中科院 ...

  9. DELPHI基础开发技巧

    ◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar('newfile.txt'),pchar('//computername/direction/targe ...

最新文章

  1. 我的VC++——对话框中显示GIF格式的图片
  2. 2 datax mysql 和 mysql之间相互导入
  3. Halcon 标定与准确测量
  4. php+mysql+pdo连接数据库
  5. 语言模型微调领域有哪些最新进展?一文详解最新趋势
  6. java 接口编程_JAVA面向接口编程
  7. HttpClient api-连接池
  8. Compass样式重置
  9. 安装MyEclipse得心得
  10. SpringMVC源码解析(四)——请求处理
  11. xslt调用自定义函数(C#/Js/Java)
  12. 第二次作业+105032014149
  13. 安装docker desktop for windows启动时报错
  14. mseed读取[2]
  15. 2022年第十二届MathorCup移动通信网络站址规划和区域聚类问题
  16. Ubuntu22.4开发环境配置
  17. RTI_DDS调试日志
  18. cycJava基础以及集合总结
  19. Windows 由于无法验证发布者,windows阻止控件安装怎么办
  20. 新手如何使用Cheat Engine (CE) 来修改“我的世界“?

热门文章

  1. ERP沙盘模拟实验报告
  2. Stm32:地址空间划分
  3. Makefile:跟我一起学makefile
  4. Stm32:半主机模式
  5. 洛谷——P1089 [NOIP2004 提高组] 津津的储蓄计划
  6. mfc之使用控制台Console输出调试信息
  7. 经典手眼标定算法之Navy的OpenCV实现
  8. 网络蛋白质组学在计算机中应用,Mumford Shah算法研究及其在拓扑蛋白质组学中的应用...
  9. git常用命令(史上最经典)
  10. 程序员思维看爱情是什么?