HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0923
Area39画像のサムネイル表示について20未解決


Area39

リンク

2025/9/23(Tue) 20:55:34|NO.104023

すみません、質問よろしくお願い致します。下記URLについてですが、古い投稿のせいか、返信が
出来ないようでしたので、新たに立てさせて頂きました。

https://hsp.tv/play/pforum.php?mode=pastwch&num=33550

上記URLのNO.33586にて投稿されている、スクリプトですが、全画面がスクロールする構造となって
しまいます。下に、ボタンなどを作って操作できるようにしたいです。
但し、そのボタンなどの部分は動かないようにしたいと考えて居ます。
そのように改造することは可能でしょうか?

以下が考えたスクリプトです。



chdir "E:\\**************" // ←bmpファイルがあるディレクトリを指定してください

↑この部分を環境に合わせて設定してください


-200/**/
↑このあたりが私が修正した部分です。200ピクセルだけスクロールしない部分を作りたいと思ってこのように書きました。


// 2006/11/6(Ver 0.98β1 右クリックメニュー、ウィンドウ初期化に対応) #module "scrlbar" //----------------------- #uselib "user32" #func global GetWindowLongA "GetWindowLongA" int, int #func global SetWindowLongA "SetWindowLongA" int, int, int #func global ShowScrollBar "ShowScrollBar" int, int, int #func global SetScrollInfo "SetScrollInfo" int, int, var, int #func global SetScrollPos "SetScrollPos" int, int, int, int #func global SetWindowPos "SetWindowPos" int, int, int, int, int, int, int #cfunc global GetParent "GetParent" int #cfunc global GetSystemMetrics "GetSystemMetrics" int #cfunc global WindowFromPoint "WindowFromPoint" int, int #func global ScreenToClient "ScreenToClient" int, var #func global GetWindowRect "GetWindowRect" int, var #cfunc global FindWindowEx "FindWindowExA" int, int, int, int #func global RedrawWindow "RedrawWindow" int, int, int, int //----------------------- #define ctype GetScrollBarSize(%1)GetSystemMetrics(2+%1) // スクロールバーサイズの取得関数: 水平(0)/垂直(1) #deffunc groll2 int x, int y // オブジェクトも移動するgroll命令 dim r, 4 ;(モジュール内ScrollBar命令で使用しています) v= ginfo_vx, ginfo_vy : groll x, y repeat hobj= FindWindowEx(hwnd, hobj, 0, 0) if hobj= 0 : break GetWindowRect hobj, r ; オブジェクトのスクリーン座標取得 ScreenToClient hwnd, r ; クライアント座標に変換 SetWindowPos hobj, 0, r+v-ginfo_vx, r.1+v.1-ginfo_vy, 0, 0, $115 ;RedrawWindow hobj, 0, 0, $401 loop return #deffunc ScrollBar // 水平 垂直スクロールバーを使えるようにする oncmd gosub *WMSIZE, 5 oncmd gosub *SCROLL, $114 oncmd gosub *SCROLL, $115 oncmd gosub *WHEEL, $20A oncmd gosub *WHEEL, $20E si= 28, 31, 0,0,0,0,0 // SCROLLINFO構造体 hscsize= GetScrollBarSize(0) // スクロールバーのサイズを取得 vscsize= GetScrollBarSize(1) dup xx,wx.ginfo_sel : dup yy,wy.ginfo_sel if (wx.ginfo_sel=ginfo_sizex)|(wx.ginfo_sel=0) : hscsize=0 if (wy.ginfo_sel=ginfo_sizey)|(wy.ginfo_sel=0) : vscsize=0 wx.ginfo_sel= ginfo_sizex+ginfo_sx-ginfo_winx-vscsize wy.ginfo_sel= ginfo_sizey+ginfo_sy-ginfo_winy-hscsize ShowScrollBar hwnd, 0, 0 : ShowScrollBar hwnd, 1, 0 GetWindowLongA hwnd,-16 : SetWindowLongA hwnd,-16,stat|$300000 ;( WS_VSCROLL|WS_HSCROLL|WS_SIZEBOX SetWindowPos hWnd, 0, 0, 0, 0, 0, $37 ; screen 0 , bgscr用 ) return *WMSIZE //ウィンドウサイズが変更された時の処理 sel= ginfo_sel: gsel ginfo_intid repeat 2 si.3= ginfo(26+cnt), ginfo(12+cnt), ginfo(8+cnt) SetScrollInfo hwnd, cnt, si, 1 loop groll2 ginfo_vx, ginfo_vy mref bm, 67 : bm.20= ginfo_winx, ginfo_winy hHide= wx.ginfo_intid= ginfo_sizex ; gsel selを確実に実行させるため vHide= wy.ginfo_intid= ginfo_sizey wnd= hwnd : gsel sel ; 何故かスクロールバーが描画されない環境があるため↓ if hHide= 1: ShowScrollBar wnd, 0, 0 :else: SetWindowPos wnd, 0, 0, 0, 0, 0, $37 if vHide= 1: ShowScrollBar wnd, 1, 0 :else: SetWindowPos wnd, 0, 0, 0, 0, 0, $37 return 1 *WHEEL sel= ginfo_sel : gsel ginfo_intid m= iparam= $20A : flag= 0 nPos= ginfo(8+m)-(wparam>>18) : goto *@f ;18で30ドット移動 19で15 *SCROLL //スクロールバー操作時の処理 if flag= 0 {flag= 1 : m= iparam= $115 sel= ginfo_sel : gsel ginfo_intid : nPos= ginfo(8+m) } Code= wParam &$FFFF : if Code= 8 : flag= 0 : gsel sel : return repeat 1 if Code= 5 : nPos= wParam>>16&$FFFF : break ; SB_THUMBTRACK if Code= 0 : nPos- 14 : break ; SB_LINEUP if Code= 1 : nPos+ 14 : break ; SB_LINEDOWN if Code= 2 : nPos-ginfo(12+m) : break ; SB_PAGEUP if Code= 3 : nPos+ginfo(12+m) : break ; SB_PAGEDOWN if Code= 4 : break ; SB_THUMBPOSITION if Code= 6 : nPos= 0 : break ; SB_TOP if Code= 7 : nPos= ginfo(26+m) : break ; SB_BOTTOM loop *@ SetScrollPos hwnd, m, nPos, 1 if m : groll2 ginfo_vx, nPos : :else: groll2 nPos, ginfo_vy if flag= 0 : gsel sel return #global ;----------------------- onexit gosub *owari onclick goto *picture_print sdim file, 64 sdim filelist, 64; chdir "E:\\**************" // ←bmpファイルがあるディレクトリを指定してください dirlist filelist, "*.bmp", 0; // フォルダ内のBMPファイルリスト作成 notesel filelist; filenum = noteinfo( 0 ); // ファイル数を調べる lpx = 50; // サムネイル表示位置 lpy = 50; size = 100; // サムネイルサイズ dst = 50; // サムネイル表示間隔 snw = 5; // サムネイル最大表示列数 snh = ( filenum + snw - 1 ) / snw//5; // ファイル数から行数を算出 bsy = dst * ( snh + 1 ) + size * snh-200/**/; // サムネイル領域の高さ(余白含む) bsx = 800; // 幅 // サムネイルウィンドウを初期化 if( bsy < 600 ) { screen 0, bsx, 600+200/**/, 0; } else { screen 0, bsx, bsy+200/**/, 0; } title "サムネイル作成中..."; width 800, 600; // 表示サイズ設定 ScrollBar; // スクロールバー付加 width 800, 600+200/**/; // 表示サイズ設定 // 画像読み込み用バッファ作成 buffer 2, , , 0; // サムネイル作成 scnt = 0; // サムネイルを作った回数を計測 repeat snh slpy = lpy + ( size + dst ) * cnt; // Y座標計算 slpx = lpx; // X座標 repeat snw gsel 2; noteget file, scnt; // ファイル名取得 picload file; sx = ginfo_sx; // 画像サイズ取得 sy = ginfo_sy; gsel 0,1; title ""+rnd(256) // サムネイルの外枠 color 128, 128, 128; boxf slpx - 1, slpy - 1, slpx + size, slpy + size; color 255, 255, 255; boxf slpx, slpy, slpx + size - 1, slpy + size - 1; // 縦横比固定でサムネイル作成 if( sx > sy ) { ssy = size * sy / sx; pos slpx, slpy + ( size - ssy ) / 2; gzoom size, ssy, 2, 0, 0, sx, sy; } else { ssx = size * sx / sy; pos slpx + ( size - ssx ) / 2, slpy; gzoom ssx, size, 2, 0, 0, sx, sy; } slpx += size + dst; // X座標更新 scnt++; if( scnt == filenum ) { // 全ファイルのサムネイルが完成したらループから抜ける break; } loop loop // タイトル変更 title "サムネイルウィンドウ"; pos 000,600 button gosub "aaa",*search stop // クリックしたとき *picture_print if( ginfo_act == 0 ) { // サムネイルウィンドウをクリックした場合 // サムネイル範囲内にマウスがあるか確認 if( lpx < mousex && mousex < (bsx - dst) && lpy < mousey && mousey < (bsy - dst) ) { scl_py = ginfo_vy; // スクロールバーの位置記録 // マウスと重なってる可能性のあるサムネイルを算出 ppx = ( mousex - lpx ) / ( size + dst ); ppy = ( mousey + scl_py - lpy ) / ( size + dst ); // サムネイル表示位置計算から流用 slpx = lpx + ( size + dst ) * ppx; slpy = lpy + ( size + dst ) * ppy; // 可能性のあるサムネイルの範囲内と重なっているか判定 if( slpx <= mousex && mousex <= (slpx + size) && slpy <= (mousey + scl_py) && (mousey + scl_py) <= (slpy + size) ) { gsel 2; // サムネイルの画像読み込み noteget file, ppy * 5 + ppx; picload file; // 画像サイズ取得 sx = ginfo_sx; sy = ginfo_sy; // 画像表示ウィンドウ初期化 screen 1, 800, 600, 0; title "画像表示ウィンドウ" // 画像表示 pos 0, 0; gzoom 800, 600, 2, 0, 0, sx, sy; gsel 0; // 2回目以降のクリックに反応しないことがあるので描画先をサムネイルウィンドウに戻す } } } stop; *search // 検索 return *owari if iparam|wparam=0:end wait 20:gsel wparam, -1:gsel 0:return



この記事に返信する


記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.104023への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2025(c) All rights reserved.