0

虽然我不是为 mIRC 编程,但我对使用对话框很陌生,因为我以前没有用过它们,而且我的客户也不需要使用它们,因此直到现在,我以前还没有深入研究过它们。

alias ss {
  dialog -dm setup setup
}
dialog setup {

  ; === Window ===
  title "Script Setup"
  size -1 -1 420 335
  button "OK",1,145 307 73 21, OK
  button "Cancel",2,226 307 73 21
  button "Help",3,307 307 73 21
  ; ==============

  box "Personal Preferences",4, 3 3 493 293
  combo 5,128 60 185 210,sort
  button "Add",6, 323 83 73 21
  button "Edit",7, 323 112 73 21
  button "Delete",8, 323 141 73 21
  button "Reset List",9, 323 170 73 21
}
alias -l update.setup {
  did -r setup 5
  set %temp.total $count(%setup.list,$chr(44))
  set %temp.count 0
  :start
  inc %temp.count 1
  did -a setup 5 $gettok(%setup.list,%temp.count,44)
  if (%temp.count < %temp.total) { goto start }
}
on *:DIALOG:setup:edit:*: {
  if ($did == 5) {
    set %setup.temp.channel $did(5).text
  }
}

on *:DIALOG:setup:sclick:*: {
  ; ====== Channel List Btn's ======
  ; === Add ===
  if ($did == 6) {
    set %setup.list %setup.list $+ %setup.temp.channel $+ ,
    update.setup
  }
  ; === Edit ===
  if ($did == 7) {
  }
  ; === Delete ===
  if ($did == 8) {
    set -u3 %setup.tc %setup.channel.selected $+ ,
    set %setup.list $remove(%setup.list,%setup.tc)
    update.setup
  }
  ; === Reset ===
  if ($did == 9) {
    unset %setup.list
    update.setup
  }
}

我正在尝试制作一个与添加新服务器的选项窗口功能相同的对话框,但是这是添加一个新频道,而我实际上希望在上面的版本中没有文本输入,而是另一个单击添加或编辑时打开对话框。

以上只是一个额外的问题,可以节省我在这里设置另一个问题的时间,但是我目前的问题是在单击删除频道时,没有频道删除,而是当前列表合并。

感谢您提供任何帮助和/或建议,并提供任何时间来跟进我的问题。

最好的问候,蒂姆

4

1 回答 1

1

您的脚本有几个主要问题。

A. 您没有在对话框初始化时显示列表。
解决方案:

on *:dialog:setup:init:*: update.setup

B. 当你得到“确定”、“取消”按钮时,确保你给了它们相关的命令:

button "Cancel",2,226 307 73 21, cancel

C.为以下所有命令添加/删除/编辑命令 我纯粹使用“令牌标识符”,因此我可以最大限度地使用 mIRC 内置函数。(有关更多信息,请在 mIRC /help 令牌标识符中写入) 1. 添加测试条目是否已在我们的列表中。这种保护有助于我们避免列表中出现相同的频道,并帮助我们更好地使用删除令牌。2. “删除”命令使用“$remtok”标识符。3. 使用“$input”标识符进行简单优雅的条目编辑。当前的编辑不是很好的编程习惯+会导致一些错误。* 在每个命令之后,我都放置了“update.setup”,因此它会在每次列表更改时“刷新”我们的列表。

D.适当的条件

使用“if..elseif..else”逻辑,不要使用“if..if..if”方法。

E. /ss 别名

Change alias logic, now it will create new dialog or if dialog is already open it will maximize and display it.

奖励:调整了“update.setup”别名

完整代码

alias ss {
  dialog $iif($dialog(setup), -ve, -dmv) setup setup
}

dialog setup {

  ; === Window ===
  title "Script Setup"
  size -1 -1 420 335
  button "OK",1,145 307 73 21, OK
  button "Cancel",2,226 307 73 21, cancel
  button "Help",3,307 307 73 21
  ; ==============

  box "Personal Preferences",4, 3 3 493 293
  combo 5,128 60 185 210,sort
  button "Add",6, 323 83 73 21
  button "Edit",7, 323 112 73 21
  button "Delete",8, 323 141 73 21
  button "Reset List",9, 323 170 73 21
}

alias -l update.setup {
  did -r setup 5
  var %i = 1, %n = $numtok(%setup.list, 44)
  while (%i <= %n) {
    did -a setup 5 $gettok(%setup.list, %i, 44)
    inc %i
  }
}

on *:dialog:setup:init:*: update.setup

; ====== Channel List Btn's ======
on *:DIALOG:setup:sclick:*: {
  ; === Add ===
  if ($did == 6) {
    if (!$istok(%setup.list,$did(5),44)) {
      set %setup.list $addtok(%setup.list, $did(5), 44)
      update.setup
    }
  }
  ; === Edit ===
  elseif ($did == 7) {
    var %temp.editChannel = $did(5)
    if ($input(Channel to be edited., ye, Channel Editing, %temp.editChannel)) {
      set %setup.list $reptok(%setup.list, %temp.editChannel, $v1, 1, 44)
      update.setup
      dialog -ev setup
    }
  }
  ; === Delete ===
  elseif ($did == 8) {
    set %setup.list $remtok(%setup.list, $did(5), 1, 44)
    update.setup
  }
  ; === Reset ===
  elseif ($did == 9) {
    unset %setup.list
    update.setup
  }
}
于 2013-04-29T23:45:19.553 回答