オブジェクトを水平に追加するこんにちは、
JMP 9からデジタル写真のフォルダを閲覧できるように、小さな画像ビューアを作成し、以下のスクリプトを組み込みました。問題は、ツール使用中に画像が表示されるリストボックスとグラフボックスの相対的な位置関係を維持したいことです。現状では、リストから画像を選択して最初の画像を置き換えると、新しいグラフボックスはリストの下に追加されてしまいます。しかし、本来はリストの右側に配置した位置と同じ位置に表示させたいのです。この動作の理由は分かっています。「<< append」プロパティによって、新しいグラフが垂直方向に追加されるからです。問題は、スクリプトをどのように修正すれば水平方向に追加できるかということです。
// プログラムの開始;
ログをクリア();
フォトフォルダ= 「C:\マイフォト\カメラカード1\102_FUJI\」;
画像リスト= ディレクトリ内のファイル(写真フォルダ); // すべてのファイルは JPEG なので、フィルタリングする必要はありません。
Expr_Create_Image= 式(
ImageName = PhotoFolder || ImageList [画像番号] ;
ギガバイト= グラフボックス(
フレームサイズ(410, 308 ),
Xスケール( 0, 100 ),
そしてスケール( 0, 100 ),
<<背景色( {0.7, 0.7, 0.7} ),
<<画像を追加(開ける(画像名),境界(左( 5 ), 右( 95 ),トップ(95 ),底(5 ) ) )
);
// 軸は表示したくないので削除します。
gb [軸ボックス(2 )] <<消去;
gb [軸ボックス(1 )] <<消去;
);
式置換チャート= 式(
nw [オーナーボックス(1 )] <<消去; // ウィンドウから古いものを削除します。
北西<<追加( gb ); // 新しいものを追加します。
);
ポンド= リストボックス(
画像リスト,
画像番号=(ポンド<<選択したインデックスを取得する)[1];
評価(Expr_Create_Image ); // 新しいグラフ ボックスを作成します。
評価(グラフの置換; // 古いグラフを新しいグラフに置き換えます。
,
最大選択数(1 )
);
画像番号= 1; // 最初は最初のものを表示します。
評価(Expr_Create_Image ); // チャートを作成します。
ポンド<<選択セット(画像番号, 1 ); // リストの最初の要素を事前に選択します。
北西= 新しいウィンドウ( 「新しいウィンドウ」, H リストボックス(ポンド,英ポンド) ); // ウィンドウを表示します。
// プログラムの終了;
もっと一般的に言えば、私が今行っているように、表示ウィンドウを部分的に分解して再構築する必要がなく、元のグラフを新しいグラフに置き換えるだけで済む方法はありますか? 明らかな解決策は、グラフボックス内の最初の画像をリストボックスから選択した新しい画像に置き換えることですが、どうやらそれができないようです。同じグラフボックスで「<< 画像を追加」プロパティをもう一度使用してもうまくいかないようです。そのため、私は毎回新しいグラフボックスを作成しています。
ご提案があればよろしくお願いします。
Re: オブジェクトを水平方向に追加するこれは素晴らしいですね。現在開発中の汎用グラフィックファイルブラウザアプリケーションに上記の内容を組み込んだところです。おそらく変更するのは、(410×308) アスペクト比を、入力された任意の寸法を反映するように一般化することだけです。というのも、私が見ている画像には、JMP グラフボックスからエクスポートされた出力が含まれる可能性があり、それらは原理的には任意のサイズになり得るからです。上記の内容をファイル交換に提出してみませんか?ここには、ピクチャボックスの使用、出力ウィンドウ内のコンポーネントの交換、および使用に関する実用的な例があります。これは重要なことであり、潜在的な用途は数多く想像できる。
改めて、本当にありがとうございました!
オブジェクトを水平方向に追加するこれは楽しかったです。アプリが肥大化するリスクを承知の上で、現在の画像を回転・拡大縮小できるボタンを追加したバージョンも投稿します。Altキーを押すと機能が反転します。
画像リスト= ディレクトリ内のファイル( PhotoFolder = ディレクトリを選択() ) ;
画像番号= 1 ;
Expr_pb = 表現 ( pb = パネルボックス ( , ピクチャーボックス ( img ) ) ) ;
Expr_Create_Image = 表現(
ImageName = PhotoFolder || ImageList [ ImageNumber ] ;
img = 開ける ( ImageName , jpg ) ;
img_size = img << getsize ;
if ( img_size [ 1 ] > img_size [ 2 ] ,
img << set size ( { 410 , 308 } ) 、
img << set size ( { 308 , 410 } )
);
表現pb ;
);
Expr_replace_image = presentation (
nw[パネルボックス( 1 )] << delete;
hlb << append ( pb ) ;
);
rotate =ボタンボックス( "回転 " 、
( Alt キー()の場合、
img << rotate ( - 90 ) 、
img << rotate ( 90 )
);
表現pb ;
式置換画像;
);
ズーム= ボタンボックス( 「ズーム」 、
( Alt キー()の場合、
img << set size ( 評価リスト ( {( img << get size )[ 1 ] / 1.5 , ( img << get size )[ 2 ] / 1.5 } ) ) ,
img << set size( 評価リスト( {(img << get size)[1] * 1.5, (img << get size)[2] * 1.5} ) )
);
表現pb ;
式置換画像;
);
rotate << set tip ( "右に90°回転、Altキーを押しながら左に90°回転" ) ;
ズーム<<ヒントを設定( "押すとサイズが大きくなり、Alt キーを押しながら操作すると小さくなります" ) ;
lb = リストボックス(
画像リスト、
ImageNumber = ( lb <<選択されたインデックスを取得)[ 1 ] ;
Expr_Create_Image ;
Expr_replace_image ;,
最大選択数( 1 )
);
Expr_Create_Image ;
nw = 新しいウィンドウ ( "テスト" , hlb = H リストボックス ( Vリストボックス ( lb , rotate , zoom ) , pb ) ) ;
Re: オブジェクトを水平方向に追加する完璧です!まさに私が求めていたもので、しかも手順も簡略化されました。本当にありがとうございます!
Re: オブジェクトを水平に追加するこれは画像を使用した例(元のアイデアの修正)です<
画像リスト= ディレクトリ内のファイル( PhotoFolder = ディレクトリを選択() ) ;
画像番号= 1 ;
Expr_Create_Image =式(
ImageName = PhotoFolder || ImageList [画像番号] ;
img = 開ける ( ImageName , jpg ) ;
img_size = img << getsize ;
もし( img_size [ 1 ] > img_size [ 2 ] ,
img <<サイズを設定( { 410 , 308 } ) 、
画像<<サイズを設定( { 308 , 410 } )
);
pb =画像ボックス( img ) ;
bb =パネルボックス( , pb ) ;
);
Expr_replace_image =式(
nw[パネルボックス( 1 )] << delete;
hlb << append ( bb ) ;
);
ポンド= リストボックス(
イメージリスト、
ImageNumber = ( lb <<選択されたインデックスを取得)[ 1 ] ;
評価( Expr_Create_Image ) ;
評価( Expr_replace_image );,
最大選択数( 1 )
);
評価( Expr_Create_Image );
nw =新しいウィンドウ( "test " 、 hlb = H リスト ボックス( lb 、 bb ) ) ;
オブジェクトを水平に追加する素晴らしいですね!ありがとうございます!(実際、もっと便利にするには、各画像が読み込まれた際にそのサイズを判別する手段が必要です。もしそれができれば、現状のように縦向きで撮影された写真が横向きに圧縮されてしまうのではなく、常に正しいアスペクト比で各チャートを作成できるようになります。すぐにそれを実現する方法が思いつきませんが、不可能というわけではありません。もしどなたかその方法をご存知の方がいらっしゃいましたら、教えていただけませんか?)
改めて感謝申し上げます。
デビッド
オブジェクトを水平に追加する素敵な小さなアプリケーションですね!問題の一般化(GBを置き換えるのではなく変更する)については調べていませんが、水平レイアウトを維持するように少し変更を加えました。以下のスクリプトでは、変更された行のみを示しています。
...
Expr_Replace_Chart =式(
nw [オーナーボックス( 1 )] <<削除; // ウィンドウから古いものを削除します。
hlb << append ( gb ) ; // 新しいものをHリストボックスに追加する
);
...
試す ( 評価 ( Expr_Create_Image )) ; // チャートを作成します。 // 初回のエラーメッセージを回避するために、これを try で囲みました。
...
北西= 新しいウィンドウ( "新しいウィンドウ" 、 hlb = H リストボックス(ポンド 、 gb ) ) ; // ウィンドウを表示し、Hリストボックスに参照を与える
...