全然更新しないブログ
HSPメモ帳
ウィンドウサイズの変更(HSP)
◆一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング
◆HSPプログラミングメモ
※HSPはウィンドウの移動、サイズ変更中は処理が
止まってしまうので移動中のオブジェクトの変更などはできません。
このページはHSP勉強中のメモです
不具合が起こらない様に配慮はしていますが
各ソースの使用は各自の責任においてご利用お願いします
◆HSPプログラミングメモ
- ●screen 0 のウィンドウサイズ変更可能にする その1
- #include "llmod.as"
「dllproc」命令を使用する為、「llmod.as」をインクルードする。
- screen 0,dispx,dispy,0,10,20
width 300,400
上記のように、ウィンドウを作成する。
dispx,dispyはシステム変数でディスプレイの横、縦サイズです。
それぞれがウィンドウの最大サイズとなります。
10,20は、ウィンドウの横、縦位置です。
300,400は、ウィンドウの横、縦幅です。
- 「GetWindowLongA」で現在のウィンドウスタイル
GWL_STYLE(-16)を取得します。
その結果にサイズ変更可能な、WS_THICKFRAME(0x40000)、
WS_MAXIMIZEBOX(0x10000)を足して「SetWindowLongA」で変更します。
サイズ変更可能ウィンドウのサンプル #include "llmod.as" screen 0,dispx,dispy,0,10,20 width 300,400 mref bmscr,67 prm = bmscr.13 , -16 dllproc "GetWindowLongA", prm, 2, D_USER prm = bmscr.13 , -16 , dllret | 0x40000 | 0x10000 dllproc "SetWindowLongA", prm, 3, D_USER stop
- #include "llmod.as"
※HSPはウィンドウの移動、サイズ変更中は処理が
止まってしまうので移動中のオブジェクトの変更などはできません。
- ●screen 0 のウィンドウサイズ変更可能にする その2
- その1と同様にウィンドウを作成する。
- 「mousex」「mousey」「ginfo」で値を調べて
「width」でウィンドウサイズを変更する。
ウィンドウサイズが300×400の場合、
クライアントエリアは横0~299、縦0~399です。
mousex,mouseyの値を見てみると横300以上、縦400以上
になるときがあります。その時、枠にマウスがあることが
わかります。また、左の枠に合わせるとmousexが65535に
なります。それを利用して作ってみました。
試しに作ってみましたが、マウスカーソルがそのままだったり
いまいちです。
サイズ変更可能ウィンドウのサンプル screen 0,dispx,dispy,0,10,20 width 300,400 *main stick st,256,1 if st=256{ mw=0 if mousex>=winx : mw=1 if mousey>=winy : mw=2 if mousex=65535 : mw=3 if (mousex>=(winx-16)) & (mousey>=(winy-16)) : mw=4 if mw!=0{ ginfo 0 : mx=prmx : my=prmy repeat stick st,256,1 if st!=256 : break ginfo 0 : mwx=prmx : mwy=prmy if (mwx!=mx) | (mwy!=my){ if mw=1 : width winx+(mwx-mx) if mw=2 : width ,winy+(mwy-my) if mw=3 { ginfo 2 width winx-(mwx-mx),,prmx+(mwx-mx) } if mw=4 : width winx+(mwx-mx),winy+(mwy-my) mx=mwx : my=mwy } wait 1 loop } } title "[mousex="+mousex+" mousey="+mousey+"]" wait 10 goto *main
- その1と同様にウィンドウを作成する。
- ★文字検索ソフト作成記録
◆変更点
- ウィンドウサイズ変更可能にしました。
*mainループでウィンドウサイズが変わったときに
オブジェクトのサイズ大きさを変更しています。
また、前回の screen 0,dispx,dispy,0,,,160,340
の部分を変更しました。
- ウィンドウサイズ変更可能にしました。
- ☆実行画面
- ☆ソースコード
- 青の部分は追加したコード、赤の部分は変更したコードです。
ソフト名 未定 HSP Ver 2.61 内容 任意のテキストを検索 btnimg.JPG
(60×20)ソース #include "llmod.as" #include "misc.as" buffer 2 : picload "btnimg.JPG" //dispx:ディスプレイ横幅(システム変数) //dispy:ディスプレイ縦幅(システム変数) //前回の方法では表示がおかしかったので訂正 screen 0,dispx,dispy width 160,340 title "テスト" mref bmscr,67 prm = bmscr.13 , -16 dllproc "GetWindowLongA", prm, 2, D_USER prm = bmscr.13 , -16 , dllret | 0x40000 | 0x10000 dllproc "SetWindowLongA", prm, 3, D_USER wndx=winx : wndy=winy objsize 20,20 pos 0,0 : button "開",*fileopen //ID:0 btnimg 0,2,0,0,20,20 pos 20,0 : button "選",*textselect //ID:1 btnimg 1,2,20,0,20,20 sdim ftext,64 : pos 40,0 : input ftext,100,20,64 //ID:2 pos 140,0 : button "調",*find //ID:3 btnimg 3,2,40,0,20,20 //dim listno listno=-1 : listno2=-1 sdim listdata,1024 objsize 160,320 pos 0,20 : listbox listno,0,listdata //ID:4 sdim str1,1024 sdim str2,1024 sdim editdata,65536 sdim editdata2,65536 //mesbox を作成するが見えないようにする pos -10,-10 : mesbox editdata,0,0,5,65536 //mesboxの状態変数 mbflag=0 *main // ウィンドウサイズ変更時 if (winx!=wndx) | (winy!=wndy){ //検索文字インプットボックス _hspobjhandle 2 prm=stat,40,0,winx-60,20,1 dllproc "MoveWindow",prm,6,D_USER //検索ボタン _hspobjhandle 3 prm=stat,winx-20,0,20,20,1 dllproc "MoveWindow",prm,6,D_USER //mesboxがない時 if mbflag=0{ //リストボックス _hspobjhandle 4 prm=stat,0,20,winx,winy-20,1 dllproc "MoveWindow",prm,6,D_USER } //mesboxがある時 else{ //リストボックス _hspobjhandle 4 prm=stat,0,20,winx/2,winy-20,1 dllproc "MoveWindow",prm,6,D_USER //mesbox _hspobjhandle 5 prm=stat,winx/2,20,winx/2,winy-20,1 dllproc "MoveWindow",prm,6,D_USER } wndx=winx : wndy=winy } // リストボックス処理 if listno2!=listno{ notesel listdata : noteget str1,listno getstr str1,str1,1,']':int str1 : str1-- notesel editdata : noteget str2,str1 instr tmp.0,str2,ftext,0 strlen tmp.1,ftext prm=hedit,0xBB,str1,0 dllproc "SendMessageA",prm,4,D_USER tmp.0+=dllret : tmp.1+=tmp.0 prm=hedit,0xB1,tmp.0,tmp.1 dllproc "SendMessageA",prm,4,D_USER prm=hedit,0xB7,0,0 dllproc "SendMessageA",prm,4,D_USER prm=hedit,0xCE,0,0 dllproc "SendMessageA",prm,4,D_USER str1=(str1-dllret)/2 prm=hedit,0xB6,0,str1 dllproc "SendMessageA",prm,4,D_USER str str1 listno2=listno } wait 10 goto *main *fileopen //ファイルを開くダイアログの表示 dialog "*",16,"" if stat=1{ exist refstr if strsize < 0:goto *main if strsize > 65536:goto *main _hspobjhandle 5:hedit=stat //mesbox,listboxを移動 if mbflag=0{ //width winx+200 _hspobjhandle 4 prm=stat,0,20,winx/2,winy-20,1 dllproc "MoveWindow",prm,6,D_USER prm=hedit,winx/2,20,winx/2,winy-20,1 dllproc "MoveWindow",prm,6,D_USER mbflag=1 } notesel editdata noteload refstr objprm 5,editdata } gosub *findlist goto *main *textselect gsel 0,-1 //screen 3 にマウス下の情報を表示 screen 3,400,225 : title "テキストを左クリックして下さい" gsel 3,2 cls 1 //現在選択しているテキストを取得 if hedit!=0{ prm=hedit,0x000D,65536 getptr prm.3,editdata2 dllproc "SendMessageA",prm,4,D_USER } pos 2,3 : mes "取得テキスト:" pos 0,25 : mesbox editdata2,400,200 objsize 60,25 pos 260,0 : button "決定",*wnd3ok pos 330,0 : button "取消",*wnd3cancel mref bmscr,67 *wnd3loop stick st,0,0 //フォアグラウンドウィンドウハンドル取得 prm=0 : dllproc "GetForegroundWindow",prm,0,D_USER if st=256 &(bmscr.13!=dllret){ ginfo 0 prm=prmx,prmy dllproc "WindowFromPoint",prm,2,D_USER hedit=dllret if dllret!=0{ prm=hedit,0x000D,65536 getptr prm.3,editdata2 dllproc "SendMessageA",prm,4,D_USER objprm 0,editdata2 } } wait 10 goto *wnd3loop *wnd3ok //mbflagが1の時はmesboxを隠す if mbflag=1{ gsel 0 width winx-200 _hspobjhandle 5 prm=stat,-10,-10,0,0,1 dllproc "MoveWindow",prm,6,D_USER mbflag=0 } editdata=editdata2 gosub *findlist *wnd3cancel gsel 3,-1 gsel 0,1 goto *main *find gosub *findlist goto *main *findlist notesel editdata : notemax tmp listdata="" repeat tmp notesel editdata : noteget str1,cnt instr tmp,str1,ftext,0 if tmp!=-1{ getstr str1,str1,tmp,'' tmp=cnt+1 notesel listdata : noteadd "["+tmp+"] "+str1,-1 } loop objprm 4,listdata return
このページはHSP勉強中のメモです
不具合が起こらない様に配慮はしていますが
各ソースの使用は各自の責任においてご利用お願いします
コメント ( 0 ) | Trackback ( 0 )
« ボタンに画像... | 「onclick」命... » |
コメント |
コメントはありません。 |
![]() |
コメントを投稿する |