インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

画面位置の記録と利用

とても簡単な仕組みなんですが,Powerpointで作ったタイマーに使ってる仕組みです。

このタイマーは電子黒板で使用するのですが,大きく表示したいときや,絶妙に隙間に
収まる位置と大きさで使いたいときなどさまざまです。

Powerpointのウィンドウ表示で使えば,サイズ変更なども簡単なので,いちいち機能を
追加する必要はありませんが,電子黒板というのは細かい作業は少し大変。


なので,そこで使うための作った位置・サイズの記憶に使ってる機能を書きます。

ウィンドウ表示のスライドショー前提で話を進めます。

[スライドショー]→[スライドショーの設定]→出席者として閲覧する(ウィンドウ表示) と設定すると,パワーポイントをウィンドウ表示できます。
設定を変えなくても閲覧モードでもいいかもしれません。

スライドの欄外にテキストボックスを3つ用意します。名前を記憶1,記憶2,記憶3とします。
さらに,6つのボタンをつくります。
位置記憶用のボタン3つ 名前は適当でかまいませんが,テキストには 1,2,3を数字を1つずつつけます。
位置呼出用のボタンも3つ これまた名前は適当でかまいませんが,テキストには 1,2,3を数字を1つずつつけます。

標準モジュール

Sub 位置記憶(oshp As Shape)
Dim TSlide As Slide
Set TSlide = ActivePresentation.Slides(2)
    TSlide.Shapes("記憶" & oshp.TextFrame.TextRange.Text).TextFrame.TextRange.Text = _
        SlideShowWindows(1).Left & "," & SlideShowWindows(1).Top & "," _
        & SlideShowWindows(1).Width & "," & SlideShowWindows(1).Height
    Beep
    ActivePresentation.Save
End Sub

Sub 位置呼出(oshp As Shape)
Dim TSlide As Slide
Set TSlide = ActivePresentation.Slides(2)
    Dim 位置 As String

    位置 = TSlide.Shapes("記憶" & oshp.TextFrame.TextRange.Text).TextFrame.TextRange.Text
    If 位置 = "" Then Exit Sub
    
    With SlideShowWindows(1)
        .Left = Split(位置, ",")(0)
        .Top = Split(位置, ",")(1)
        .Width = Split(位置, ",")(2)
        .Height = Split(位置, ",")(3)
    End With
End Sub

位置記憶のマクロを 位置記憶用の3つのボタンのクリック時に,位置呼出用のボタンに位置呼出用の3つのボタンのクリック時に設定します。
f:id:chemiphys:20170102191404g:plain
そういえば欄外にテキストボックスと書いたのに,上の例ではがっつり中にあります。赤いボタンを押したとき座標が入っていくのが見えればと思って中に入れてサンプルを作りました。

コードを読んでもらえばとても簡単なのですが,
位置記憶のほうでは,スライドショーウィンドウのleft,top,width,heightを調べて,テキストボックスに,区切りで書かせているだけです。
位置呼出のほうでは,スライドショーウィンドウにさっきの値を適用しているだけです。テキストボックスにはまとめて書かれていましたので,
スプリット関数で分けるという操作はしています。

たったこれだけのコードですが, 位置記憶と位置設定を簡単に実行できます。
限られたウィンドウスペースを無駄な時間なく素早く適したサイズでタイマーを設置し,動かす。

なんとなくかっこよさげに見えるボタンですので,適用できる場がある方,いかがでしょう。(゚▽゚*)