網頁標題: 測試 AutoIt 模擬點字機

Warning: fopen(/home/crazy/www/cmsb/bcj/has_read.php): failed to open stream: Permission denied in /home/crazy/www/compose/reading.php on line 2070

Warning: fputs() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2072

Warning: fclose() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2073
 



 由於 kealy 的建議,我更新了可以在螢幕上打出「點字」的 AutoIt 腳本程式。請來這裡試看看。

 這個測試版本把字體從 150 縮小為 20, 並讓打字的區域落在正中央,游標位置在快要 40 方時有聲音提示,超過 40 方即換行。以下是技術上的細節和已知而未處理的問題。


 其實沒有必要讓打出字的區域一定落在中央,不過考慮點字機的工作範圍確實居中,以及希望對控制項的座標、大小等量化的屬性更加了解,我特別找出辦法做到這點。

 文字編輯區維持跟舊版一樣全視窗的大小,但是創建完後就進入 AdjustTextAreaLayout 函式,該處在舊版只是一個設置字形的指令函式中有三個主要步驟:設置字形、測量需要的顯示大小、調整文字編輯區設定。後面二個步驟是下列解釋的重點。

 首先透過 GetTextSize 求出「一個」點方需要的顯示寬度,在 GetTextSize 之中的步驟有:

  1. _WinAPI_GetDC 找出編輯區的 Device Context, 也就是一些關於它的 GUI 設定,從 _WinAPI_GetDC 拿到的是它的把柄 (handle).
  2. 透過 _SendMessage 對編輯區發送 $WM_GETFONT 消息,問出編輯區現在用的字體設定。
  3. _WinAPI_SelectObject 指定字體方面的設定。
  4. _WinAPI_GetTextExtentPoint32 求出這個字串的長寬,單位是 pixel (px).
  5. 必須再用一次 _WinAPI_SelectObject 將設定還原預設。
  6. _WinAPI_ReleaseDC 歸還鋼材 _WinAPI_GetDC 跟系統要來的 Device Context 的把柄。
  7. 傳回得到的字串長寬資訊。

 得到每方需要的顯示區域大小,可推得 40 方需要的顯示寬度。接著要調整編輯區的邊界 (margin) 設定,換言之就像文字跟紙邊緣之間的留白。方法是先把邊界假設成左右都是 0, 然後求出目前打字框框所在區域的寬度 ($r[2]-$r[0]), 然後扣除 40 方需要的寬度後剩下就是左右邊界總和的寬度,把它均分兩半給左右得出 $w, 再把邊界寬度設為左右各 $w. 這麼一來,視覺上 40 方就會自己換行。

 另外一處修改位在送出要顯示的點方之前先取得目前游標所在的位置,如果已經超過 35 方,就會送出聲音提示。我用的是 Windows 內的 _WinAPI_MessageBeep 不是 AutoIt 的 Beep, 因為我一直沒聽到 Beep 發出的聲音。

 其實我原本想做到,編輯區邊界設為 0, 把字體大小盡量放大使得 40 方恰好用掉整個螢幕寬度,但從 px 單位要反推回字體大小,可能要知道當下螢幕的 DPI 設定,可是能直接取得該設定的函式如 GetDpiForMonitor 連 Windows 7 都沒有內建,只好先將就固定大小 20, 或者未來改成允許使用者自己調整。

 然而,仍有待解決的問題:

  1. 實際點字機如果游標之後有字,會直接把新打的點「加上去」,但是電腦的文字編輯會將原始資料向後推。
  2. 要是資料被往後推而擠到下一行,當打好的內容複製貼到別處,那奡N不會依照原本看起來的有換行。

 以下是目前的程式碼:


回 · 測試發表文章,「可以在螢幕上打出「點字」的 AutoIt 腳本程式」 這一篇文章封面


本文張貼者:Bo-Cheng Jhan〔張貼時間:民國105年4月22日(星期五)22點13分〕

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示