| こんにちは 前からすこし興味があったので、この機につくってみました。
# 【RubyTalk】ルビをつけてtalkコマンドをおこなうサブルーチン # 書式 RubyTalk Teller Text TgText RubyText [IsEnd] # Teller…しゃべるひとです。"システム"も指定出来ます # Text…しゃべる内容です。現在"()"で囲んだテキストは正常に表示されませんので注意してください # TgText…ルビをつける部分の文字列を指定して下さい # RubyText…ルビの内容の文字列を指定してください # IsEnd…1を指定するとTalkコマンド実行後にウインドウを閉じます RubyTalk: #初期化部分 #しゃべるひと Local Teller = Args(1) #しゃべる内容全部 Local Text = Args(2) #ルビをいれる部分の文字列 Local TgText = Args(3) #ルビの内容 Local RubyText = Args(4) #Endをするか Local IsEnd = Args(5) #上の行に表示する文字を最終的に保存する変数 Local CompRubyText #↑のとこまでの幅 Local LeftWidth #一時保存用 Local temp tempWidth #初期化おしまい #Talkコマンドで表示されるサイズに Font P明朝 12pt Regular #TgTextまでの幅を取得する LeftWidth = TextWidth(Left(Text,InStr(Text,TgText))) #話すのがシステム以外なら、名前とカッコの文だけleftwidthを少なくする #括弧つきだとうまくいかんのです。適当に改造してくださいな If Teller != "システム" Then If Left(Text,1) != "(" Then temp = NickName(Teller) & " 「" Else temp = NickName(Teller) & " (" EndIf Incr LeftWidth (TextWidth(temp) * -1) LeftWidth = Max(LeftWidth,0) #あとでも使うので空を代入 temp = "" Else Incr LeftWidth (TextWidth(" ") * -1) EndIf #ルビ部分の大きさに Font P明朝 9pt Regular Do temp = temp & "|" tempWidth = TextWidth(temp) If tempWidth >= LeftWidth Then #"|"がいっこ少ないのと、どっちがLeftWidthに近いか調べる #tempWidthそのまま引いたほうが誤差が大きかったらひとつ少なくする If (LeftWidth - tempWidth) > (LeftWidth - tempWidth - TextWidth("|")) Then temp = Left(temp,Len(temp) - 1) EndIf #タグを追加&ルビにする文字を追加 CompRubyText = "<Size=9><Color=White>" & temp & "</Color>" & RubyText & "</Size>" #ここでBreakる Break EndIf Loop #表示 If IsEnd Then Talk Teller $(CompRubyText);$(Text) End Else Talk Teller $(CompRubyText);$(Text) Suspend EndIf Return
動かして見てください。一応自分の環境で確認はしてありますが。 使用法は一番上に書いてある通りです。 少し問題点("()"で囲んだ場合うまく表示されない、ルビを一番上の行にしかつけられない、など)がありますが、よかったらつかってやってください。
それでは失礼させていただきます。
|