霜之夜 发表于 2009-7-17 15:52:07

求助!引用右键菜单的读档功能时没有反应

用的是范例里的开始界面和右键菜单 想在first.ks里引用load 可是没有反应 不知哪里出了错

把first.ks代码发在下面 trac.ks用附件形式发出 给大家添麻烦了真不好意思

first.ks
+++++++++++++++

;照例等待200毫秒,当然,不等也没什么...

;加载播放OGG格式音乐的插件,毕竟OGG在文件大小上有无可比拟的优势,如果游戏要网络发表还是OGG最合适

@call storage=macro.ks
;
;这个是后面的工作,这里先加上分号不读取

*start
;游戏开始点的标签


;标题画面的代码,以后执行任何回到标题画面的行为都会从这个代码开始读取


;照例清除文字层




;这三个是标题画面的重要参数:
;表示禁止右键功能(若不设置,记得右键的默认功能是消除对话框),enabled=true就可恢复
;表示点击跳过禁止,enabled=true就可恢复
;表示历史记录查看禁止(若不设置,滚轮会显示历史记录的剧本文字).output=true/false表示是否可查看历史记录;enabled=true/false表示是否启用历史记录




;和前一个教程一样,让message0存在但不可见.另外要说明一点,由于这里当前层设为message0,所以下面无论按钮还是文字链接都是在message0上,一旦message0不可见,那么按钮和文字链接都无法显示


;停止播放音乐





;放上背景图





;放上标题画面选项的白色衬底,这里用到了"图层0",因为图层0默认为不可见(只有base层默认为可见),所以务必加上visible=true




;放上游戏logo









;标题画面中最重要的按钮部分,这里用的是图片按钮,这种按钮比较美观(下一个"右键菜单"教程会谈到纯文字链接)
;,以游戏对话框的左上顶点为"x=0 y=0"对按钮进行定位
;下面要说明按钮代码中的参数:
;normal="XXX" 这是一般情况时按钮引用的图片
;over="XXX" 这是鼠标放在按钮上面时按钮引用的图片,省略时与normal相同
;on="XXX"   点击时按钮引用的图片,省略时与over相同,这里给省略了
;target=*play storage=play.ks 按钮点击后指向的目标,这里指向的是正篇剧本,星号后的名称可以顺意设置,只要和下面标签的对应就行了
;clickse="XXX" 这是鼠标放在按钮上面时的音效,为了方便,一般把音效文件放在sound文件夹里
;enterse="XXX" 这是鼠标点击后的音效


;标题画面的代码到此为止


;这个是退出游戏的代码,方法有很多种,这里仅举一例,以后有机会还会提到
*titleexit
;这个标签与之前按钮的target对应


;照例...









;freeimage是清除图层图片的代码,也可以进行渐变,原理是一样的


;关闭游戏窗口的指令,ask=true/false false为不询问直接关闭窗口



;可以试试这种结束游戏的方式:
;======================================================
*titleexit


;======================================================


;读取进度的代码
*load1




;这是返回标题画面的一种方法
*retitle





;把之前用来放存档名字的message1给隐藏,并清除该图层上的文字


;把当前文字层从message1换回message0








;重设按钮







trac.ks
+++++++++++++++++++++++++++
*sys_0






@button normal="sys1"

@button graphic="sys2" target=*save clickse="l3" enterse="l4" recthit=false cond="f.savecan == 1"
@button normal="sys2_1" cond="f.savecan == 0"

@button graphic="sys3" target=*load clickse="l3" enterse="l4" recthit=false

@button graphic="sys4" target=*set clickse="l3" enterse="l4" recthit=false

@button graphic="sys5" target=*exit clickse="l3" enterse="l4" recthit=false






*dsys









*exit




*exit0




*exitdyn



*exit_0

;这里我用kag实现关闭对话框的自定的缺点是按窗口上的x和系统里的关闭时还是弹出系统对话框,要修改这个要在YesNoDialog里改,因为也是tjs的部分所以这里不举例了

*set



@button normal="set0"




@layopt layer=message3 page=back visible=true


@trans method=crossfade time=500
@wt



*dset







*set_0



