数码影音 >> 学院 >> 正文
窗体动态效果的实现

  最近用pb做了一个触摸屏的程序,项目组要求窗口显示关闭的时候有点动态效果,于是我就写了如下的程序,供大家参考借鉴。

   

  ---------------------------------
  //实现关闭窗体时的动态效果
  // -------------------------------
  //函数名:gf_closequery
  //参数说明:
  // window window类型,调用窗口的名字
  // closetype integer类型,窗口关闭方式,value = 0~10
  // -------------------------------
  //申明局部变量
  int li_x ,li_y,li_width,li_height,li_ceny,li_cenx,li_xminusy,li_wminush
  Integer li_gd

  //取出当前窗口的坐标值、大小值
  li_x = window.x
  li_y = window.y
  li_width = window.width
  li_height = window.height

  //设置窗体关闭前的动画效果
  //关键是看哪个值发生了变化——x、y、h、w
  CHOOSE CASE closetype
  CASE 0 // closetype = 0,从下到上逐渐消失
  for li_gd = li_height to 0 step -1
  window.height = li_gd
  window.show()
  next
  CASE 1 // closetype = 1,从上到下逐渐消失
  for li_gd = li_y to li_height+li_y step 1
  window.y = li_gd
  window.height = li_height+li_y - li_gd
  window.show()
  next
  CASE 2 // closetype = 2,从右到左逐渐消失
  for li_gd = li_width to 0 step -1
  window.width = li_gd
  next
  CASE 3 // closetype = 3,从左到右逐渐消失
  for li_gd = li_x to li_x+li_width step 1
  window.x = li_gd
  window.width = li_x+li_width - li_gd
  window.show()
  next
  case 4 // closetype = 4,从上下向中间挤压逐渐消失
  li_ceny = li_y+li_height/2
  for li_gd = li_y to li_ceny step 1
  window.y = li_gd
  window.height = li_height - 2*(li_gd - li_y)
  next
  case 5 // closetype = 5,从左右向中间挤压逐渐消失
  li_cenx = li_x+li_width / 2
  for li_gd = li_x to li_cenx step 1
  window.x = li_gd
  window.width = li_width - 2*(li_gd - li_x)
  next
  case 6 // closetype = 6,从左上->右下
  for li_gd = li_y to li_height+li_y step 1
  window.y = li_gd
  window.height = li_height+li_y - li_gd
  if window.x < li_x + li_width then
  window.x = li_x + (li_gd - li_y)
  else
  window.x = li_x + li_width
  end if
  if window.width > 0 then
  window.width = li_x+li_width - window.x
  else
  window.width = 0
  end if
  next
  window.x = li_x + li_width
  window.y = li_height+li_y
  window.width = 0
  window.height = 0
  window.show()
  case 7 // closetype = 7,从右下->左上
  for li_gd = li_height to 0 step -1
  window.height = li_gd
  if window.width > 0 then
  window.width = li_width - (li_height - li_gd)
  else
  window.width = 0
  end if
  next
  window.x = li_x
  window.y = li_y
  window.width = 0
  window.height = 0
  window.show()
  case 8 // closetype = 8,从右上->左下
  for li_gd = li_y to li_height+li_y step 1
  window.y = li_gd
  window.height = li_height+li_y - li_gd
  if window.width > 0 then
  window.width = li_width - (li_gd - li_y)
  else
  window.width = 0
  end if
  next
  window.x = li_x
  window.y = li_height+li_y
  window.width = 0
  window.height = 0
  window.show()
  case 9 // closetype = 9,从左下->右上
  for li_gd = li_x to li_x+li_width step 1
  window.x = li_gd
  window.width = li_width +li_x -li_gd
  if window.height > 0 then
  window.height = li_height -(li_gd - li_x)
  else
  window.height = 0
  end if
  next
  window.x = li_x+li_width
  window.y = li_y
  window.width = 0
  window.height = 0
  window.show()
  case 10 // closetype = 10,从四面到中间
  li_ceny = li_y+li_height/2
  li_cenx = li_x+li_width / 2
  for li_gd = li_y to li_ceny step 1
  window.y = li_gd
  window.height = li_height - 2*(li_gd - li_y)
  if window.x < li_x + li_cenx then
  window.x = li_x + (li_gd - li_y)
  else
  window.x = li_x + li_cenx
  end if
  if window.width > 0 then
  window.width = li_width - 2*(li_gd - li_y)
  else
  window.width = 0
  end if
  next
  window.x = li_cenx
  window.y = li_ceny
  window.width = 0
  window.height = 0
  window.show()
  case else
  window.show()
  window.width = li_width
  window.height = li_height
  window.x = li_x
  window.y = li_y
  END CHOOSE
  return 0
  ************************
  //调用该函数在窗体的closequery事件中
  gf_closequery (w_main,mod(integer(string(now(),"ss")),11))

  

信息来源: