源码在底下下载:
system_msg.txt文件:
#道具购买成功
props.buyCode.0000=购买成功,花费{0}{1}!
#道具购买失败,金币不足
props.buyCode.0001=购买失败,您的金币不足!
#道具购买失败,元宝不足
props.buyCode.0002=购买失败,您的元宝不足!
测试文档类:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
/**
* ...
* @author ongsh
*/
public class Main extends Sprite
{
private var urlLoader:URLLoader;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, loadComplete);
urlLoader.load(new URLRequest("system_msg.txt"));
}
private function loadComplete(e:Event):void
{
MessageManager.load("system",urlLoader.data);
trace(MessageManager.parseMessage("system",'props.buyCode.0000',[100,'金币']));
trace(MessageManager.parseMessage("system", 'props.buyCode.0001'));
}
}
}
消息管理器:
package
{
import flash.utils.Dictionary;
/**
* ...
* @author ongsh
*/
public class MessageManager
{
public static var isDebug:Boolean = false;
private static var messages:Dictionary = new Dictionary();
/**
* 加载消息文档
*
* @param contentName 文档名称
* @param content 文档内容
*/
public static function load(contentName:String,content:String):void
{
var lines:Array = content.split("\n");
for(var i:int=0; i< lines.length ; i ++)
{
var line:String = lines[i];
line = StringUtil.trim(line);
if(line == "")
{
//debugTrace(contentName,"的第"+(i+1)+"行是空行!");
continue;
}
if(isAnnotation(line))
{
//debugTrace(contentName,"的第"+(i+1)+"行是注释行!");
continue;
}
var key:String;
var value:String;
var sep:String = "=";
var firstSepIndex:int = line.indexOf(sep);
if(firstSepIndex!=-1)
{
key = line.substring(0,firstSepIndex);
value = line.substring(firstSepIndex+1);
if(messages[contentName]==null)
{
messages[contentName] = new Dictionary();
}
messages[contentName][key] = value;
}else{
debugTrace(contentName,"的第"+(i+1)+"行格式不正确!");
}
}
}
/**
* 卸载消息文档
*
* @param contentNam 文档名称
*/
public static function unload(contentName:String):void
{
if(messages[contentName]!=null)
{
messages[contentName] = null;
}
}
/**
*
* @param contentName 文档名称
* @param key 键值
* @param argsArray 替换占位符({0},{1}...)的参数
* @return
*/
public static function parseMessage(contentName:String,key:String,argsArray:Array=null):String
{
if(messages[contentName])
{
var value:String = messages[contentName][key];
if(value==null)
{
debugTrace(contentName,key,"不存在");
return null;
}else{
var str:String = StringUtil.replacePlaceholder(value,argsArray);
return str;
}
}else{
debugTrace(contentName,"不存在");
return null;
}
}
/**
* 是否是注释
*
* @param str 字符串
* @return
*/
private static function isAnnotation(str:String):Boolean
{
if(str.charAt(0) == "#")
{
return true;
}else{
return false;
}
}
private static function debugTrace(...args):void
{
if(isDebug)
{
trace.apply(null,args);
}
}
}
}
字符串工具类:
package
{
/**
* ...
* @author ongsh
*/
public class StringUtil
{
/**
* 把字符串中的占位符 {0} {1} 用数组中的字符串替换
* @param source 源字符串
* @param args 待替换字符串数组
* @return 替换后的字符串
*/
public static function replacePlaceholder(source:String, args:Array):String
{
var pattern:RegExp = /{(\d)}/g;
source = source.replace(pattern, function():String {
return args[arguments[1]];
});
return source;
}
/**
* 替换空白字符分割符
* @param source 源字符串
* @param sep 分隔符
* @return 结果字符串
*/
public static function replaceBlankSep(source:String,sep:String):String
{
//剔除前后空格
source = trim(source);
return source.replace(/\s+/g,sep);;
}
/**
* 剔除字符串前后空白
* @param str 源字符串
* @return 结果字符串
*/
public static function trim(str:String):String
{
return str.replace(/(^\s+)|(\s+$)/g,"");
}
}
}
分享到:
相关推荐
这些工具提供了丰富的API和组件,使得创建和管理消息提示变得简单高效。例如,jQuery的`.ajaxComplete()`可以监听所有Ajax请求的完成,然后显示相应的提示信息。 此外,响应式设计也是现代消息提示必须考虑的方面。...
【使用HOOK拦截任务管理器中直接杀进程的消息】 在IT领域,尤其是系统级编程和安全技术中,有时我们需要保护自己的进程不被意外终止,比如在任务管理器中被直接杀死。这种情况下,可以使用HOOK技术来拦截系统API,...
开发者可以通过阅读和理解这个文本文件中的内容,学习如何在易语言中创建和管理提示消息,例如模拟QQ的消息气泡、声音提示、振动反馈等功能。 在实际应用中,提示消息模块的开发涉及到多个技术点,包括但不限于: ...
如果没有启动管理器,BIOS无法将控制权传递给操作系统,系统将无法正常启动,导致诸如“Missing Operating System”或“Non-System Disk or Disk Error”的错误提示。 计算机的启动流程通常包括以下几个步骤: 1. ...
总的来说,这个“索爱W908c短消息管理器”项目展示了C#在移动设备应用开发中的强大能力,从数据库操作到用户界面设计,再到错误处理和测试,涵盖了软件开发的多个重要环节。对于开发者来说,这样的项目不仅锻炼了...
本文将深入探讨RTX消息管理和使用的关键知识点,帮助用户更好地理解和操作这一系统。 1. **RTX简介**: RTX(Real Time eXchange)是腾讯公司推出的一款企业级通讯软件,提供文本、语音、视频等多种沟通方式,支持...
在C#中开发Windows设备管理器涉及到多个技术领域,包括操作系统接口、硬件驱动程序交互、图形用户界面(GUI)设计以及系统编程。Windows设备管理器是操作系统中的一个重要组件,它负责管理和显示计算机上的硬件设备...
8. **多消息管理**:如果需要同时显示多个消息,`Notification`可以管理这些消息的堆叠和显示顺序。 总之,`Ext.ux.window.Notification`是ExtJs中一个强大的工具,用于创建直观、可定制的用户通知。通过理解和掌握...
总的来说,联想键盘管理器是联想用户优化键盘操作、提升使用体验的重要辅助工具。通过它可以个性化调整键盘设置,满足不同用户的工作和娱乐需求,让电脑使用更加便捷高效。安装文件"lenovokeyboard_Manager.exe"即是...
操作完成后,会弹出消息框提示用户任务管理器的状态。 请注意,修改注册表是一项敏感操作,不当的操作可能导致系统不稳定或功能缺失。因此,在进行此类操作时,应确保有备份或了解操作的潜在风险。 综上所述,...
在JavaScript编程中,消息提示是用户交互的重要组成部分,它能够为用户提供实时反馈,告知操作结果或系统状态。本文将深入探讨“javascript 消息提示封装文件”,了解如何通过前端技术来实现高效、可复用的消息提醒...
总的来说,当遇到“删除文件时提示管理员权限”的问题时,可以尝试使用描述中提及的注册表文件来调整系统设置,但应确保了解操作的风险,并采取适当的预防措施。此外,还可以考虑其他解决方案,比如通过命令提示符以...
在Android应用开发中,"Toast"和"Context"是两个非常关键的概念,它们与消息提示和通知紧密相关。本文将详细解析这两个概念及其在消息显示中的应用。 首先,"Toast"是Android系统提供的一种轻量级的通知方式。当...
这个过程可能需要管理员权限,具体步骤会因不同的论坛程序或操作系统而异。 在"help.txt"文件中,很可能是提供了关于如何操作的指南。帮助文档通常包含步骤说明、注意事项或者故障排除信息,帮助用户正确地安装和...
5. **资源管理器**:虽然没有提供直接的API来控制资源管理器,但可以通过ShellExecute函数(使用P/Invoke技术调用Windows API)来打开、浏览文件夹或执行文件。 6. **设备管理器**:设备管理器是查看和管理电脑硬件...
Qt提供了多种布局管理器,如QVBoxLayout、QHBoxLayout和QGridLayout,它们可以帮助我们方便地组织窗口部件。在仿126邮箱提示框中,可能需要使用混合布局,将用户名和密码输入框垂直排列,而确认和取消按钮则水平...
### 操作系统中的进程管理 #### 进程的概念 在计算机科学中,**进程**是程序的一次动态执行过程,它是操作系统进行资源分配和调度的基本单位。每个进程都有一个独立的地址空间、一组系统资源(如文件句柄)以及操作...
标题中的“又一款论坛用短消息提示音”表明这是一个与论坛相关的软件或音频资源,用于在用户收到新短消息时发出提示。这类提示音通常是为了提高用户体验,让用户能够即时感知到有新的信息等待查看。在论坛环境中,...
在C#编程中,多线程和队列是两种常用的技术,它们在处理高并发、异步操作以及数据管理方面有着广泛的应用。本项目利用这两种技术实现了一个类似QQ消息提示框的功能,允许程序在右下角弹出消息通知,提供良好的用户...