@button normal="set0"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol != 40" exp="sf.bgmvol=40"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol == 40" exp="sf.bgmvol=40"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol != 70" exp="sf.bgmvol=70"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol == 70" exp="sf.bgmvol=70"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol != 100" exp="sf.bgmvol=100"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.bgmvol == 100" exp="sf.bgmvol=100"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol != 40" exp="sf.sevol=40"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol == 40" exp="sf.sevol=40"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol != 70" exp="sf.sevol=70"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol == 70" exp="sf.sevol=70"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol != 100" exp="sf.sevol=100"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.sevol == 100" exp="sf.sevol=100"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed != 1" exp="sf.speed=1"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed == 1" exp="sf.speed=1"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed != 10" exp="sf.speed=10"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed == 10" exp="sf.speed=10"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed != 20" exp="sf.speed=20"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.speed == 20" exp="sf.speed=20"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.window != 1" exp="sf.window=1"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.window == 1" exp="sf.window=1"

@button graphic="set1" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.window != 0" exp="sf.window=0"
@button graphic="set2" target=*set_1 clickse="l3" enterse="l4" recthit=false cond="sf.window == 0" exp="sf.window=0"


*set_1







*load
@if exp="typeof(global.rclickconfig_object) == 'undefined'"
@iscript
// 用tjs编写的右键功能菜单
// 使用了100个储存位置
// Config.tjs中:
// 可能的书签的个数设置为100
// freeSaveDataMode设置为false
// saveThumbnail 像设置为true


class RButtonLayer extends ButtonLayer
// parent に onClick イベントを送るようにしたボタンレイヤ
{
var tag;

function RButtonLayer(window, parent)
{
super.ButtonLayer(window, parent);
focusable = false;
}

function finalize()
{
super.finalize(...);
}

function onClick()
{
super.onClick(...);
if(enabled)
parent.onButtonClick(this);
}
}

class SaveDataItemLayer extends KAGLayer
{
// 关于存档块
var num; // 存档号
var bgColor = 0xffbb0000; // 背景色 ( 0xAARRGGBB )
var focusedColor = 0xffffffff; // 鼠标点下正在活动状态的边沿,完全不透明的白色

function SaveDataItemLayer(window, parent, num) // 单个存档板块功能
{
super.KAGLayer(window, parent);

this.num = num;

setImageSize(135,140); // 窗口的Size
face = dfBoth;
fillRect(0, 0, imageWidth, imageHeight, bgColor);
setSizeToImageSize();

hitType = htMask;
hitThreshold = 0; // 把整个窗口作为点击对象

cursor = kag.cursorPointed; // 鼠标的形状
focusable = true; // 可以取得焦点,描绘选项的高亮框用

face = dfBoth;
// 序号的表示
var str = string (num + 1);
font.height = 12;
var ty = font.getTextHeight(str);
drawText(2, 102, "No."+str, 0x000000);

// 存档图像的读入,没有存档则描绘一黑色窗口,中为NO DATA
var tmplayer = new global.Layer(window, parent);
var tnname = kag.getBookMarkFileNameAtNum(num);
if(Storages.isExistentStorage(tnname))
{
tmplayer.loadImages(tnname);
}
else
{
tmplayer.setImageSize(133, 100);
tmplayer.fillRect(0, 0, imageWidth, imageHeight, 0x70000000);
var str = "NO DATA";
var tx = tmplayer.font.getTextWidth(str);
tmplayer.drawText((tmplayer.imageWidth - tx) \ 2, 40, str, 0xffffff);
}
copyRect(1, 1, tmplayer, 0, 0, tmplayer.imageWidth, tmplayer.imageHeight);
invalidate tmplayer;

// 存档的标签信息
font.height = 12;
var str = kag.bookMarkNames;
if(str == '') str = 'NO DATA';
drawText(5, 120, str, 0xffffff);

// 存档的日期信息
if(kag.bookMarkDates == '')
str = "----/--/-- --:--";
else
str = kag.bookMarkDates;
drawText(37, 102, str, 0xff0000);

}

function finalize()
{
super.finalize(...);
}

function saveToSystemVariable()
{
// 增添量的记录

}

function onPaint()
{
super.onPaint(...);
// 边框绘制
// update()之后,描画之前使用
face = dfBoth;
if(focused)
{
fillRect(0, 0, imageWidth, 2, focusedColor);
fillRect(0, 2, 2, imageHeight - 2, focusedColor);
fillRect(imageWidth - 2, 2, 2, imageHeight - 2, focusedColor);
fillRect(2, imageHeight - 2, imageWidth - 4, 2, focusedColor);
}
else
{
fillRect(0, 0, imageWidth, 2, bgColor);
fillRect(0, 2, 2, imageHeight - 2, bgColor);
fillRect(imageWidth - 2, 2, 2, imageHeight - 2, bgColor);
fillRect(2, imageHeight - 2, imageWidth - 4, 2, bgColor);
}
}

function onFocus()
{
// 取得焦点
super.onFocus(...);
update();
}

function onBlur()
{
// 擦去焦点
super.onBlur(...);
update();
}

function onHitTest(x, y, process)
{
if(process)
{
// 在这里使用右键的话跳过envent
if(System.getKeyState(VK_RBUTTON))
super.onHitTest(x, y, false);
else
super.onHitTest(x, y, true);
}
}

function onKeyDown(key, shift, process)
{
// 使用键盘按键的情况
if(process && key == VK_RETURN || key == VK_SPACE)
{
// 使用空格或者回车键
super.onKeyDown(key, shift, false);
saveToSystemVariable();
parent.onLoadOrSave(num);
}
else
{
// 其它按键不做处理
super.onKeyDown(...);
}
}

function onMouseDown(x, y, button, shift)
{
super.onMouseDown(...);
if(button == mbLeft)
{
focus();
saveToSystemVariable();
parent.onLoadOrSave(num);
}
}
}

