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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0716
@key文字表示9解決


@key

リンク

2012/7/16(Mon) 11:46:56|NO.47721

指定した座標を中心に文字を表示する命令はありますか?
今は

pos 1000,1000 : mes "PAUSE" pos (ginfo(26)-ginfo(14))/2,(ginfo(27)-ginfo(15))/2 mes "PAUSE"
とやっていますが非効率です



この記事に返信する


KA

リンク

2012/7/16(Mon) 12:40:52|NO.47723

それを、自作関数にすれば効率が良いのでは。



てれてれ

リンク

2012/7/16(Mon) 12:44:06|NO.47724

いい加減自分で調べることを学ぶべき。

ということで敢えて詳しく解説は書きません。
自分で調べて下さい。

#include "gdi32.as" chr_str = "中央揃え" //描画する文字列 dim size, 2 GetTextExtentPoint32 hdc, varptr(chr_str) ,strlen(chr_str), varptr(size) chr_setpos = 123, 123 //描画する文字列の中心座標 pos chr_setpos(0)-size(0)/2, chr_setpos(1)-size(1)/2 : mes chr_str



@key

リンク

2012/7/16(Mon) 13:13:27|NO.47726

一応調べたんですが、そのような専用の変数を作るタイプのものは使いたくないし、
インクルードするものもあまり好きではありません



てれてれ

リンク

2012/7/16(Mon) 13:20:14|NO.47727

専用の変数を作りたくないならモジュール化して関数にすればいいだけ。
そもそもなぜインクルードしたくないのか理由を聞きたいな。



ヂオン

リンク

2012/7/16(Mon) 13:48:08|NO.47729

mes 命令の正体は、実は、winapi の TextOut 関数だと自分は思っています。
それは置いといて、font 命令で指定されるフォントサイズは、ピクセルとなっているため、等幅フォントの場合は、ginfo_mesx ginfo_mesy を使用しなくても下のような単純な計算で
算出可能です。(等幅フォントで無くても、描画は可能です)



#const fontsize 24 #define tx "PAUSE" font msGothic,fontsize pos ginfo_winx/2-(strlen(tx)*(fontsize/2))/2 , ginfo_winy/2-fontsize/2 mes tx



@key

リンク

2012/7/16(Mon) 14:00:44|NO.47732

>てれてれさん
インクルードすると余計なものがついて重くなったりするから普段はasの中から必要な物だけ抜き出してる

>ヂオンさん
ありがとうございます。参考にさせていただきます



あり

リンク

2012/7/16(Mon) 16:13:03|NO.47733

APIの使い方を初心者に独自に調べろというのは
少々無理があるとは思いますが、てれてれさんのサンプル自体は
質問に対してほぼ理想的なものですよ。

>インクルードすると余計なものがついて重くなったりするから
誤解があるようですがインクルードしたファイル内の処理が
実行されない限り処理速度自体に変化はありません。
ファイルサイズの増加についても現在においてはほぼ気にする必要の無い程度の値です。

>そのような専用の変数を作るタイプのものは使いたくないし、
#deffuncで拡張命令を作る際、local変数指定を行う事で
命令終了後に指定した変数を自動で削除する事が可能です。


以下のスクリプトはてれてれさんのサンプルをモジュール化したものです。
実行後デバッグウィンドウの変数タブを見てもらえれば
変数が一切残っていない事が確認できるはずです。

#module #include "gdi32.as" #deffunc c_mes str _txt, local chr_str, local size ; ↓この2つの変数は命令終了後に削除されます chr_str = _txt dim size, 2 GetTextExtentPoint32 hdc, varptr(chr_str), strlen(chr_str), varptr(size) pos ginfo(22) - (size(0) / 2), ginfo(23) - (size(1) / 2) mes chr_str return #global #define posx 320 ; 表示X座標 #define posy 240 ; 表示Y座標 font MSGOTHIC, 64 pos posx, posy c_mes "テスト" ; カレントポジション確認用 color 255 line posx, 0, posx, 480 line 0, posy, 640, posy



check

リンク

2012/7/16(Mon) 16:38:39|NO.47736

>そのような専用の変数を作るタイプのものは使いたくないし、
>インクルードするものもあまり好きではありません
質問している側が何様のつもりだよ。

>インクルードすると余計なものがついて重くなったりするから普段はasの中から必要な物だけ抜き出してる
あり氏も言っているが重くなることはない(今のHSPのバージョンでは)
余計な命令はコンパイル時に削除される。
コンパイル時間をどうしても短縮したいと言うのなら、その方法を取ればいいんじゃないか。
インクルードしているものにもよるが、効果は微々たる物だと思うが。

あり氏が言っている
>#deffuncで拡張命令を作る際、local変数指定を行う事で
>命令終了後に指定した変数を自動で削除する事が可能です。
という方法も、逐一ローカル変数を初期化するため重くなるとHSPのマニュアルに書いてある。

結局専用の変数を作るか、多少のオーバーヘッドを覚悟でローカル変数を使うか。
文字を画面に表示するという、何回も実行しそうな命令なら専用の変数を作ったほうが効率はいいと思うぞ。



てれてれ

リンク

2012/7/16(Mon) 21:23:55|NO.47742

私用により回答が遅れました。
もう解決されているようですが、一部補足のみ行わせて頂きます。

>あり様
お忙しい中わざわざモジュール化までありがとうございます。お手数おかけしました。

@keyさんがどの程度HSPを扱えるのかは分かりませんが、
ここまでの質問を見てきた限りだと確かに自力で全てを調べるのは難しかったかもしれませんね。

ただやはり、いつ何時であれ、自分で調べる努力はして欲しいですね。
今回の質問に関しては少し検索して調べれば似たような物が出てくる簡単な内容でしたので・・・

その他の@keyさんの誤解については、
他の方々が既に指摘して下さっているので私からは言うことはもう何もありません。



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