アラートダイアログ上にTextViewを表示して、指定のテキストを閲覧するAppleScriptです。
# 前バージョンの「自分のソースコード」表示というのは意味不明だったので、プロセス一覧を取得してみました
ヘルプボタン(?)を付け、アラートダイアログのウィンドウ背景を半透明に設定。そのままでは配色の都合上Dark Mode/Light Modeの切り替え時に読みづらい文字なども出てきたため、モード判定を行って表示色などを変更しています。
アプレット書き出ししたときに、スクロールビューがマウスのスクロールホイールの操作に追従したスクロールを行ってくれないので、そのあたり何か追加でNSScrollViewに設定を行う必要があるのだろうかと。
▲スクリプトエディタ上で実行@macOS 10.14.5。左がLight Mode、右がDark Mode(以下同様)
▲ヘルプボタンをクリックしたところ。本当にアンカーを指定して指定のヘルプコンテンツを表示させることもできる模様。そのための基礎的な試験
▲AppleScriptアプレット書き出しして実行したところ
▲Script Debugger上で実行@macOS 10.14.5。Dark Modeに対応できていない(次バージョンで対応することでしょう)
▲Script DebuggerからAppleScript Applet (Enhanced)で書き出して実行したところ。マウスのスクロールホイールの操作を受け付けて文字がスクロールする
AppleScript名:アラートダイアログ上にTexViewを表示_ヘルプ付き_半透明 |
— Created 2019-07-08 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" property |NSURL| : a reference to current application’s |NSURL| property NSFont : a reference to current application’s NSFont property NSView : a reference to current application’s NSView property NSAlert : a reference to current application’s NSAlert property NSColor : a reference to current application’s NSColor property NSTextView : a reference to current application’s NSTextView property NSScrollView : a reference to current application’s NSScrollView property NSRunningApplication : a reference to current application’s NSRunningApplication property returnCode : 0 –Get Self Source Code (a kind of joke) set asStr to do shell script "ps -ax" set paramObj to {myMessage:"Main Message", mySubMessage:"Sub information", mes1:(asStr), mesWidth:400, mesHeight:200, fontName:"HiraginoSans-W3", fontSize:11.0} –my dispTextViewWithAlertdialog:paramObj–for debug my performSelectorOnMainThread:"dispTextViewWithAlertdialog:" withObject:paramObj waitUntilDone:true on dispTextViewWithAlertdialog:paramObj –Receive Parameters set aMainMes to (myMessage of paramObj) as string –Main Message set aSubMes to (mySubMessage of paramObj) as string –Sub Message set mesStr to (mes1 of paramObj) as string –Text Input field 1 Label set aWidth to (mesWidth of paramObj) as integer –TextView width set aHeight to (mesHeight of paramObj) as integer –TextView height set aFontName to (fontName of paramObj) as string –TextView font name set aFontSize to (fontSize of paramObj) as real –TextView font size –Detect Dark Mode set dMode to retLIghtOrDark() of me if dMode = true then set tvCol to 1 set tvAlpha to 0.8 set bCol to 0.1 set bAlpha to 0.8 else set tvCol to 1 set tvAlpha to 1.0 set bCol to 1 set bAlpha to 0.7 end if — Create a TextView with 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()) –cyanColor aView’s setFont:(NSFont’s fontWithName:aFontName |size|:aFontSize) set aColor to NSColor’s colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:(tvAlpha) aView’s setBackgroundColor:aColor aView’s setOpaque:(false) aView’s setString:mesStr aScroll’s setDocumentView:aView aView’s enclosingScrollView()’s setHasVerticalScroller:true — set up alert set theAlert to NSAlert’s alloc()’s init() tell theAlert –for Messages its setMessageText:(aMainMes) its setInformativeText:(aSubMes) –for Buttons its addButtonWithTitle:"OK" its addButtonWithTitle:"Cancel" –Add Accessory View its setAccessoryView:(aScroll) –for Help Button its setShowsHelp:(true) its setDelegate:(me) set myWindow to its |window| end tell myWindow’s setOpaque:(false) myWindow’s setBackgroundColor:(NSColor’s colorWithCalibratedWhite:(bCol) alpha:(bAlpha)) — show alert in modal loop NSRunningApplication’s currentApplication()’s activateWithOptions:0 my performSelectorOnMainThread:"doModal:" withObject:(theAlert) waitUntilDone:true if (my returnCode as number) = 1001 then error number -128 end dispTextViewWithAlertdialog: on doModal:aParam set (my returnCode) to aParam’s runModal() end doModal: on alertShowHelp:aNotification display dialog "Help Me!" buttons {"OK"} default button 1 with icon 1 return false –trueを返すと親ウィンドウ(アラートダイアログ)がクローズする end alertShowHelp: –ダークモードの判定。ダークモード時:true、ライトモード時:falseが返る on retLIghtOrDark() set curMode to (current application’s NSUserDefaults’s standardUserDefaults()’s stringForKey:"AppleInterfaceStyle") as string return (curMode = "Dark") as boolean end retLIghtOrDark |
More from my site
(Visited 105 times, 1 visits today)