class RClickConfigLayer extends Layer // 设定右键菜单画面
{
var closeButton; // 设置“关闭”按钮
var saveButton; // 设置“保存”按钮
var loadButton; // 设置“读取”按钮
var hideMessageButton; // 设置消除message画面
var saveDataItems;
var state = -1; // 0 = 主菜单?1 = 读取 2 = 保存画面,判断返回主菜单的位置并区分操作
var owner; // RClickConfigPlugin Object参考
var currentPage = 0; // 存取界面的当前页数
var returnButton; // 设置“返回”按钮
var pageButtons; // 存取页面的当前页数跳跃按钮

function RClickConfigLayer(win, par, owner)
{
super.Layer(win, par);
this.owner = owner;

// Layer状态初期化
setImageSize(800, 600);
clearBase();
setSizeToImageSize();
setPos(0, 0);
hitType = htMask;
hitThreshold = 0; // 全域不透過
}

function finalize() //初始化
{
clear();

invalidate closeButton if closeButton !== void;
invalidate saveButton if saveButton !== void;
invalidate loadButton if loadButton !== void;
invalidate hideMessageButton if hideMessageButton !== void;

invalidate returnButton if returnButton !== void;

super.finalize(...);
}

function clearBase()
{
// 底色,背景色
fillRect(0, 0, imageWidth, imageHeight, 0x50000000);
}


function makeMainMenu()
{
// 右键主菜单
if(state != 0)
{

clear();
state = 0;

/*
制成按钮
这里使用的是文字按钮、
使用图像按钮的话:
if(closeButton === void)
{
closeButton = new RButtonLayer(window, this);
closeButton.showFocusImage = true;
closeButton.loadImages("ボタン画像ファイル名");
closeButton.left = 270;
closeButton.top = 350;
closeButton.focusable = true;
}
这样表述。

这里指定的图像是普通按钮图像
横向3连图像或者4连图像
showFocusImage = true的时候使用4连图像(推荐)
*/

// 「关闭」按钮的描绘
if(closeButton === void)
{
closeButton = new RButtonLayer(window, this);
closeButton.width = 100;
closeButton.height = 25;
closeButton.caption = "close";
closeButton.captionColor = 0xffffff;
closeButton.left = 270;
closeButton.top = 350;
closeButton.focusable = true;
}
closeButton.visible = true;

// 「保存」按钮的描绘
if(saveButton === void)
{
saveButton = new RButtonLayer(window, this);
saveButton.width = 100;
saveButton.height = 25;
saveButton.caption = "save";
saveButton.captionColor = 0xffffff;
saveButton.left = 270;
saveButton.top = 100;
saveButton.focusable = true;
}
saveButton.enabled = kag.canStore();
saveButton.visible = true;

// 「读取」按钮的描绘
if(loadButton === void)
{
loadButton = new RButtonLayer(window, this);
loadButton.width = 100;
loadButton.height = 25;
loadButton.caption = "load";
loadButton.captionColor = 0xffffff;
loadButton.left = 270;
loadButton.top = 150;
loadButton.focusable = true;
}
loadButton.enabled = kag.canRestore();
loadButton.visible = true;

// 「消除message」按钮的描绘
if(hideMessageButton === void)
{
hideMessageButton = new RButtonLayer(window, this);
hideMessageButton.width = 100;
hideMessageButton.height = 25;
hideMessageButton.caption = "cl-message";
hideMessageButton.captionColor = 0xffffff;
hideMessageButton.left = 270;
hideMessageButton.top = 200;
hideMessageButton.focusable = true;
}
hideMessageButton.visible = true;
}
}

function clearSaveDataItems()
{
// 清除存取页面的存档块
if(saveDataItems !== void)
{
for(var i = 0; i < saveDataItems.count; i++)
{
saveDataItems.saveToSystemVariable();
invalidate saveDataItems;
}
saveDataItems = void;
kag.setBookMarkMenuCaptions();
}
}

function makeSaveDataItems() // 存档块的罗列,自增加变量i,u,当前页数currentPage
{
// 存档的表示
clearSaveDataItems();
saveDataItems = [];
for(var i = 0; i < 4; i++) // 纵列
{
for (var u = 0; u < 5; u++) // 横列
{
var obj = new SaveDataItemLayer(window, this, currentPage * 20 + i*5+u); // 总计所有页面的存档数字
saveDataItems = obj;
obj.setPos(140 * u + 100, 145 * i + 5); // 框的摆放+整体偏位
obj.visible = true;
}
}
}

function clearPageButtons()
{
// 清除页数按钮
if(pageButtons !== void)
{
for(var i = 0; i < pageButtons.count; i++)
{
invalidate pageButtons;
}
pageButtons = void;
}
}

function makePageButtons()
{
// 生成页数按钮
clearPageButtons();
pageButtons = [];
for(var i = 0; i < 5; i++)
{
var obj = new RButtonLayer(window, this);
pageButtons = obj;
obj.width = 80;
obj.height = 25;
obj.color = currentPage == i ? 0xff0000 : 0x000000;
obj.caption = " 存档 " + (i*20+1) + "~" + ((i+1)*20);
obj.captionColor = 0xffffff;
obj.top = i * 30 + 350;
obj.left = 10;
obj.focusable = true;
obj.enabled = currentPage != i;
obj.visible = true;
obj.tag = 'page';
obj.page = i;
}
}

function changePage(newpage)
{
// 换页功能
if(pageButtons !== void)
{
pageButtons.color = 0x000000;
pageButtons.enabled = true;
pageButtons.color = 0xff0000;
pageButtons.enabled = false;
currentPage = newpage;
makeSaveDataItems();
}
}

function makeReturnButton()
{
// “返回”按钮
if(returnButton === void)
{
returnButton = new RButtonLayer(window, this);
returnButton.width = 80;
returnButton.height = 25;
returnButton.caption = "返回";
returnButton.captionColor = 0xffffff;
returnButton.left = 10;
returnButton.top = 550;
returnButton.focusable = true;
}
returnButton.visible = true;
}

function makeLoadMenu()
{
// 「读取」菜单界面的描绘
if(state != 1)
{
clear();
state = 1;
makeSaveDataItems(currentPage);
makeReturnButton();
makePageButtons();
font.height = 24;
drawText(30, 30, "ロード", 0xffffff);
}
}

function makeSaveMenu()
{
// 「保存」菜单界面的描绘
if(state != 2)
{
clear();
state = 2;
makeSaveDataItems(currentPage);
makeReturnButton();
makePageButtons();
font.height = 24;
drawText(30, 30, "セーブ", 0xffffff);
}
}

function clear()
{
// 隐藏画面上的所有无效按钮,清场
clearBase();

closeButton.visible = false if closeButton !== void;
saveButton.visible = false if saveButton !== void;
loadButton.visible = false if loadButton !== void;
hideMessageButton.visible = false if hideMessageButton !== void;

returnButton.visible = false if returnButton !== void;

clearSaveDataItems();
clearPageButtons();
}

function saveToSystemVariable()
{
// 需要保存系统变量数据的时候
if(saveDataItems !== void)
{
for(var i = 0; i < saveDataItems.count; i++)
saveDataItems.saveToSystemVariable();
kag.setBookMarkMenuCaptions();
}
}

function onButtonClick(sender)
{
// 按下按钮
switch(sender)
{
case closeButton: // 关闭
owner.onConfigClose();
break;
case saveButton: // 保存
makeSaveMenu();
break;
case loadButton: // 读取
makeLoadMenu();
break;
case hideMessageButton: // 消除message
owner.closeConfig();
kag.process('', '*hidemessage');
break;
case returnButton: // 返回
makeMainMenu();
break;
default:
if(sender.tag == 'page')
{
// 页数
changePage(sender.page);
}
}
}

function onLoadOrSave(num)
{
// 读取或者是存档
if(state == 1)
{
// load
kag.loadBookMarkWithAsk(num);
}
else
{
// save
if(kag.saveBookMarkWithAsk(num))
{
clearSaveDataItems();
makeSaveDataItems(); // 刷新信息
}
}
}

function show()
{
// layer的表示
visible = true;
setMode();
focus();
}

function hide()
{
// layer的隐藏
removeMode();
visible = false;
clear();
state = -1;
}

function onKeyDown(key)
{
super.onKeyDown(...);
if(key == VK_ESCAPE)
owner.onConfigClose(); // ESC键按下的时候关掉主菜单
}

function onMouseDown(x, y, button, shift)
{
if(button == mbRight)
{
if(state == 0)
{
// 主菜单上右键按下则关掉主菜单
owner.onConfigClose();
}
else if(state == 1 || state == 2)
{
// 存取界面按下右键则返回主菜单
makeMainMenu();
}
}
}
}


