![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.3
- 回答日時:
サンプルです。
先ほどの発言に間違いがあります。テキストボックスを透過させようとしましたが、WIN2000限定仕様のようです。
処理はMain関数で実行するだけです。
カッコ悪いですが、現在時間を表示します。
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Private Const WM_SETTEXT = &HC
Private Const WS_VISIBLE = &H10000000
Private Const WS_CHILD = &H40000000
Private Const WS_BORDER = &H800000
Private Const HWND_TOPMOST = (-1)
Private Const SWP_NOSIZE = &H1&
Private Const SWP_NOMOVE = &H2&
Private Const SWP_SHOWWINDOW = &H40&
Sub Main()
'とりあえず実行
ActivePresentation.SlideShowSettings.Run
'時計開始
Call DESP_CLOCK
End Sub
Sub DESP_CLOCK()
Dim OwnerWnd As Long
Dim lngWinStyle As Long
Dim labelWnd As Long
Dim strWork As String
Dim strMem As String
'プレゼンウィンドウのハンドルを得る
OwnerWnd = FindWindow("screenClass", vbNullString)
'ハンドルを得ることができないとき終了
If OwnerWnd = 0 Then
MsgBox "プレゼンウインドウが見つからない"
Exit Sub
End If
'ウィンドウスタイルを指定して、STATICオブジェクトを作成
lngWinStyle = WS_CHILD Or WS_VISIBLE
labelWnd = CreateWindowEx(0, "edit", Now, lngWinStyle, _
20, 20, 150, 20, _
GetDesktopWindow, 0, 0, ByVal CLng(0))
'作成したオブジェクトを最前面固定
Call SetWindowPos(labelWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)
'スライドが閉じるまでループ
Do Until IsWindow(OwnerWnd) = 0
'時刻の更新
strWork = Now & vbNullChar
If strMem <> strWork Then
Call SetWindowText(labelWnd, strWork)
strMem = strWork
End If
DoEvents
Loop
' ウィンドウを破棄
Call DestroyWindow(labelWnd)
End Sub
No.2
- 回答日時:
うーむ、うーむ、うーむ、
そうですかー、、、
そこまでのカスタマイズを求めるのであれば、パワポを使用しないで、HTMLに出力してしまってはいかがですか?
JAVASやVBSを使用することで回避できそうな気がします。
どうしてもパワポにこだわりますか?
もしそうなら、一応反則技は存在しそうです。処理としては・・・
テキストボックスをAPIで作成し、透過形式にスタイルを変更して、テキストボックスの親ハンドルををパワポに設定します。
スライドのページが変わっても親ハンドルとなるパワポは、存在しつづけるので、テキストボックスは常に最前面に居続けます。
欠点としては環境に左右します。もし二つ以上のプレゼンが実行されているとき、どのプレゼンを親とするかがわかりません。
プレゼン中はハンドルが変わらないことは確認しましたが、実際に実現して検証を行わないと、正確なことは言えないので、自信は50%です。
この回答への補足
どうしても、パワポなんですよ。
普通のVBとかなら、時計なんて簡単にできるんですけどね~。パワポのVBがこんなに使いづらいとは・・・。
No.1
- 回答日時:
パワポのVBAって初経験です。
プレゼン自体にイベント通知が発生しないようですね。
ですので、開始/終了時にフラグを立てて、コードから実行する必要があるようです。
詳細としては、
各スライドに時計表示用のラベルを用意する必要があります。
Mainモジュールから実行して起動してください。
注意事項としては、ESCキーなどで終了するのではなく、各スライドに終了ボタンを用意するか、あるいは各スライドの時計表示されるラベルのクリックイベントなどで、終了フラグを立てる必要があります。参考コードではCloseCommand関数を呼ぶと、コードが抜ける仕組みになってます。
これ以外の方法は、調べたところわかりませんでした。
うーむ、パワポのVBA・・・扱いづらい・・・
Private flgEnd As Byte
Sub Main()
'各ラベルを透化
Slide1.Label1.BackStyle = 0
Slide2.Label1.BackStyle = 0
'とりあえず実行
ActivePresentation.SlideShowSettings.Run
'時計開始
Call DESP_CLOCK
End Sub
Sub DESP_CLOCK()
flgEnd = 0
Do While flgEnd = 0
Slide1.Label1.Caption = Now
Slide2.Label1.Caption = Now
DoEvents
Loop
End Sub
Public Sub CloseCommand()
flgEnd = 1
End Sub
この回答への補足
回答有難うございます。
たしかに、回答の方法で実現できますが、スライドの枚数が100枚ともなると・・・。
普通に動いてくれるんでしょうか・・・?
スライドがForm_LoadやForm_Unloadみたいなイベントがあがれば楽なんですけどね~。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
パソコンでスライドショーの画面に時計を表示させたい。
ノートパソコン
-
PowerPointのプレゼン画面右下に時計を表示させたい
Excel(エクセル)
-
パワーポイントで時計を表示できますか?
PowerPoint(パワーポイント)
-
-
4
現在時刻をリアルタイムで更新するには?
Excel(エクセル)
-
5
パワーポイントのVBAでテキストボックスに値を変更させたいです
Visual Basic(VBA)
-
6
EXCELのセルへ、デジタル時計を表示できますか?
Excel(エクセル)
-
7
パワーポイントでhtmlの挿入
PowerPoint(パワーポイント)
-
8
PowerPointVBAでスライドマスター上での編集
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者です。gulpでコンパイル...
-
VBA ステータスバー DoEvents
-
JSPの処理の途中で、JavaScript...
-
PowerPointで時計表示
-
アクセスのフォームでタイマー...
-
〔Excel:VBA〕マクロの実行が異...
-
resizeToメソッドが動作しません
-
setTimeoutあるいはsetInterval...
-
既存のwebサイトで、ローカルの...
-
innerHTMLなどの反映タイミング
-
以下のコードを実行しても、オ...
-
GoTo文とかSelect文の処理の仕...
-
デザイン時のVisible=Falseは実...
-
jsから呼び出されるphpの実行の...
-
正整数の半角数字かどうか判定する
-
「終了していない文字列型の定...
-
gas 全角数字を半角数字に変換
-
仮アップ?
-
delete[]と、delete演算子の明...
-
JavaScriptのブックマークレッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
デザイン時のVisible=Falseは実...
-
PowerPointで時計表示
-
初心者です。gulpでコンパイル...
-
〔Excel:VBA〕マクロの実行が異...
-
VBA ステータスバー DoEvents
-
リクエスト結果が一瞬しか表示...
-
innerHTMLなどの反映タイミング
-
JavaScriptでショートカットキ...
-
1つのVBAコードをすべてのコア...
-
C#でボタン名を変更しても動く
-
resizeToメソッドが動作しません
-
VBA SORT Applyでエラー
-
onload onunload onbeforeunloa...
-
VB.netの重複データ数カウント...
-
javascriptで最初のところに戻...
-
jQuery ui Datepicker 明日以降...
-
アクセスのフォームでタイマー...
-
計算結果が毎回違う。
おすすめ情報