web-dev-qa-db-ja.com

AHK(AutoHotKey)文字列と変数を連結します

Autocadにコマンドを送信するためのこのコードがあります。それはOKです。

{
GetAcad() ;Creates global variable ACAD where Application Object is stored
CADdoc:= ACAD.activedocument
Layer:= "0"
CADdoc.SendCommand("_-LAYER _SET " %Layer% " `n`n") ;;Uses COM 
CADdoc.SendCommand("_CHPROP _LA " %Layer% " `n`n")  ;;Uses COM
sleep, 50
send, {Escape}
sleep, 50
send, {Escape}
return
}

Layerパラメーターを使用して関数を作成しようとしました

ACADChangeLayer("Layer_Name") ;This is how is the function called

ACADChangeLayer(Layer)
{
  GetAcad()
  global ACAD   ;because I global variable has given value outside this function
  ACAD.activedocument.SendCommand("_-LAYER _SET " %Layer% " `n`n")
  ACAD.activedocument.SendCommand("_CHPROP _LA " %Layer% " `n`n")
  sleep, 50
  send, {Escape}
  sleep, 50
  send, {Escape}
}

期待どおりに動作しない、理由を理解してみました...

ACADChangeLayer(Layer)
  {
    GetAcad()
    global ACAD
    msgbox, % acad.activedocument.name
    msgbox, %Layer%
    CommandSetActiveLayer:= ("_-LAYER _SET " %Layer% " `n`n")
    msgbox, %CommandSetActiveLayer%
    ...
  }
  1. 最初のMsgBoxは適切なDocumentName(drawing1.dwg

  2. 2番目のMsgBoxuは、適切なLayerName(Layer_Name-上記の2番目のコードブロックを参照)

  3. 3番目のMsgBoxは、変数の前の部分のみを表示します("_-LAYER _SET "なぜですか?

アドバイスありがとうございます。

enter image description here

1
Lluser

問題は、次のいずれかとして記述する必要がある割り当て行です。

CommandSetActiveLayer := "_-LAYER _SET " . Layer . "`n`n"
CommandSetActiveLayer := ("_-LAYER _SET " . Layer . "`n`n")

CommandSetActiveLayer = "_-LAYER _SET " %Layer% `n`n

最初の2行は、連結演算子(dot .)、2行目は従来の方法を使用しています。

参照: 変数と式

1
harrymc