class RClickConfigPlugin extends KAGPlugin // 右键设定插件集
{
var window;
var config;

function RClickConfigPlugin(window)
{
// RClickPlugin 构造函数
super.KAGPlugin(); // 呼叫superclass的构造函数
this.window = window; // 保留窗口参照数据
}

function finalize()
{
invalidate config if config !== void;
super.finalize(...);
}

function show()
{
// 表示
if(config === void)
config = new RClickConfigLayer(window, kag.fore.base, this);
config.parent = window.fore.base;
// 关联再设定
// (根据过渡变换表层和背景层)
config.makeMainMenu();
config.show();
}

function onConfigClose()
{
// 打开设定页
closeConfig();
window.trigger('config'); // 'config'触发器
}

function closeConfig()
{
// 关闭设定页
config.hide() if config !== void;
}

// 以下、KAGPlugin 的方法的override

function onStore(f, elm)
{
}

function onRestore(f, clear, elm)
{
// 读取的时候
closeConfig();
}

function onStableStateChanged(stable)
{
}

function onMessageHiddenStateChanged(hidden)
{
}

function onCopyLayer(toback)
{
}

function onExchangeForeBack()
{
}

function onSaveSystemVariables()
{
if(config !== void) config.saveToSystemVariable();
}
}


kag.addPlugin(global.rclickconfig_object = new RClickConfigPlugin(kag));


