[ 掲示板に戻る ]

過去ログ閲覧モード

配列をSLCTBOXのボタンに入れcallを起動させる方法 / タカハシ
ヘルプを見ると「UWSファイル名の割り当てに変数を使用する事はできません」とあります。
下記のコードはできないとは分かったのですが、CALLで配列に入れたモノを選択して起動させる良い方法はないでしょうか?

DIM path[2]
path[0] = "C:\Users\aruke\Desktop\UWS\エクセル出力新.uws"
path[1] = "C:\Users\aruke\Desktop\UWS\10サイト接続.uws"
path[2] = "C:\Users\aruke\Desktop\UWS\Excel配列.uws"
tes=SLCTBOX(SLCT_BTN OR SLCT_STR,0,"会社",path)
CALL tes

No.3107 2016/11/02(Wed) 13:30:49

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / stuncloud
callじゃなきゃいけない理由がないのであれば、execで

exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes + "<#DBL>")

No.3108 2016/11/02(Wed) 13:57:37

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / しゅん
stuncloudさんの方法がおすすめです。
DOSCMDを使っても良いかもしれません。
ただ、SELECTで分岐する、という手もあります。
http://d.hatena.ne.jp/junjun777/20161102/uwsc_call


DIM path[2]
path[0] = "test00.uws"
path[1] = "test01.uws"
path[2] = "test02.uws"
SELECT SLCTBOX(SLCT_BTN OR SLCT_STR,0,"会社",path)
CASE path[0]
  CALL "test00.uws"
CASE path[1]
  CALL "test01.uws"
CASE path[2]
  CALL "test02.uws"
SELEND

No.3110 2016/11/02(Wed) 17:50:41

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / タカハシ
stuncloud様、回答ありがとうございます。execでできたんですね、思いつきませんでした。
まだまだ私、修行が足りないようです。GET_UWSC_DIRのパスの意味は分かっているんですが、
UWSファイルをC:\Program Files (x86)\UWSCの中で管理した方が良いのでしょうか?私は、C:\Program Files (x86)\UWSCとはまったく違う所に、ファルダー作成してUWSファイルを置いています。

No.3111 2016/11/02(Wed) 21:29:03

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / タカハシ
しゅん様、回答ありがとうございます。SLCTBOXでやるとpath[0] = "test00.uws"、test00.uwsにSLCTBOXで表示させたい文字列を表示できるので選択する時に分かりやすいです。
http://d.hatena.ne.jp/junjun777/20161102/uwsc_call見させて頂きました。色々な方法でCALLの使い方が掲載されていてすごく勉強になります。こちらのブログブックマークしてちょこちょこ見させて頂きます。

No.3112 2016/11/02(Wed) 21:40:22

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / stuncloud
> UWSファイルをC:\Program Files (x86)\UWSCの中で管理した方が良いのでしょうか?
いいえ、UWSファイルはお好きなところへ置いてくださって大丈夫ですよ

> exec("<#DBL>" + GET_UWSC_DIR + "\uwsc.exe<#DBL> <#DBL>" + tes + "<#DBL>")
の引数の意味なんですが、変数を展開すると例えばこうなります

exec("<#DBL>C:\Program Files (x86)\uwsc.exe<#DBL> <#DBL>C:\Users\aruke\Desktop\UWS\エクセル出力新.uws<#DBL>")

execで動かすためにはまずuwsc.exeで動かすということを教えてやらないといけないため、最初にuwsc.exeのフルパスを渡します
そのためのGET_UWSC_DIRですね
そのあとUWSファイルのパスを記述しますが、これがuwsc.exeに対してどのスクリプトを実行しろという指示になっています
この後半部分でUWSファイルのフルパスを指定すればいいので、UWSファイルはどのフォルダに置いてあっても大丈夫というわけです

No.3114 2016/11/03(Thu) 15:06:03

Re: 配列をSLCTBOXのボタンに入れcallを起動させる方法 / タカハシ
stuncloud様、詳細な説明ありがとうございます。そのような使い方でexecを使えるなんて知らなかったです。無事そのスクリプトで使えました。また一つ勉強になりました、感謝致します。
No.3119 2016/11/04(Fri) 19:15:24
指定フォルダ内クリア / トロン
指定フォルダ内のデータを全て消したいと考えています。

