Window+TextView+Buttonを作成してボタンのクリックを受け付けるAppleScriptです。
ちょっとしたログ表示などのために作成したものです。
▲通常(ライト)モード@macOS 10.12.6、ダークモード@10.14.1
オリジナルはスクリプトエディタ上でCommand+Control+Rの「フォアグラウンドで実行」を実行する必要があったのですが、
本バージョンでは強制的にメインスレッド実行を行うことで、この操作は不要になっています。
ただ、ランタイム環境ごとに「ボタンをクリックできない」という現象に遭遇。他のいろいろなランタイムでも試しておく必要を感じます。
ランタイム環境 | スクリプトエディタ | アプレット | スクリプトメニュー | osascript | Script Debugger |
macOS 10.12 | OK | OK | クリックできない | クリックできない | クリックできない |
macOS 10.13 | OK | OK | クリックできない | クリックできない | クリックできない |
macOS 10.14 | OK | OK | クリックできない | クリックできない | クリックできない |
macOS 10.12.6、10.13.6、10.14.1で動作確認してみましたが、傾向は同じです。Script Debugger上でクリックを受け付けないのはかなり問題が、、、、
AppleScript名:テキストビュー+ボタンを作成 v2 |
— Created 2015-12-11 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" property NSColor : a reference to current application’s NSColor property NSScreen : a reference to current application’s NSScreen property NSButton : a reference to current application’s NSButton property NSWindow : a reference to current application’s NSWindow property NSSplitView : a reference to current application’s NSSplitView property NSTextView : a reference to current application’s NSTextView property NSScrollView : a reference to current application’s NSScrollView property NSMutableString : a reference to current application’s NSMutableString property NSWindowController : a reference to current application’s NSWindowController property NSTitledWindowMask : a reference to current application’s NSTitledWindowMask property NSRoundedBezelStyle : a reference to current application’s NSRoundedBezelStyle property NSNormalWindowLevel : a reference to current application’s NSNormalWindowLevel property NSBackingStoreBuffered : a reference to current application’s NSBackingStoreBuffered property NSMomentaryLightButton : a reference to current application’s NSMomentaryLightButton property windisp : false property wController : false set aWidth to 600 set aHeight to 500 set aTitle to "テキストビューのじっけん/TextView Test" set outText to "ぴよまるソフトウェア / Piyomaru Software " set aButtonMSG to "OK" –表示用テキストの作成 set dispStr to NSMutableString’s alloc()’s init() repeat with i from 1 to 100 set bStr to (NSMutableString’s stringWithString:(outText & (i as string) & return)) set dispStr to (bStr’s stringByAppendingString:dispStr) end repeat set paramObj to {aWidth, aHeight, aTitle, dispStr, aButtonMSG, "10"} my performSelectorOnMainThread:"dispTextView:" withObject:(paramObj) waitUntilDone:true on dispTextView:paramObj set my windisp to false copy paramObj to {aWidth, aHeight, aTitle, dispStr, aButtonMSG, timeOutSecs} set aColor to NSColor’s colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:0.9 set (my windisp) to true –Text View+Scroll Viewをつくる set aScroll to NSScrollView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight)) set aView to NSTextView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, aHeight)) aView’s setRichText:true aView’s useAllLigatures:true aView’s setTextColor:(NSColor’s cyanColor()) — aView’s setBackgroundColor:aColor aView’s setEditable:false aScroll’s setDocumentView:aView aView’s enclosingScrollView()’s setHasVerticalScroller:true –Buttonをつくる set bButton to (NSButton’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aWidth, 40))) –bButton’s setButtonType:( NSMomentaryLightButton) –bButton’s setBezelStyle:( NSRoundedBezelStyle) bButton’s setTitle:aButtonMSG bButton’s setTarget:me bButton’s setAction:("clicked:") bButton’s setKeyEquivalent:(return) –SplitViewをつくる set aSplitV to NSSplitView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, aHeight, aWidth)) aSplitV’s setVertical:false aSplitV’s addSubview:aScroll aSplitV’s addSubview:bButton aSplitV’s setNeedsDisplay:true set aWin to makeWinWithView(aSplitV, aWidth, aHeight, aTitle, 0.9) aView’s setString:dispStr –NSWindowControllerを作ってみた set my wController to NSWindowController’s alloc() my (wController’s initWithWindow:aWin) my (wController’s showWindow:me) set aCount to (timeOutSecs as string as number) * 10 –timeout seconds * 10 repeat aCount times if (my windisp) = false then exit repeat end if delay 0.1 end repeat my closeWin:bButton end dispTextView: –Button Clicked Event Handler on clicked:aSender set (my windisp) to false my closeWin:aSender end clicked: –make Window for Input on makeWinWithView(aView, aWinWidth, aWinHeight, aTitle, alphaV) set aScreen to NSScreen’s mainScreen() set aFrame to {{0, 0}, {aWinWidth, aWinHeight}} set aBacking to NSTitledWindowMask –NSBorderlessWindowMask set aDefer to NSBackingStoreBuffered — Window set aWin to NSWindow’s alloc() (aWin’s initWithContentRect:aFrame styleMask:aBacking backing:aDefer defer:false screen:aScreen) aWin’s setTitle:aTitle aWin’s setDelegate:me aWin’s setDisplaysWhenScreenProfileChanges:true aWin’s setHasShadow:true aWin’s setIgnoresMouseEvents:false aWin’s setLevel:(NSNormalWindowLevel) aWin’s setOpaque:false aWin’s setAlphaValue:alphaV –append aWin’s setReleasedWhenClosed:true aWin’s |center|() — Set Custom View aWin’s setContentView:aView return aWin end makeWinWithView –close win on closeWin:aSender set tmpWindow to aSender’s |window|() repeat with n from 10 to 1 by -1 (tmpWindow’s setAlphaValue:n / 10) delay 0.02 end repeat my wController’s |close|() end closeWin: |
More from my site
(Visited 94 times, 1 visits today)
透明ウィンドウで時計表示 – AppleScriptの穴 says:
[…] テキストビュー+ボタンをつくる ScriptにTimerを組み合わせたぐらいです。 […]