@endscript
@endif
; 右键的设定
@rclick call=true storage="rclick_tjs.ks" target="*rclick" enabled=true name="MENU(&S) ..." enabled=true
@return


*rclick
; 单击右键时呼叫此
@locksnapshot

*rclick_2
@eval exp="rclickconfig_object.show()"
; show メソッドを呼ぶ
@waittrig name="config"
; ↑ 等待'config' 触发器
@unlocksnapshot
@return

*hidemessage
; message消除的话呼叫此
@hidemessage
@jump storage="trac.ks"



*save
@if exp="typeof(global.rclickconfig_object) == 'undefined'"
@iscript
// 用tjs编写的右键功能菜单
// 使用了100个储存位置
// Config.tjs中:
// 可能的书签的个数设置为100
// freeSaveDataMode设置为false
// saveThumbnail 像设置为true


class RButtonLayer extends ButtonLayer
// parent に onClick イベントを送るようにしたボタンレイヤ
{
var tag;

function RButtonLayer(window, parent)
{
super.ButtonLayer(window, parent);
focusable = false;
}

function finalize()
{
super.finalize(...);
}

function onClick()
{
super.onClick(...);
if(enabled)
parent.onButtonClick(this);
}
}

class SaveDataItemLayer extends KAGLayer
{
// 关于存档块
var num; // 存档号
var bgColor = 0xffbb0000; // 背景色 ( 0xAARRGGBB )
var focusedColor = 0xffffffff; // 鼠标点下正在活动状态的边沿,完全不透明的白色

function SaveDataItemLayer(window, parent, num) // 单个存档板块功能
{
super.KAGLayer(window, parent);

this.num = num;

setImageSize(135,140); // 窗口的Size
face = dfBoth;
fillRect(0, 0, imageWidth, imageHeight, bgColor);
setSizeToImageSize();

hitType = htMask;
hitThreshold = 0; // 把整个窗口作为点击对象

cursor = kag.cursorPointed; // 鼠标的形状
focusable = true; // 可以取得焦点,描绘选项的高亮框用

face = dfBoth;
// 序号的表示
var str = string (num + 1);
font.height = 12;
var ty = font.getTextHeight(str);
drawText(2, 102, "No."+str, 0x000000);

// 存档图像的读入,没有存档则描绘一黑色窗口,中为NO DATA
var tmplayer = new global.Layer(window, parent);
var tnname = kag.getBookMarkFileNameAtNum(num);
if(Storages.isExistentStorage(tnname))
{
tmplayer.loadImages(tnname);
}
else
{
tmplayer.setImageSize(133, 100);
tmplayer.fillRect(0, 0, imageWidth, imageHeight, 0x70000000);
var str = "NO DATA";
var tx = tmplayer.font.getTextWidth(str);
tmplayer.drawText((tmplayer.imageWidth - tx) \ 2, 40, str, 0xffffff);
}
copyRect(1, 1, tmplayer, 0, 0, tmplayer.imageWidth, tmplayer.imageHeight);
invalidate tmplayer;

// 存档的标签信息
font.height = 12;
var str = kag.bookMarkNames;
if(str == '') str = 'NO DATA';
drawText(5, 120, str, 0xffffff);

// 存档的日期信息
if(kag.bookMarkDates == '')
str = "----/--/-- --:--";
else
str = kag.bookMarkDates;
drawText(37, 102, str, 0xff0000);

}

function finalize()
{
super.finalize(...);
}

function saveToSystemVariable()
{
// 增添量的记录

}

function onPaint()
{
super.onPaint(...);
// 边框绘制
// update()之后,描画之前使用
face = dfBoth;
if(focused)
{
fillRect(0, 0, imageWidth, 2, focusedColor);
fillRect(0, 2, 2, imageHeight - 2, focusedColor);
fillRect(imageWidth - 2, 2, 2, imageHeight - 2, focusedColor);
fillRect(2, imageHeight - 2, imageWidth - 4, 2, focusedColor);
}
else
{
fillRect(0, 0, imageWidth, 2, bgColor);
fillRect(0, 2, 2, imageHeight - 2, bgColor);
fillRect(imageWidth - 2, 2, 2, imageHeight - 2, bgColor);
fillRect(2, imageHeight - 2, imageWidth - 4, 2, bgColor);
}
}

function onFocus()
{
// 取得焦点
super.onFocus(...);
update();
}

function onBlur()
{
// 擦去焦点
super.onBlur(...);
update();
}

function onHitTest(x, y, process)
{
if(process)
{
// 在这里使用右键的话跳过envent
if(System.getKeyState(VK_RBUTTON))
super.onHitTest(x, y, false);
else
super.onHitTest(x, y, true);
}
}

function onKeyDown(key, shift, process)
{
// 使用键盘按键的情况
if(process && key == VK_RETURN || key == VK_SPACE)
{
// 使用空格或者回车键
super.onKeyDown(key, shift, false);
saveToSystemVariable();
parent.onLoadOrSave(num);
}
else
{
// 其它按键不做处理
super.onKeyDown(...);
}
}

function onMouseDown(x, y, button, shift)
{
super.onMouseDown(...);
if(button == mbLeft)
{
focus();
saveToSystemVariable();
parent.onLoadOrSave(num);
}
}
}

