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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0221
mascotウィンドウの位置・サイズの保存&復元6未解決


mascot

リンク

2009/2/21(Sat) 12:12:27|NO.23516

ウィンドウのサイズ変更を「screen」命令以外で実現でき、
(下ではwidthを使用)
次の起動時に復元するソースを探しています・・・

以下のソースを数回実行していると、少しずつではありますが
ウィンドウが拡大しています...

どうしてなのでしょうか、また対策はないでしょうか...
よろしくお願いします。


#uselib "user32" #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int screen 0, ginfo (20), ginfo (21) SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) | $10000 | $40000 ///////////////////////↑まで、可変ウィンドウ作成。////////// exist "window.set" if (strsize!-1) { notesel windiata noteload "window.set" noteget gclix,0 noteget gcliy,1 noteget deskxt,2 noteget deskyt,3 } width int(gclix),int(gcliy),int(deskxt),int(deskyt) //Screen命令はつかえないものとします....Widthにて。 mes "ウィンドウを変更して閉じてください" onexit goto *onClose stop *onClose notesel winszset noteadd ""+ginfo(10),0,1 noteadd ""+ginfo(11),1,1 noteadd ""+ginfo(4),2,1 noteadd ""+ginfo(5),3,1 notesave "window.set" dialog "位置とサイズを保存しました" end



この記事に返信する


otta

リンク

2009/2/21(Sat) 12:45:19|NO.23518

widthではウィンドウのクライアントサイズ(実際に表示される大きさ)をパラメータで指定します。
ですのでウインドウを閉じたときに取得する情報をウィンドウ全体のサイズではなくクライアント
領域サイズにすれば目的の動作をすると思います。

詳しくはヘルプのginfoを参照して下さい。



mascot

リンク

2009/2/21(Sat) 13:04:12|NO.23519

>ottaさん
noteadd ""+ginfo(12),0,1
noteadd ""+ginfo(13),1,1
と変更して、数回起動>終了をくりかえしていると
ウィンドウが小さくなっていきました...



otta

リンク

2009/2/21(Sat) 15:10:35|NO.23522

>mascotさん

SetWindowLongでウインドウの属性を可変ウインドウに変更すると
widthで設定したクライアントエリアサイズとginfo関数で得られる
クライアントエリアサイズが一致しません。
申し訳ありませんが原因は私では分かりません。

下記のように数値をチェックする為にmes命令を追加して判明しました。
なぜginfoで取得できる数値がwidthで設定した数値より少なくなるのか
原因が分からないと対策のしようが無いのですが私では分かりませんでした。

width int(gclix),int(gcliy),int(deskxt),int(deskyt)
mes "set window size "+str(gclix)+","+str(gcliy) ;動作確認用 //Screen命令はつかえないものとします....Widthにて。 mes "ウィンドウを変更して閉じてください" mes "window size "+str(ginfo(12))+","+str(ginfo(13));動作確認用



p

リンク

2009/2/21(Sat) 19:01:20|NO.23523

WS_SIZEBOX($40000)を指定すると、右、下枠がが2px太くなる仕様のようです。
そのため、ginfoとの不整合が起きているのではないかと。

ウィンドウID0では設定にかかわらずサイズ固定ウィンドウが作成されてしまうので、
ウィンドウID1以降のサイズ可変ウィンドウを使うことで問題を回避できると思います。



Kpan

リンク

2009/2/21(Sat) 20:54:24|NO.23524

>右、下枠がが2px太くなる仕様
これを厳密に調べたいなら、GetSystemMetrics関数(SM_CXEDGE、SM_CYEDGE)で
取得してください。
http://www.winapi-database.com/System/SystemSet/GetSystemMetrics.html
http://www.microsoft.com/japan/winlogo/accessibility/WinXP_params4.mspx



mascot

リンク

2009/2/22(Sun) 08:02:39|NO.23533

新しい変数?に代入して実行してみました。
すると、何度も閉じて起動させても、位置およびウィンドウが動かなくなりました。
みなさんの環境では、どのようになりますでしょうか^^;
(こちらはVista SP1 Ultimate:1280x800サイズ)


#uselib "user32" #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int screen 0, ginfo (20), ginfo (21) SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) | $10000 | $40000 ///////////////////////↑まで、可変ウィンドウ作成。////////// exist "wind4ow.set" if (strsize!-1) { notesel windiata noteload "wind4ow.set" noteget gclix,0 noteget gcliy,1 noteget deskxt,2 noteget deskyt,3 gclix2=str(int(gclix)+10) gcliy2=str(int(gcliy)+10) } width int(gclix2),int(gcliy2),int(deskxt),int(deskyt) mes "set window size "+str(gclix)+","+str(gcliy) ;動作確認用 //Screen命令はつかえないものとします....Widthにて。 mes "ウィンドウを変更して閉じてください" mes "window size "+str(ginfo(12))+","+str(ginfo(13));動作確認用 onexit goto *onClose stop *onClose notesel winszset noteadd ""+ginfo(12),0,1 noteadd ""+ginfo(13),1,1 noteadd ""+ginfo(4),2,1 noteadd ""+ginfo(5),3,1 notesave "wind4ow.set" end



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