Indexへ
(35)//【9】→(15)
------------------------
【タイトル】外部変形の表示位置のスレッド
【記事番号】 9 (*)
【 日時 】07/09/04 15:01
【 発言者 】ひでと

最近の話題ですが、興味のある話題です。
後でよく見させていただこうと思っておりましたが、
残念ながら 見ることができなくなりました。
要約でもいいのですが、内容をもう一度教えていただけないでしょうか?


Indexへ
(9)←【15】→(19)
------------------------
【タイトル】Re(1):外部変形の表示位置のスレッド
【記事番号】 15 (9)
【 日時 】07/09/04 23:22
【 発言者 】you-masa

発言者のyou-masaです。私も内容を確認したかったのですが(お礼も兼ねて)、見れなくなってしまってますね。残念です、、、


Indexへ
(15)←【19】→(21)
------------------------
【タイトル】Re(2):外部変形の表示位置のスレッド
【記事番号】 19 (15)
【 日時 】07/09/06 15:19
【 発言者 】田吾作

今までの発言のキャッシュです。

元丼屋店長
外部変形単体の機能としては、今は無理のようです。
ただし、これを可能にしている外部変形も実在しまして、
タールさんの Solid_SUM などは、まさに御希望のオペレーションを
実現されています。
原理的にはちょっと複雑だと思うんですが、まず VB をお使いとの
ことですので、バッチファイルの start /w **.exe をやめて、
バッチファイルの方に VBプログラムの終了を待たずに制御が
戻るようにする。 座標ファイル名をなんらかの方法で設定する。
(すいません、ここはちょっと分からないです。多分、レジストリ
操作かな?)
SendKey で、JWW に対して座標ファイルの読込をさせる。
と、作図内容がカーソルに追随する形になります。
ただし、VB 側の処理が極端に時間がかかるようだと、ユーザーに
対して待ちの不安を抱かせてしまう原因ともなりますので、
処理速度に違和感を感じないような工夫が必要かもしれません。