class RClickConfigLayer extends Layer // 设定右键菜单画面
{
var closeButton; // 设置“关闭”按钮
var saveButton; // 设置“保存”按钮
var loadButton; // 设置“读取”按钮
var hideMessageButton; // 设置消除message画面
var saveDataItems;
var state = -1; // 0 = 主菜单?1 = 读取 2 = 保存画面,判断返回主菜单的位置并区分操作
var owner; // RClickConfigPlugin Object参考
var currentPage = 0; // 存取界面的当前页数
var returnButton; // 设置“返回”按钮
var pageButtons; // 存取页面的当前页数跳跃按钮

function RClickConfigLayer(win, par, owner)
{
super.Layer(win, par);
this.owner = owner;

// Layer状态初期化
setImageSize(800, 600);
clearBase();
setSizeToImageSize();
setPos(0, 0);
hitType = htMask;
hitThreshold = 0; // 全域不透過
}

function finalize() //初始化
{
clear();

invalidate closeButton if closeButton !== void;
invalidate saveButton if saveButton !== void;
invalidate loadButton if loadButton !== void;
invalidate hideMessageButton if hideMessageButton !== void;

invalidate returnButton if returnButton !== void;

super.finalize(...);
}

function clearBase()
{
// 底色,背景色
fillRect(0, 0, imageWidth, imageHeight, 0x50000000);
}


function makeMainMenu()
{
// 右键主菜单
if(state != 0)
{

clear();
state = 0;

/*
制成按钮
这里使用的是文字按钮、
使用图像按钮的话:
if(closeButton === void)
{
closeButton = new RButtonLayer(window, this);
closeButton.showFocusImage = true;
closeButton.loadImages("ボタン画像ファイル名");
closeButton.left = 270;
closeButton.top = 350;
closeButton.focusable = true;
}
这样表述。

这里指定的图像是普通按钮图像
横向3连图像或者4连图像
showFocusImage = true的时候使用4连图像(推荐)
*/

// 「关闭」按钮的描绘
if(closeButton === void)
{
closeButton = new RButtonLayer(window, this);
closeButton.width = 100;
closeButton.height = 25;
closeButton.caption = "close";
closeButton.captionColor = 0xffffff;
closeButton.left = 270;
closeButton.top = 350;
closeButton.focusable = true;
}
closeButton.visible = true;

// 「保存」按钮的描绘
if(saveButton === void)
{
saveButton = new RButtonLayer(window, this);
saveButton.width = 100;
saveButton.height = 25;
saveButton.caption = "save";
saveButton.captionColor = 0xffffff;
saveButton.left = 270;
saveButton.top = 100;
saveButton.focusable = true;
}
saveButton.enabled = kag.canStore();
saveButton.visible = true;

// 「读取」按钮的描绘
if(loadButton === void)
{
loadButton = new RButtonLayer(window, this);
loadButton.width = 100;
loadButton.height = 25;
loadButton.caption = "load";
loadButton.captionColor = 0xffffff;
loadButton.left = 270;
loadButton.top = 150;
loadButton.focusable = true;
}
loadButton.enabled = kag.canRestore();
loadButton.visible = true;

// 「消除message」按钮的描绘
if(hideMessageButton === void)
{
hideMessageButton = new RButtonLayer(window, this);
hideMessageButton.width = 100;
hideMessageButton.height = 25;
hideMessageButton.caption = "cl-message";
hideMessageButton.captionColor = 0xffffff;
hideMessageButton.left = 270;
hideMessageButton.top = 200;
hideMessageButton.focusable = true;
}
hideMessageButton.visible = true;
}
}

function clearSaveDataItems()
{
// 清除存取页面的存档块
if(saveDataItems !== void)
{
for(var i = 0; i < saveDataItems.count; i++)
{
saveDataItems.saveToSystemVariable();
invalidate saveDataItems;
}
saveDataItems = void;
kag.setBookMarkMenuCaptions();
}
}

function makeSaveDataItems() // 存档块的罗列,自增加变量i,u,当前页数currentPage
{
// 存档的表示
clearSaveDataItems();
saveDataItems = [];
for(var i = 0; i < 4; i++) // 纵列
{
for (var u = 0; u < 5; u++) // 横列
{
var obj = new SaveDataItemLayer(window, this, currentPage * 20 + i*5+u); // 总计所有页面的存档数字
saveDataItems = obj;
obj.setPos(140 * u + 100, 145 * i + 5); // 框的摆放+整体偏位
obj.visible = true;
}
}
}

function clearPageButtons()
{
// 清除页数按钮
if(pageButtons !== void)
{
for(var i = 0; i < pageButtons.count; i++)
{
invalidate pageButtons;
}
pageButtons = void;
}
}

function makePageButtons()
{
// 生成页数按钮
clearPageButtons();
pageButtons = [];
for(var i = 0; i < 5; i++)
{
var obj = new RButtonLayer(window, this);
pageButtons = obj;
obj.width = 80;
obj.height = 25;
obj.color = currentPage == i ? 0xff0000 : 0x000000;
obj.caption = " 存档 " + (i*20+1) + "~" + ((i+1)*20);
obj.captionColor = 0xffffff;
obj.top = i * 30 + 350;
obj.left = 10;
obj.focusable = true;
obj.enabled = currentPage != i;
obj.visible = true;
obj.tag = 'page';
obj.page = i;
}
}

function changePage(newpage)
{
// 换页功能
if(pageButtons !== void)
{
pageButtons.color = 0x000000;
pageButtons.enabled = true;
pageButtons.color = 0xff0000;
pageButtons.enabled = false;
currentPage = newpage;
makeSaveDataItems();
}
}

function makeReturnButton()
{
// “返回”按钮
if(returnButton === void)
{
returnButton = new RButtonLayer(window, this);
returnButton.width = 80;
returnButton.height = 25;
returnButton.caption = "返回";
returnButton.captionColor = 0xffffff;
returnButton.left = 10;
returnButton.top = 550;
returnButton.focusable = true;
}
returnButton.visible = true;
}

function makeLoadMenu()
{
// 「读取」菜单界面的描绘
if(state != 1)
{
clear();
state = 1;
makeSaveDataItems(currentPage);
makeReturnButton();
makePageButtons();
font.height = 24;
drawText(30, 30, "ロード", 0xffffff);
}
}

function makeSaveMenu()
{
// 「保存」菜单界面的描绘
if(state != 2)
{
clear();
state = 2;
makeSaveDataItems(currentPage);
makeReturnButton();
makePageButtons();
font.height = 24;
drawText(30, 30, "セーブ", 0xffffff);
}
}

function clear()
{
// 隐藏画面上的所有无效按钮,清场
clearBase();

closeButton.visible = false if closeButton !== void;
saveButton.visible = false if saveButton !== void;
loadButton.visible = false if loadButton !== void;
hideMessageButton.visible = false if hideMessageButton !== void;

returnButton.visible = false if returnButton !== void;

clearSaveDataItems();
clearPageButtons();
}

function saveToSystemVariable()
{
// 需要保存系统变量数据的时候
if(saveDataItems !== void)
{
for(var i = 0; i < saveDataItems.count; i++)
saveDataItems.saveToSystemVariable();
kag.setBookMarkMenuCaptions();
}
}

function onButtonClick(sender)
{
// 按下按钮
switch(sender)
{
case closeButton: // 关闭
owner.onConfigClose();
break;
case saveButton: // 保存
makeSaveMenu();
break;
case loadButton: // 读取
makeLoadMenu();
break;
case hideMessageButton: // 消除message
owner.closeConfig();
kag.process('', '*hidemessage');
break;
case returnButton: // 返回
makeMainMenu();
break;
default:
if(sender.tag == 'page')
{
// 页数
changePage(sender.page);
}
}
}

function onLoadOrSave(num)
{
// 读取或者是存档
if(state == 1)
{
// load
kag.loadBookMarkWithAsk(num);
}
else
{
// save
if(kag.saveBookMarkWithAsk(num))
{
clearSaveDataItems();
makeSaveDataItems(); // 刷新信息
}
}
}

function show()
{
// layer的表示
visible = true;
setMode();
focus();
}

function hide()
{
// layer的隐藏
removeMode();
visible = false;
clear();
state = -1;
}

function onKeyDown(key)
{
super.onKeyDown(...);
if(key == VK_ESCAPE)
owner.onConfigClose(); // ESC键按下的时候关掉主菜单
}

function onMouseDown(x, y, button, shift)
{
if(button == mbRight)
{
if(state == 0)
{
// 主菜单上右键按下则关掉主菜单
owner.onConfigClose();
}
else if(state == 1 || state == 2)
{
// 存取界面按下右键则返回主菜单
makeMainMenu();
}
}
}
}


