发信人: pb_lover() 
整理人: pblover(1999-09-25 07:30:01), 站内信件
 | 
 
 
【 在 gezehua (键客) 的大作中提到: 】
 : 在PB6中实现音乐(midi或wav)的循环播放,同时当Button被
 : clicked要发出声音(midi或wav)
 
 下面的文章也许对你有帮助!
  标  题: 在PB应用中实现声音与动画(转载)   讨论区:Powerbuilder[?Powerb uilder]  
 作者: zhouxiaotao (淘淘)  日期: 1999.04.09 10:47  
   
 
 ---------------------------------------------------------------------- ----------
 珠 海 远 都 软 件 有 限 公 司  
 卞 国 斌  
 ---- 在 设 计 应 用 程 序 过 程 中, 恰 当 地 应 用 电 脑 声 音 与 动 画  
 
  技 术, 可 以 为 用 户 提 供 更 加 直 观、 友 好、 引 人 注 目 的 操 作  
 
  界 面。 下 面 笔 者 介 绍 一 下 在PowerBuild 应 用 中 实 现 声 音 与   
 
 动 画 的 一 种 简 便 方 法:  
 
 作 为 举 例, 创 建 一 个MDI 风 格 的 窗 口w_audani。 在 这 个 窗 口 上  
 
  放 置 一 个 含 声 音、 动 画 两 个 带 图 标 的 菜 单 项 的 菜 单m_aud  
 
 ani, 一 个 图 象 框p_1。 整 个 窗 口 的 外 观 如 下:  
 
 制 备 声 音 和 图 象 文 件。 本 例 中 选 用 了 一 个adu.wav 的 声 音 文  
 
  件 和 四 个ani1.bmp、ani2.bmp、ani3.bmp、ani4.bmp 用 于 动 画 素 材 的  
 
  分 离 图 象 文 件。  
 
 定 义 程 序 编 制 中 要 用 到 的 变 量:  
 (1) 定 义 一 个 整 型 实 例 变 量, 用 作 图 象 计 数  
 integer picturenub  
 (2) 定 义 一 个 外 部 函 数, 使 在PowerBuild 编 程 中 可 以 调 用Windo  
 
 ws  
 32-bit API 声 音 播 放 函 数  
     function boolean sndplaysounda 
      (string soundname, uint flags) & 
     library "winmm.dll" 
 
 为 窗 口w_audani 编 制 事 件 处 理 程 序。 程 序 行 中// 后 的 为 说 明  
 
  文 字。  
 (1) 在 窗 口 的 打 开(Open) 事 件 下 输 入 程 序:  
 //声音菜单项置选中属性 
 m_audani.m_1.m_aud.checked = true 
 //动画菜单项置选中属性 
 m_audani.m_1.m_ani.checked = true 
 //图象计数器置初值 
 picturenub = 1 
 //定义每隔半秒钟触发一次窗口的timer事件 
 timer(0.5,this) 
 
 ---- (2) 在 窗 口 的 计 时 器(Timer) 事 件 下 输 入 程 序:  
 ---- // 如 果 声 音 菜 单 项 被 选 中, 则 调 用Windows 32-bit API 声 音  
 
  播 放 函 数 播 放 声 音 文 件。 函 数 第 一 个 参 数 指 出 要 播 放 的  
 
  声 音 文 件 名, 第 二 个 指 出 函 数 播 放 属 性, 属 性3 为 异 步、 不  
 
  缺 省  
 
 IF m_audani.m_1.m_aud.checked = true THEN 
 sndplaysounda("aud.wav",3) 
 END IF 
 //如果动画菜单项被选中,则播放动画 
 IF m_audani.m_1.m_ani.checked = true THEN 
 CHOOSE CASE picturenub 
 //当图象计数为1时,播放第1张图象 
 CASE 1 
 p_1.picturename = "ani1.bmp" 
 //当图象计数为2时,播放第2张图象 
 CASE 2 
 p_1.picturename = "ani2.bmp" 
 //当图象计数为3时,播放第3张图象 
 CASE 3 
 p_1.picturename = "ani3.bmp" 
 //当图象计数为4时,播放第4张图象 
 CASE 4 
 p_1.picturename = "ani4.bmp" 
 //恢复图象计数 
 picturenub = 0 
 END CHOOSE 
 //图象计数增1 
 picturenub ++ 
 END IF 
 
 为 菜 单m_audani 编 制 事 件 处 理 程 序:  
 (1) 在 菜 单 项 声 音(m_aud) 的 单 击(Clicked) 事 件 下 输 入 程 序:   
 
 
 // 使 该 菜 单 项 的 选 中 属 性 反 转 起 到 开 关 的 作 用, 即 原 来   
 
 为 选 中 的 变 为 不 选 中, 未 选 中 的 则 现 在 变 成 选 中  
 this.checked = not this.checked  
 (2) 在 菜 单 项 动 画(m_ani) 的 单 击(Clicked) 事 件 下 输 入 程 序:   
 
 
 //同样,使该菜单项的选中属性反转 
 this.checked = not this.checked 
 
 执 行 该 程 序 的 大 致 情 况 是:  
 (1) 启 动 程 序 后, 自 动 打 开 以 上 图 示 的 窗 口;  
 (2) 窗 口 计 时 器 按 每 半 秒 钟 触 发 一 次 事 件 处 理 程 序, 播 放  
 
  声 音 和 图 象 文 件, 周 而 复 始 以 产 生 动 画 效 果;  
 (3) 单 击 声 音 或 动 画 菜 单 项( 工 具 图 标), 可 以 控 制 声 音 或   
 
 动 画 是 否 播 放。  
 
 
 ---- 在 设 计 应 用 程 序 过 程 中, 恰 当 地 应 用 电 脑 声 音 与 动 画  
  技 术, 可 以 为 用 户 提 供 更 加 直 观、 友 好、 引 人 注 目 的 操 作  
  界 面。 下 面 笔 者 介 绍 一 下 在PowerBuild 应 用 中 实 现 声 音 与   
 动 画 的 一 种 简 便 方 法:  
 
 作 为 举 例, 创 建 一 个MDI 风 格 的 窗 口w_audani。 在 这 个 窗 口 上  
  放 置 一 个 含 声 音、 动 画 两 个 带 图 标 的 菜 单 项 的 菜 单m_aud  
 ani, 一 个 图 象 框p_1。 整 个 窗 口 的 外 观 如 下:  
 
 制 备 声 音 和 图 象 文 件。 本 例 中 选 用 了 一 个adu.wav 的 声 音 文  
  件 和 四 个ani1.bmp、ani2.bmp、ani3.bmp、ani4.bmp 用 于 动 画 素 材 的  
  分 离 图 象 文 件。  
 
 定 义 程 序 编 制 中 要 用 到 的 变 量:  
 (1) 定 义 一 个 整 型 实 例 变 量, 用 作 图 象 计 数  
 integer picturenub  
 (2) 定 义 一 个 外 部 函 数, 使 在PowerBuild 编 程 中 可 以 调 用Windo  
 ws  
 32-bit API 声 音 播 放 函 数  
     function boolean sndplaysounda 
      (string soundname, uint flags) & 
     library "winmm.dll" 
 
 为 窗 口w_audani 编 制 事 件 处 理 程 序。 程 序 行 中// 后 的 为 说 明  
  文 字。  
 (1) 在 窗 口 的 打 开(Open) 事 件 下 输 入 程 序:  
 //声音菜单项置选中属性 
 m_audani.m_1.m_aud.checked = true 
 //动画菜单项置选中属性 
 m_audani.m_1.m_ani.checked = true 
 //图象计数器置初值 
 picturenub = 1 
 //定义每隔半秒钟触发一次窗口的timer事件 
 timer(0.5,this) 
 
 ---- (2) 在 窗 口 的 计 时 器(Timer) 事 件 下 输 入 程 序:  
 ---- // 如 果 声 音 菜 单 项 被 选 中, 则 调 用Windows 32-bit API 声 音  
  播 放 函 数 播 放 声 音 文 件。 函 数 第 一 个 参 数 指 出 要 播 放 的  
  声 音 文 件 名, 第 二 个 指 出 函 数 播 放 属 性, 属 性3 为 异 步、 不  
  缺 省  
 
 IF m_audani.m_1.m_aud.checked = true THEN 
 sndplaysounda("aud.wav",3) 
 END IF 
 //如果动画菜单项被选中,则播放动画 
 IF m_audani.m_1.m_ani.checked = true THEN 
 CHOOSE CASE picturenub 
 //当图象计数为1时,播放第1张图象 
 CASE 1 
 p_1.picturename = "ani1.bmp" 
 //当图象计数为2时,播放第2张图象 
 CASE 2 
 p_1.picturename = "ani2.bmp" 
 //当图象计数为3时,播放第3张图象 
 CASE 3 
 p_1.picturename = "ani3.bmp" 
 //当图象计数为4时,播放第4张图象 
 CASE 4 
 p_1.picturename = "ani4.bmp" 
 //恢复图象计数 
 picturenub = 0 
 END CHOOSE 
 //图象计数增1 
 picturenub ++ 
 END IF 
 
 为 菜 单m_audani 编 制 事 件 处 理 程 序:  
 (1) 在 菜 单 项 声 音(m_aud) 的 单 击(Clicked) 事 件 下 输 入 程 序:   
 
 // 使 该 菜 单 项 的 选 中 属 性 反 转 起 到 开 关 的 作 用, 即 原 来   
 为 选 中 的 变 为 不 选 中, 未 选 中 的 则 现 在 变 成 选 中  
 this.checked = not this.checked  
 (2) 在 菜 单 项 动 画(m_ani) 的 单 击(Clicked) 事 件 下 输 入 程 序:   
 
 //同样,使该菜单项的选中属性反转 
 this.checked = not this.checked 
 
 执 行 该 程 序 的 大 致 情 况 是:  
 (1) 启 动 程 序 后, 自 动 打 开 以 上 图 示 的 窗 口;  
 (2) 窗 口 计 时 器 按 每 半 秒 钟 触 发 一 次 事 件 处 理 程 序, 播 放  
  声 音 和 图 象 文 件, 周 而 复 始 以 产 生 动 画 效 果;  
 (3) 单 击 声 音 或 动 画 菜 单 项( 工 具 图 标), 可 以 控 制 声 音 或   
 动 画 是 否 播 放。  
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.122.250]
  | 
 
 
 |