sugiです。みなさん、こんにちは。
外部変形でも図形を仮表示しながら貼り付けることができるのです
ね。知りませんでした。
元丼屋店長 さん wrote:
> 外部変形単体の機能としては、今は無理のようです。
> ただし、これを可能にしている外部変形も実在しまして、
> タールさんの Solid_SUM などは、まさに御希望のオペレーションを
> 実現されています。
自分でも Solid_SUM のように座標ファイルを利用して図形の貼り
付けをしてみようと思ったのですが、
> SendKey で、JWW に対して座標ファイルの読込をさせる。
というところで行き詰まってしまいました。
「その他」(ALT+A)-「座標ファイル」(F)までは問題ないのですが、
その後の「ファイル読込」は割り当ててあるキーが無くて、どうし
たものかと。;-(
Solid_SUM は VisualBasic 6 で作られているそうなのですが、ター
ルさんはどうされているのでしょう?
別解としてひとつ思いついたのがクリップボード経由の貼り付けで
す。「編集」(ALT+E)-貼り付け(P)なら SendKey で問題無さそうで
す。
VisualBasicでJwwのデータを有効利用できないかをテーマに研究さ
れているHiroCom777さんが、クリップボードアクセスのモジュール
を作成し、公開されています。
http://www.h7.dion.ne.jp/~hirocom/VBdeJW/
私は VisualBasic は分からないのですが、これを利用すればひょっ
として外部変形で作成した図形をクリップボード経由で貼り付ける、
なんてことができるのでしょうか? > HiroCom777さん
HiroCom777さんのホームページには VisualBasic のソースリスト
が多数公開されているので、一度覗かれてはいかがでしょうか。
> you-masaさん
--
sugi
sugiです。皆さん、こんにちは。
ruby による試作品です。
レジストリから座標ファイルのパスを読み込んで、図形の情報を書
き込み。座標ファイルのコマンドを起動するところまでを作ってみ
ました。ファイル読込はユーザーまかせです。^^;
=== 座標ファイル.BAT (ここから) ===
@rem 座標ファイル
@echo off
REM #jw
REM #cd
REM #goto %1
REM #hm【座標ファイル】 |丸|四角|
REM #hc【座標ファイル】メニューを選択して下さい。
REM #:1
REM #:2
REM #e
:1
:2
copy jwc_temp.txt jwc_temp.bak
start ruby -Ks -x %~f0 %1
exit

#! ruby -Ks

require 'win32ole'
require 'vr/vruby'
$stderr=open("error.log","w")
$stdout=open("jwc_temp.txt","w")
wsh = WIN32OLE.new('WScript.Shell')
zfile='HKEY_CURRENT_USER\Software\Jw_cad\jw_win\Folder\ZFILE'
ztemp = wsh.RegRead zfile
open(ztemp+"ZTEMP.txt","w"){|f|
 if ARGV.include?("1") # 丸
  f.puts "ci 0 0 10"
 else          # 四角
  ["0 0 20 0","20 0 20 20",
   "20 20 0 20","0 20 0 0"].each{|e| f.puts e}
 end}
shell = WIN32OLE.new("WScript.Shell")
if shell.AppActivate("jw_win")
 sleep(0.1)
 shell.Sendkeys("%AF")
end
#puts "h# 座標ファイルを出力しました"
=== 座標ファイル.BAT (ここまで) ===

元丼屋店長
sugiさん、こんにちは。
私もちょっと試してみたところ、現行バージョンでは確かに座標ファイルの
読込モードに入らないようですね。 以前は、即読込モードに入っていたように
記憶しているので、Jww の仕様変更というところでしょうか?
ワンクリックなら充分実用的だと思います。
個人的には、ファイル処理に時間がかかる場合のために、キー送信の部分のみを
分離して、メイン処理の部分は start /w で実行したい感じです。


Indexへ
(19)←【21】→(24)
------------------------
【タイトル】Re(3):外部変形の表示位置のスレッド
【記事番号】 21 (19)
【 日時 】07/09/06 16:00
【 発言者 】ひでと

ありがとうございました。
相談室の挙動がおかしいようなので、ファイルに保存させていただきました。
早く直ってほしいものです。
大事に勉強させていただきます。わざわざありがとうございました。


Indexへ
(21)←【24】→(36)
------------------------
【タイトル】Re(4):外部変形の表示位置のスレッド
【記事番号】 24 (21)
【 日時 】07/09/06 17:43
【 発言者 】田吾作

>「その他」(ALT+A)-「座標ファイル」(F)までは問題ないのですが、
その後の「ファイル読込」は割り当ててあるキーが無くて、どうし
たものかと。;-(

「ファイル読込」はボタンを直接クリックしなくても、作図ウィンドウ内
であればどこを左クリックしてもOKなので、単純に左クリック信号を送れば
良いのでは。


Indexへ
(24)←【36】→(37)
------------------------
【タイトル】Re(5):外部変形の表示位置のスレッド
【記事番号】 36 (24)
【 日時 】07/09/07 23:36
【 発言者 】sugi

sugiです。みなさん、こんにちは。

田吾作さん wrote:
> 「ファイル読込」はボタンを直接クリックしなくても、作図ウィ
> ンドウ内であればどこを左クリックしてもOKなので、単純に左
> クリック信号を送れば良いのでは。

本当ですね。これならなんとかなりできそうです。

Win32API の知識があればさくっと書けるのでしょうが、この辺は
あまり分かっていないため、いろいろ調べながら試行錯誤してみま
した。その結果、先のスクリプトの末尾に次のように追加してみる
と一応は動作してくれました。

=== 座標ファイル.BAT (末尾追加分ここから) ===
## 左クリックを送る
require "Win32API"
me = Win32API.new("user32", "mouse_event", ['L'] * 5, 'V')
me.call(2,0,0,0,0)
me.call(4,0,0,0,0)
=== 座標ファイル.BAT (末尾追加分ここまで) ===

ただ、
・何故かDOS窓で隠れた部分の再描画がされなくて、一部の図形
が消えた状態になる。(画面を移動させればOK)
・mouse_eventは古い関数であまり推奨されていない。
ということで、できれば SendMessage を使って処理したいです。

=== SendMessage 実験その1 (末尾追加分ここから) ===
## 試しにウィンドウを閉じてみる
## 実行前にデータを保存しておいて下さい
require "Win32API"
hwnd=Win32API.new("user32","GetForegroundWindow",[],"L").call
sm= Win32API.new("user32", "SendMessage", ['L'] * 4, 'L')
sm.call( hwnd, WMsg::WM_CLOSE, 0,0)
=== SendMessage 実験その1 (末尾追加分ここまで) ===

これだと意図した通りウィンドウを閉じてくれたのですが、肝心の
左クリックを送る動作がうまくいきません。

=== SendMessage 実験その2 (末尾追加分ここから) ===
## 左クリックを送る
## lParam=0
require "Win32API"
hwnd=Win32API.new("user32","GetForegroundWindow",[],"L").call
sm= Win32API.new("user32", "SendMessage", ['L'] * 4, 'L')
sm.call( hwnd, WMsg::WM_LBUTTONDOWN, 0,0)
sm.call( hwnd, WMsg::WM_LBUTTONUP, 0,0)
=== SendMessage 実験その2 (末尾追加分ここまで) ===

=== SendMessage 実験その3 (末尾追加分ここから) ===
## 左クリックを送る
## lParam にカーソルの座標を設定
require "Win32API"
hwnd=Win32API.new("user32","GetForegroundWindow",[],"L").call
lpPoint = " " * 8
Win32API.new("user32", "GetCursorPos", ['P'], 'V').Call(lpPoint)
#p lpPoint.unpack("LL") #カーソル座標
hwnd = Win32API.new("user32","GetForegroundWindow",[],"L").call
sm= Win32API.new("user32", "SendMessage",['L','L','L','P'],'L')
sm.call( hwnd, WMsg::WM_LBUTTONDOWN, 0,lpPoint)
sm.call( hwnd, WMsg::WM_LBUTTONUP, 0,lpPoint)
=== SendMessage 実験その3 (末尾追加分ここまで) ===

などを試してみましたが、うまく動作しませんでした。

もう少しというところまできてるような気がするのですが、
どなたかアドバイスをお願いします。

# 実はまるきりトンチンカンなことをしてたりして。^^;;

--
sugi


Indexへ
(36)←【37】→(38)
------------------------
【タイトル】Re(6):外部変形の表示位置のスレッド
【記事番号】 37 (36)
【 日時 】07/09/08 01:33
【 発言者 】タール
【 リンク 】http://www8.atwiki.jp/tarl/



▼sugiさん:
こんばんは ご無沙汰してます。

たぶん作図領域にLクリックを送られようとしてると思うのですが、
そしたら 作図領域のhwndを取得しないとだめなような気がします。
FindWindowExで子窓ののhwndを取得していますw。

ちなみにぼくは 「ファイル読込」ボタンをクリックするように
メッセージを送ってます。
そっちが楽だったような記憶があります。
めちゃめちゃうる覚えですが、、


Indexへ
(37)←【38】//(11)
------------------------
【タイトル】Re(7):外部変形の表示位置のスレッド
【記事番号】 38 (37)
【 日時 】07/09/08 08:42
【 発言者 】sugi

sugiです。タールさん、こんにちは。

目の前に Solid_SUMという答えがありながら、どう処理してるのか
分からなくて、もどかしく感じてました。

タールさん wrote:
> たぶん作図領域にLクリックを送られようとしてると思うのですが、
> そしたら 作図領域のhwndを取得しないとだめなような気がします。
> FindWindowExで子窓ののhwndを取得していますw。

なるほど。ウィンドウを閉じる場合はトップレベルのウィンドウに
信号を送れば良いですが、クリック動作は送りたい場所を指定しな
いといけないのですね。

> ちなみにぼくは 「ファイル読込」ボタンをクリックするように
> メッセージを送ってます。
> そっちが楽だったような記憶があります。
> めちゃめちゃうる覚えですが、、

あら、やはりボタンを捕まえてクリックしていたんですね。すごろ
くで「振り出しに戻る」に止まった気分です。^^;

今回の場合、特にエラーも返ってこないのでどこがおかしいのか分
からなかったのですが、おかげで進むべき方向が見えてきました。
FindWindowEx あたりをちゃんと調べてみます。

アドバイス、ありがとうございました。

--
sugi