class RClickConfigPlugin extends KAGPlugin // 右键设定插件集
{
var window;
var config;

function RClickConfigPlugin(window)
{
// RClickPlugin 构造函数
super.KAGPlugin(); // 呼叫superclass的构造函数
this.window = window; // 保留窗口参照数据
}

function finalize()
{
invalidate config if config !== void;
super.finalize(...);
}

function show()
{
// 表示
if(config === void)
config = new RClickConfigLayer(window, kag.fore.base, this);
config.parent = window.fore.base;
// 关联再设定
// (根据过渡变换表层和背景层)
config.makeMainMenu();
config.show();
}

function onConfigClose()
{
// 打开设定页
closeConfig();
window.trigger('config'); // 'config'触发器
}

function closeConfig()
{
// 关闭设定页
config.hide() if config !== void;
}

// 以下、KAGPlugin 的方法的override

function onStore(f, elm)
{
}

function onRestore(f, clear, elm)
{
// 读取的时候
closeConfig();
}

function onStableStateChanged(stable)
{
}

function onMessageHiddenStateChanged(hidden)
{
}

function onCopyLayer(toback)
{
}

function onExchangeForeBack()
{
}

function onSaveSystemVariables()
{
if(config !== void) config.saveToSystemVariable();
}
}


kag.addPlugin(global.rclickconfig_object = new RClickConfigPlugin(kag));


@endscript
@endif
; 右键的设定
@rclick call=true storage="rclick_tjs.ks" target="*rclick" enabled=true name="MENU(&S) ..." enabled=true
@return


*rclick
; 单击右键时呼叫此
@locksnapshot

*rclick_2
@eval exp="rclickconfig_object.show()"
; show メソッドを呼ぶ
@waittrig name="config"
; ↑ 等待'config' 触发器
@unlocksnapshot
@return

*hidemessage
; message消除的话呼叫此
@hidemessage
@jump storage="trac.ks"



*dsl






@trans method=crossfade time=1000

页: [1]
查看完整版本: 求助!引用右键菜单的读档功能时没有反应