ファイル指定だと正常に動くのですが
DOSCMD("del C:\あああ\AAA.html")

フォルダ指定だと動かないです。
DOSCMD("del C:\あああ\")

C:\あああ\の中身を全て消すにはどのようにすればいいでしょうか。※中にサブフォルダはありません。
ちなみにC:\あああ\のフォルダ自体は残したいと考えています。

No.3102 2016/10/31(Mon) 16:47:27

Re: 指定フォルダ内クリア / しき
//ワイルドカード文字を使います
DOSCMD("del /q C:\あああ\*.*")

//参考URL
>コマンドプロンプト del - [ファイルを削除する]
http://www.k-tanaka.net/cmd/del.php

No.3103 2016/10/31(Mon) 17:06:57

Re: 指定フォルダ内クリア / トロン
ありがとうございます!!
No.3105 2016/11/01(Tue) 19:39:33
UWSCでEXCELの複数シートを選択する方法 / Daichi
はじめまして。

タイトルの通りですが、UWSCでExcelの複数シートを選択する方法をご教示いただけませんでしょうか。

実現したいことは、Excelで任意のシートを複数選択し、PDFエクスポートしたいです。
XLACTIVATE関数 or EXCELCOMオブジェクトを利用する方法どちらでも構いません。

VBAでは下記コードで複数シートの選択を実現できますが、
UWSCに移植すると"変数:SHEET_NAME 次元数が合いません"と表示されます。

アドバイスいただけると幸いです。
よろしくお願いいたします。

[VBA]
Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
[UWSC]
Dim SHEET_NAME[2] = "Sheet1", "Sheet2", "Sheet3"
Excel.Worksheets(SHEET_NAME).Select
//Excel.Worrkseets.Select //全シート選択時に利用
//*ExcelオブジェクトはCREATEOLEOBJ("Excel.Application")で生成済


【環境】
Windows7Pro x64
UWSC Ver5.0.3.0

No.3098 2016/10/30(Sun) 22:49:13

Re: UWSCでEXCELの複数シートを選択する方法 / Daichi
自己解決しました。

.SelectのReplaceオプションを利用するとできました。
Excel.WorkSheets("Sheet1").select(replace:=false)

お騒がせしました。

No.3099 2016/10/30(Sun) 23:11:13

Re: UWSCでEXCELの複数シートを選択する方法 / しき
//引数がVBArray(SafeArray)になるようにすればよい
Dim SHEET_NAME[2] = "Sheet1", "Sheet2", "Sheet3"
Excel.Worksheets(slice(SHEET_NAME)).Select()

No.3101 2016/10/31(Mon) 13:15:50
ソフトをタスクバーからアクティブにする方法 / Japanzer
//win10Home バージョン1607
//UWSC ver.5.230

//ペイントを最小化している状態で下記のスクリプトを実行しましたが、ペイントはアクティブになりません。確か以前はこれでアクティブになったと記憶しています。
//msgboxは1が返ってくるのでクリック自体はできていると思うのですが…

msgbox(CLKITEM(GETID("ペイント"), "ペイント", CLK_SHORT))

//ctrlwin(GETID("ペイント"), show)でアクティブにできますが、この方法は使いたくありません。
//実はペイントではなく別のソフトをタスクバーからアクティブにするのが狙いなのですが、そのソフトにはctrlwin()が効かないので。

//なにか、他にタスクバーからアクティブになるような方法はありませんでしょうか。

No.3086 2016/10/29(Sat) 19:44:01

Re: ソフトをタスクバーからアクティブにする方法 / 俄プログラマー
ACW(GETID("ペイント"),0,0)

これでは左上にウインドウが移動してしまうので
事前にSTATUSを使って座標を覚えておくと良いでしょう。

No.3087 2016/10/29(Sat) 20:12:52

Re: ソフトをタスクバーからアクティブにする方法 / Japanzer
ご教授ありがとうございました。
こんな方法は思いもよりませんでした。

No.3089 2016/10/29(Sat) 22:58:30

Re: ソフトをタスクバーからアクティブにする方法 / MM
ACW(GETID("ペイント"))
ではどうですか

No.3094 2016/10/30(Sun) 11:08:23

Re: ソフトをタスクバーからアクティブにする方法 / Japanzer
ACW(GETID("ペイント"))だと、元の位置に表示されますね。
どうもありがとうございました。

No.3095 2016/10/30(Sun) 11:21:24

Re: ソフトをタスクバーからアクティブにする方法 / 俄プログラマー
ACW(GETID("ペイント"))
だとこちらの環境では最小化のままなんですよ。
Japanzerさんが動けば問題ないので良いのですが。
win10Pro 1607
UWSC 5.230

No.3097 2016/10/30(Sun) 20:14:37
UWSCのOSごとによるバグについて / ゆぐゆぐ
WIN7で作ったuwsファイルをWIN8やWIN10のPCで使うと必ず座標のズレが発生するのですが、UWSC有償版でEXE化したものであれば別OSでも正常に稼動するものでしょうか?
No.3076 2016/10/27(Thu) 16:37:09

Re: UWSCのOSごとによるバグについて / 俄プログラマー
EXE化しても同じだと思われます。
気になるのなら試用版でお試しください。

そして質問の具体性に欠けます。
何がどんな時にずれるのかが書かれていない事には
これ以上の回答は得られないでしょう。

No.3077 2016/10/27(Thu) 18:05:55

Re: UWSCのOSごとによるバグについて / しゅん
一応、補足です。
UWSCは最新版でしょうか?
最新版にすると、直っているものもあるかもしれません。

No.3078 2016/10/28(Fri) 08:58:54

Re: UWSCのOSごとによるバグについて / ゆぐゆぐ
例えばなんですが
BTN(LEFT,CLICK,273,31,219)
ってだけでも座標が検討違いの位置をクリックするんですよね。
(WIN10での機体ごとでバラバラの座標をクリックするわけではなく、見当違いの同じ位置をクリックする)

ちなみに試用版も試したけどやはりダメでした。

No.3079 2016/10/28(Fri) 16:07:57

Re: UWSCのOSごとによるバグについて / stuncloud
Windows 10の設定でシステム-ディスプレイにある「テキスト、アプリ、その他の項目のサイズを変更する」が100%以外になってるとか?

画面の拡大率(という呼び方でいいのかな?)は過去に色々対応されてた気がしますけどぜんぜん詳細把握してなくて実際はどうなのかわかりませんけど

No.3080 2016/10/28(Fri) 17:04:09

Re: UWSCのOSごとによるバグについて / MM
検証スクリプトを貼る必要があると思われます
(現象が再現する限りにおいて出来るだけ最短に編集したもの)

No.3093 2016/10/30(Sun) 10:58:14
スクリプト自身のパス / satocha
スクリプト自身のパスを取得するにはどうしたらいいのでしょうか。

標準的なやり方が分からず、これまで、Get_Cur_DirとGet_UWSC_Nameの合成で代用していました。
ところが、スクリプトをwine環境で動かす必要があり調べたところ、Get_Cur_Dirがスクリプトのあるフォルダではなく、スクリプトを起動した時のフォルダを指してしまうためうまくいきません。

例えばルートフォルダでUWSCを起動すると、スクリプトの場所にかかわらず、Get_Cur_DirはZ:\になります。

変数名からいうと、こちらのほうが本来の動きなのかもしれませんが、スクリプトのパス取得には使えません。

スクリプト自身のパスを取得する標準的な手法を知っている方はご教示ください。

UWSC ver 5.2.3
os=Linux localhost.localdomain 4.7.9-200.fc24.x86_64 #1 SMP Thu Oct 20 14:26:16 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
wine ver =wine-1.9.20 (Staging)

No.3081 2016/10/29(Sat) 03:53:31

Re: スクリプト自身のパス / satocha
補足です
wineでの実行については、uwsc.exeを直接起動するのではなく、下のスクリプトを経由することで、所期の目的を果たせています。
ただ、2971以下のスレッドのような手順でカレントディレクトリは動いてしまうため、Get_Cur_Dir
ではないスクリプトパスの取得方法を知りたいので質問しました。

uwsh.sh

#!/bin/sh
scriptpath=$1
cd "${scriptpath%/*}"
wine /home/satoocha/'VirtualBox VMs'/share/uwsc523/UWSC.exe "$1"

No.3083 2016/10/29(Sat) 13:08:28

Re: スクリプト自身のパス / stuncloud
少なくともUWSCの特殊変数ではないです
> Get_Cur_DirとGet_UWSC_Nameの合成で代用していました。
とするのが常套手段です

スクリプトの実行者はスクリプトがどこにあるかわかっているはずなので、そのパスをスクリプトに渡してPARAM_STR[]で取得するというのが最も単純な手かとは思います
苦肉の策すぎますかね

あとは status(getid(GET_THISUWSC_WIN), ST_PROCESS) で自身のPIDが取得出来ますので、自身のプロセス実行時のコマンドラインからuwsc.exeに渡されたパスが取得できるのではないかと思います
wineで実行してるとなるとそのあたりどうなってるのかわからないのでできる保証はないですけど

ま、そもそもの話ですがサポートされた動作環境ではない以上出来ないことがあってもある程度は諦めるということも必要ですよね

No.3084 2016/10/29(Sat) 14:46:49

Re: スクリプト自身のパス / satocha
stuncloudさま

>status(getid(GET_THISUWSC_WIN), ST_PROCESS) で自身のPIDが取得出来ます
大きなヒントありがとうございます。おかげで、
pid=status(getid(GET_THISUWSC_WIN), ST_PROCESS)
CommandLine=powershell( "gwmi win32_process|?{$_.ProcessId -eq "+pid+"}|%{$_.CommandLine}" )
exepath=Get_Uwsc_Dir+"\uwsc.exe "
scriptpath=replace(CommandLine,exepath,"")
とやることで、スクリプトパスが得られました。これなら、途中でカレントディレクトリが変更されてもOKです。
問題はwine環境にpowershellをインストールできていないことです。
wineから動かすときは先述のシェルスクリプトを使うことにします。

No.3085 2016/10/29(Sat) 15:38:11

Re: スクリプト自身のパス / stuncloud
WMIならPowerShell()関数を使う必要もないですよ

pid = status(getid(GET_THISUWSC_WIN), ST_PROCESS)

with createoleobj("WbemScripting.SWbemLocator")
 with .ConnectServer
  q = .ExecQuery("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + pid)
  getoleitem(q)
  msgbox(ALL_OLE_ITEM[0].CommandLine)
 endwith
endwith

No.3088 2016/10/29(Sat) 22:41:00

Re: スクリプト自身のパス / satocha
stuncloudさま

ありがとうございました
下の方法で、wineでもwindowsでもカレントディレクトリとは無関係にスクリプトのパスが得られました。
pid = status(getid(GET_THISUWSC_WIN), ST_PROCESS)
commandline=""
with createoleobj("WbemScripting.SWbemLocator")
 with .ConnectServer
  q = .ExecQuery("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + pid)
  getoleitem(q)
  commandline=ALL_OLE_ITEM[0].CommandLine
 endwith
endwith

exepath=Get_Uwsc_Dir+"\uwsc.exe "
//wineではCommandLineがなぜか二重引用符付きで出力されるので外しておく
CommandLine=replace(CommandLine,"<#dbl>","")
scriptpath=replace(CommandLine,exepath,"")

No.3090 2016/10/30(Sun) 06:29:54
CLKITEM リストボックスの複数選択できない / あああ
初めまして。早速ですが質問させていただきます。

clkitem 関数において、リストボックスから複数選択をしたいと考えています。
ヘルプには
※ リストボックス: 複数選択の場合は タブにて アイテム名を繋げる
とありますので試してみましたが正常に処理されません。

選択したいアイテムを list_000 と list_001 とします。

clkitem(id, "list_000", CLK_LEFTCLK and CLK_LIST, True, 0)
-->list_000 が選択される。戻値 True

clkitem(id, "list_000 list_000", CLK_LEFTCLK and CLK_LIST, True, 0)
-->タブでつなぐ。選択されない。戻値 False

clkitem(id, "list_000" "list_000", CLK_LEFTCLK and CLK_LIST, True, 0)
-->実行不可:式がおかしい or 型が合ってない

以上のような状況です。どなたか意見をお持ちの方、よろしくお願いします。

uwsc 5.2.3
windows 7 64bit
制御対象ウィンドウ:64bitアプリケーション

No.3064 2016/10/26(Wed) 15:09:12

Re: CLKITEM リストボックスの複数選択できない / stuncloud
"list_000<#TAB>list_001"
ではどうですか

No.3065 2016/10/26(Wed) 16:15:59

Re: CLKITEM リストボックスの複数選択できない / stuncloud
あと、追加オプションを繋げるときは and じゃなくて or です
ちなみに CLK_LEFTCLK and CLK_LIST だと 0 になるので EMPTY 指定と同じになります(多分)
ついでに CLK_LEFTCLK or CLK_LIST だとうまくいかないようなので CLK_LIST だけにしましょう

No.3066 2016/10/26(Wed) 16:31:54

Re: CLKITEM リストボックスの複数選択できない / あああ
stuncloud 様

ご返信ありがとうございます!

種別指定が意図したものと全然違っていたのですね。
ただ、種別を CLK_LIST のみにし、
clkitem(id, "list_000", CLK_LIST)
としたところ list_000 の選択もできなくなることがわかりました。

そこで
clkitem(id, "list_000", CLK_LISTVIEW)
にすると指定が可能でしたので、私がリストボックスだと思っていたものが実はリストビューだった、ということなのでしょうか。

getitem(id, ITM_LIST, 2, 0, FALSE)
で当該リストを取得できていたので種別 CLK_LIST での clkitem ができるものと思い込んでいたのですが...

No.3070 2016/10/26(Wed) 22:00:25

Re: CLKITEM リストボックスの複数選択できない / stuncloud
> clkitem(id, "list_000", CLK_LISTVIEW)
> にすると指定が可能でしたので、私がリストボックスだと思っていたものが実はリストビューだった、ということなのでしょうか。

そうなのかもしれませんね
現物がないとこちらでは試せませんので、色々試行錯誤していただくしかないと思います
TAB区切りがだめそうなら kbd(VK_CTRL, DOWN) した状態でひとつひとつクリックしていくとか? (Ctrl+クリックの再現

> getitem(id, ITM_LIST, 2, 0, FALSE)
> で当該リストを取得できていたので種別 CLK_LIST での clkitem ができるものと思い込んでいたのですが...

この点は不思議ですね…?

ちなみにこちらでは slctbox(SLCT_LST, (略)) で出て来るリストボックスに対してTAB区切りがうまくいくことを確認しました

No.3074 2016/10/27(Thu) 13:52:53

Re: CLKITEM リストボックスの複数選択できない(解決) / あああ
stuncloud 様

検証ありがとうございます。
こちらでも slctbox によるリストと html によるリストで検証してみたところ複数選択ができました。
どうやら制御対象の問題だったようです、お騒がせいたしました。
拙いもので恥ずかしいですが、一応以下に検証時のコードを載せておきます。

listMultipleSelect.uws

// リストボックスのあるウィンドウにマウスオーバーすると、要素 000 と 001 が選択される
// Esc キーでスクリプト終了
thread checkMultipleSelect()
sleep(1)
slctbox(SLCT_LST, -1, "msg", "000", "001", "002")

procedure checkMultipleSelect()
i = 0
while !(GETKEYSTATE(VK_ESC))
id = getid(GET_FROMPOINT_WIN)
print "second: " + i + " :" + id
print clkitem(id, "000 001", CLK_LIST)
// print clkitem(id, "000<#TAB>001", CLK_LIST) でもよい
sleep(1)
i = i + 1
wend
fend


list.html

<FORM>
<select name="example" size=6 multiple>
<option value="000">000</option>
<option value="001">001</option>
<option value="002">002</option>
<option value="003">003</option>
<option value="004">004</option>
<option value="005">005</option>
</select>
</FORM>

list.html で作ったリストの選択は firefox,IE ではうまくいきましたが google chrome ではダメでした。
もうよくわかりませんね、別の方法を探すことにします。

ありがとうございました!

No.3075 2016/10/27(Thu) 15:39:48
式の中で「 \ 」で、ディレクトリ下を参照させたい / きよ
いつも勉強させて頂いております。
・・・・\temp\abc.bmp を変数で指定したいのですが、\を入れると以降が文字列になってしまいます。
実際はimgは、INIかCSVから読み込みたいので、xxxx.UWSの中で「temp\abc.bmp」を作り出したいと思います。

img = "abc.bmp"
file = "temp\" + img ←\を入れた途端にそれ以降が文字列になってしまいます

xxxx.UWSの中で、 temp\abc.bmp ← これを作り出したいと思っています。

IFB "temp\" + img THEN でも
IFB CHKIMG("temp\" + img ) でも、「\」を入れると以降文字列になってしまいます。

「\」を式の中に入れるにはどのようにしたら良いのでしょうか?
宜しくお願い致します。

No.3057 2016/10/24(Mon) 22:09:24

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / しろまさ
"abc.bmp" ← 文字列
img    ← 文字列を代入した変数
"temp\"  ← 文字列
"temp\" + img ← 文字列の結合
file    ← 結合した文字列を代入した変数

最初から文字列ですよ?

> IFB "temp\" + img THEN でも

この書き方は間違い。何をしたいのか解りません。
Ifは 0がFALSE それ以外がTRUEを取るのでTRUEになってるだけ。

> IFB CHKIMG("temp\" + img ) でも、「\」を入れると以降文字列になってしまいます。

画像名かパスを入れる欄なので文字列が入ってで正しいです。

>「\」を式の中に入れるにはどのようにしたら良いのでしょうか?

文字列として結合すれば良いだけですが、いまひとつ何を求めているのかが解りません。

No.3058 2016/10/25(Tue) 08:45:53

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / しろまさ
上記記事編集パスワード間違えたので追記で修正書込み。

> IFB "temp\" + img THEN
こちらの環境だと SyntaxErrorになりますねこれ。

ファイルの存在確認をしたいのなら以下です。
  IFB FOpen("temp\" + img, F_EXISTS) THEN

No.3059 2016/10/25(Tue) 08:51:26

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / しゅん
これ、単にエディタの表示がそうなっているだけ、というオチではないですよね、、、。
万一そうなら、気にしなければ良いだけですが、、、まさかね。

↓「バグなのでしょうか?」
バグではありません。私のような人間には大切な機能です。
ただ、UWSCのスクリプトを書くには適さないモードだっただけです。

No.3060 2016/10/25(Tue) 09:11:27

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / きよ
しゅん様
しろまさ様

有り難うございます。
しゅん様の・・・「まさか」で、UDebug.exeで試したら、その「まさか」でした。
おそまつな「オチ」に引っかかっていました。
サクラエディタを信用しすぎていました...バグなのでしょうか?

どうもすみません、有り難うございました。

No.3061 2016/10/25(Tue) 10:25:56

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / しろまさ
ぐはっ そこでしたか。。

サクラエディタ

設定 ⇒ タイプ別設定

エスケープ の
C言語風 から PL/SQL風 に変えると治りますよ。

昔書いたtips
http://siromasa.html.xdomain.jp/uwsc/u_term/31_SakuraEdita.html

No.3062 2016/10/25(Tue) 12:03:59

Re: 式の中で「 \ 」で、ディレクトリ下を参照させたい / きよ
しろまさ様

有り難うございます。
早速PL/SQL風にしましたら、なおりました。
サポートセンターみたいなレス有り難うございます。

No.3063 2016/10/25(Tue) 17:13:42
SETHOTKEYを利用した複数のプログラム / mogutan
いつもお世話になっております。"SETHOTKEY"を利用し"ESC"キーを押すと終了処理を行うプログラムをEXE化し、複数起動した場合2個目以降のプログラムでは思うように終了してくれません。これは仕様又は使い方の間違いでしょうか?宜しくお願い致します。
(Windows10Pro x64 UWSC Pro V5.2.2以降)
例↓

SETHOTKEY(VK_ESC,,"終了処理")

WHILE TRUE
  // ----- 処理1
WEND

PROCEDURE 終了処理()
 // ----- その他の処理
EXITEXIT
FEND

No.3046 2016/10/16(Sun) 10:44:12

Re: SETHOTKEYを利用した複数のプログラム / miles
SETHOTKEYの戻値を見てください。
1個目は成功、2個目以降は失敗していると思います。
多分、同じキーコードの重複設定はできないのでしょう。

No.3047 2016/10/16(Sun) 17:12:23

Re: SETHOTKEYを利用した複数のプログラム / mogutan
おっしゃる通り1つ目は"True"、2つ目以降は"False"が返って来ます。誰かがUWSCで組んだプログラムがたまたま動作していて、知らないで偶然にも同じキーを使用したプログラムを実行した場合はうまく動かない事が有るが、それは仕様なので仕方が無いと言う事なのですね。ご教示ありがとう御座いました。
No.3056 2016/10/19(Wed) 08:55:06
CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / タカハシ
CLASSENDCLASSでPROCEDUREした関数が呼び出しがうまくいきません。[tesuto.UWS]を起動すると下記のようなエラーが表示されます。[tesuto.UWS]のCOMMONPROC.data(tmp)を入力したりもしたのですがうまくいきません。何が間違っているのでしょうか?

[エラーコード]
COMMONPROC.data引数の数が合いません
4行目:COMMONPROC.data()


[共通化.UWS]
CLASS COMMONPROC

PROCEDURE data(tmp)
Excel = XLOPEN("C:\Users\aruke\Dropbox\abc.xlsx",True)
tes = XLGETDATA( Excel, "a1:a30")
tmp=SLCTBOX(SLCT_BTN OR SLCT_STR,0,"会社一覧",tes)
fend

ENDCLASS


[tesuto.UWS]
// 共通クラスの呼び出し
CALL 共通化.UWS

COMMONPROC.data()

No.3049 2016/10/18(Tue) 09:06:21

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / しろまさ
tmp を参照引数にしたいなら
PROCEDURE data(var tmp)

実行側も変数を渡す必要あり。
Dim vTmp
COMMONPROC.data(vTmp)
msgbox(vTmp)

でもFunctionにして結果を受け取ったほうが楽な気がしますが。

ちなみにエラーは引数指定してるのに引数を与えないから出ています。
省略可能にしたい場合はこんな感じで。
PROCEDURE data(tmp = "")

Help(uwsc.chm)を読みましょう。

No.3050 2016/10/18(Tue) 09:30:16

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / タカハシ
しろまさ様、回答ありがとうございます。
PROCEDUREは、教えて頂いた通りにした所、期待通りの結果が得られました。
PROCEDUREとFUNCTIONの違いについて検索やHelp(uwsc.chm)で調べてはみたのですが、手続き型と関数の違いという事やresultが返すかどうかという事はわかりました。実際に自分でコードを書いてみてもいまいちPROCEDUREとFUNCTIONの違いが自分の中で使い分けができません。

>でもFunctionにして結果を受け取ったほうが楽な気がしますが。
楽になるとは、tesuto.UWSのコードのdimの宣言が必要なくなるという事でしょうか?
Functionにして結果を受け取るとは、下記のようなコードにするという事でしょうか?
質問ばかりで申し訳ございません。

Function data(var tmp)
Excel = XLOPEN("C:\Users\aruke\Dropbox\2-キーワードエクセル\エージェント会社\経理エージェント会社一覧.xlsx",True)
tes = XLGETDATA( Excel, "a1:a30")
tmp=SLCTBOX(SLCT_BTN OR SLCT_STR,0,"エージェント会社",tes)
result =tmp
fend

No.3051 2016/10/18(Tue) 11:23:04

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / しろまさ
// 関数側
Function data()
Excel = XLOPEN("C:\Users\aruke\Dropbox\2-キーワードエクセル\エージェント会社\経理エージェント会社一覧.xlsx",True)
tes = XLGETDATA( Excel, "a1:a30")
result =SLCTBOX(SLCT_BTN OR SLCT_STR,0,"エージェント会社",tes)
fend

// 実行側
Dim res = COMMONPROC.data()

戻りが2つ以上のときに参照引数を使うようにしてます。
例えばresultはboolを返して戻りは参照として
Ifb COMMONPROC.data(vTmp)
 ・・・
などを多用してます。見やすくコードを減らしたいので^^

No.3052 2016/10/18(Tue) 11:32:23

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / しろまさ
// resultを使った(適当な)例

dt1 = "平成28年9月29日"
dt2 = "2016/55/44"
msgbox( "例えばこのfmt関数は(" + dt1 + ")を変換すると(" + fmt(dt1) + ")が取り出せますが、<#CR>" _
+ "有り得ない日付(" + dt2 + ")を指定するとエラーが返るので、元の日付(" + fmt(dt2) + ")を返しています。")

Function fmt(dt, fm = "yyyy/MM/dd")
  Result = PowerShell("return [Datetime]::Parse(<#DBL>" + dt + "<#DBL>).ToString(<#DBL>" + fm + "<#DBL>)")
  If Pos("例外が発生", Result) > 0 Then Result = dt Else Result = Trim(Result)
FEnd

// Powershell関数が遅い場合はこちらを読んでね。
// http://siromasa.html.xdomain.jp/uwsc/u_term/PowerShell.html

No.3053 2016/10/18(Tue) 12:35:22

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / タカハシ
しろまさ様、何度も返信ありがとうございます。Functionのresultを使ってそのような事ができたんですね。まったく知りませんでした。教えて頂いたコードで無事できました。


>戻りが2つ以上のときに参照引数を使うようにしてます。
例えばresultはboolを返して戻りは参照として
Ifb COMMONPROC.data(vTmp)

上記の意味が今の自分のレベルでは分かりません。戻りが2つ以上のときに参照引数を使うとは、下記のコードだとExcelとtesとresultという認識で宜しいのでしょうか?

// 関数側
Function data()
Excel = XLOPEN("C:\Users\aruke\Dropbox\2-キーワードエクセル\エージェント会社\経理エージェント会社一覧.xlsx",True)
tes = XLGETDATA( Excel, "a1:a30")
result =SLCTBOX(SLCT_BTN OR SLCT_STR,0,"エージェント会社",tes)
fend

>例えばresultはboolを返して戻りは参照として
boolの意味が分からなかったので調べたのですが、bool型は論理型とも呼ばれ、そのとり得る値としてtrueとfalseしかないと検索で分かりました。

No.3054 2016/10/18(Tue) 12:47:59

Re: CLASSENDCLASSでPROCEDUREした関数が呼び出しについて / タカハシ
しろまさ様、下記のコード起動させて頂きました。今の自分では理解が完全にはできていないですが、じっくりコードを読ませて頂き勉強させて頂きます。Functionを使った引数の条件分岐を操れるようになるとUWSCでできる事が拡がりそうで楽しみです。ありがとうございました。

// resultを使った(適当な)例

dt1 = "平成28年9月29日"
dt2 = "2016/55/44"
msgbox( "例えばこのfmt関数は(" + dt1 + ")を変換すると(" + fmt(dt1) + ")が取り出せますが、<#CR>" _
+ "有り得ない日付(" + dt2 + ")を指定するとエラーが返るので、元の日付(" + fmt(dt2) + ")を返しています。")

Function fmt(dt, fm = "yyyy/MM/dd")
  Result = PowerShell("return [Datetime]::Parse(<#DBL>" + dt + "<#DBL>).ToString(<#DBL>" + fm + "<#DBL>)")
  If Pos("例外が発生", Result) > 0 Then Result = dt Else Result = Trim(Result)
FEnd

No.3055 2016/10/18(Tue) 13:02:17
全1170件 [ ページ : << 1 ... 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 ... 117 >> ]