元件

Mac Cocoa NSOutlineView 資料綁定

此篇實作是接續「NSOutlineView 使用程式呈現樹狀資料」,那次是用程式來處理,本篇要使用 Cocoa Binding 的方式來綁定資料。

關於 Cocoa Binding,可先參考這篇「Mac Cocoa 資料綁定 (Binding) 實作測試」的基本概念。

簡單來說,就是利用資料綁定的方法來呈現樹狀目錄,而不是寫一堆程式來處理。

準備資料

為了配合綁定的需求,把上一個例子的資料稍為修改如下,主要是加上 class 要加上 @objcMembers,變數要加上 @objc 和 dynamic。

底下就是全部的程式了。

重要度:
文章分類:

NSOutlineView 使用程式呈現樹狀資料

前言

在 Mac AppKit 中,樹狀圖元件是使用 NSOutlineView,這個又被翻譯成「大綱視圖」。

官方文件在此:

https://developer.apple.com/documentation/appkit/NSOutlineView

簡單來說,這個文件大概只比天書簡單一點,真不知誰能看的懂?沒有範例大概是最大的問題,整個 Mac 的說明檔似乎都沒有範例(有啦,上次看 WebView 有一個),而一些有範例的文件,不是時效有點久,就是用 Object-C 寫的,實在很難參考。

翻了許多文件,剛好看到這一篇有人提出 NSOutlineView 的問題,其中一位解答的內容很豐富,有圖有程式,我就試著把程式複製起來,竟然順利執行成功,於是我逐一研究追蹤它的程式,再對照天書一般的說明文件,搭配 Google 翻譯服用,終於又有了初步的成果了。

一些心得

這陣子的研究,對 Mac 程式中的代理 (delegate) 有一點點感覺了。以前用 C++ Builder 處理樹狀目錄時,想法其實很直覺,就是先用程式把每一個項目產生並設定,然後把它們依順序串好,最後把這串交給樹狀目錄主元件,然後再呈現,就完成了。

NSOutlineView 處理的方法不同,它有四個主要的資料處理和代理程式,我們要依它的規則去實作,最後才會產生結果。

我想這大概是以前看過某篇提到的感想,Windows 的作法是把程式、資料、元件等混在一起,不是良好的 MVC 模式,而 Mac 的分離就比較清楚。資料歸資料、處理程式歸程式,畫面由代理程式處理。

底下一一實作並說明。

重要度:
文章分類:

使用 Android Webview 建立 App

原本 CBETA 有一個很簡單的 Android APP,就是用 WebView 元件開啟 CBETA 網站,就像一個隱藏版的瀏覽器。

 

不過從 Android 9(API級別28)開始,WebView 默認情況下已停用明文支持,所以程式勢必要修改。於是用 Android Studio + Kotlin 做了一個簡單的版本,同時也處理了明文不支持的問題。

 

重要度:
文章分類:

WebKit View 在 Xcode 上的問題

執行環境:MacBook Pro + macOS Mojava 10.14.5 + Xcode 10.2.1

事情是這樣的,我用 Xcode 製作一個單純的 App,只是放入一個 WebKit View 元件(底下簡稱 WKWebView ),在 Xcode 上執行並沒問題。

如下圖,白框是 WKWebView 元件,左邊的 Windows 是執行的畫面。

image

然而,我想直接執行 Build 出來的 App,問題就來了。

如下圖,我先選紅圈 ①,在藍圈 ② 可以看到 App 的位置,點下之後就可以看到綠圈 ③ 的 App 檔案,直接執行它,就看到黃圈 ④ 的錯誤報告。

 

image

我測試過其他簡單的元件如 Label、Button 則沒有這個問題,就 WKWebView 才會如此。

重要度:
文章分類:

將 TWebBrowser 設定成 IE 11

C++ Builder 不管是 VCL 或 FireMonkey,都有 TWbeBrowser 元件。在 Windows 系統下,該元件就是一個內嵌的 IE。

其實我很想不要用 IE,希望找到內嵌的 chrome 元件,但目前找到的好像不是很好處理,也擔心日後升級問題,所以在 Windows 下還是暫時先以 IE 為主。

查了說明文件,指出內建的 TWebBrowser 預設的版本是 IE 7。所以我寫了一個很簡單的程式,用 FireMonkey 版的 TWebBrowser,直接連到一個 HMLT5 的網頁

https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video

這個網頁我在 IE 上測試,要 IE 11 才能順利執行。

底下是我的測試程式執行結果,可以看到就是沒有什麼結果。

image

重要度:

BCB5 使用 Regular Expression

過去為了工作需要,陸續在 BCB5 加進了支持 Unicode、資料庫的元件,當時還說未來最希望找到支援 Regular Expression (正規表達式,底下簡稱 RE) 的元件。前二天要把一個 perl 的程式移植到 BCB 來,因為該 perl 程式大量使用了 RE ,所以不得不停下工作,開始測試支援 RE 的資料。 這幾年的寫程式經驗中,perl 曾把我帶到另一個領域,最令人激賞的就是 perl 的 hash 及 RE,因為工作中有許多處理文字的問題,這些用 c++ 來寫非常不便,但 perl 的魔力卻讓這些事變的簡單許多,若不考慮圖形介面與效率的程式,perl 幾乎就是我隨手寫程式的工具了。 這幾月又重拾 BCB 寫程式,也開始用 set 及 map 來取代 perl 的 hash(BCB 6 內含的 STLport 已有 hash_set 及 hash_map,應該更好用,BCB5 還要自己去找來安裝),如今 BCB 找到了內嵌式的資料庫,若再加上 RE 的功能,那真是如虎添翼,寫起程式一定是更加得心應手了。
重要度:
文章分類:

BCB5專業版使用內嵌資料庫 (二)

去年 12 月寫了篇「BCB5 專業版使用內嵌資料庫」,那只是基本研究,讓資料庫可以在 BCB5 Pro 呈現,但諸多細節都沒有深入研究,這二天又研究了一些東西,終於確定資料庫的應用沒有問題了。 資料庫依然是選擇火鳥 (http://www.firebirdsql.org/),並使用其內嵌版的 DLL。如此一來,使用者就不用額外安裝資料庫客戶端程式。 資料庫與 BCB5 Pro 的介面就是 UIB -- Unified Interbase (http://www.progdigy.com/modules.php?name=UIB),它等於是 BCB 控制資料庫的元件。 資料庫的建立與操作可以用 FlameRobin (http://www.flamerobin.org/),這是一個客戶端的程式,可用來建立與操作火鳥的資料庫,我用他來建立資料庫與建立表格。
重要度:
文章分類:
電腦標籤:

BCB 處理 7z 壓縮格式

這次要把大正藏與卍續藏全部裝在一片 CD 中是一個蠻大的考驗。由於考慮到某些國家與地區不像台灣有高普及率的 DVD 光碟機,所以使用一般 640 M 的 CDR 是主要的考量,為了這個目的,先前就嘗試把 Zip 的壓縮格式換成 RAR 格式,而且採用緊密壓縮,果然省下許多空間,為此還特別去找支援 RAR 解壓縮的工具,花了一些時間才順利使用。 好景不常,在努力測試下,發現估計的容量是 620M,可是壓片廠老板曾說最好保持在 600M,才能保證資料不會因為太滿而流失,所以為這個原因,同仁又去找了 7z 的壓縮程式來試。 7z 的壓縮率果然更厲害,142 冊的經文壓縮起來硬是比 RAR 少了近 50M,如此一來一片裝光碟的理想就很有可能順利實現,但新的問題就是要改寫程式,又是花了一個下午,才把 7z 的格式搞定。
重要度:
文章分類:
電腦標籤:

BCB5專業版使用內嵌資料庫

BCB5 專業版一直是我對外正式使用的寫程式工具,因為它是公司買的正式版,而且只是教育版而已,企業版是貴的嚇人的東西,我實在不敢要老板買,不過雖然如此,專業版大部份的功能已經足夠我使用了。 有時我私下會用用 BCB6 企業版,這個寫起資料庫就輕鬆許多,但也因為沒有版權,只是拿來試用。 最近在寫的程式,一直希望能有資料庫的功能,否則過去土法練鋼的方法太辛苦,效率也不好,再加上一些新增的功能和資料庫的應用有關,因此利用此次程式改版的機會,也開始找相關的資料。
重要度:
文章分類:
電腦標籤:

內含 Checkbox 的 TreeView 元件

最近一直在做明年要推出的光碟,而心中也有一些新的功能想加入程式中,會注意到這個功能,主要是因為全文檢索範圍的設計已不敷使用,希望有一個好的方法來處理。 在舊版的設計中,是每一冊提供一個 Checkbox,但在未來大正藏 56 冊及卍續藏 86 冊共142 冊的數量中,舊的格式實在不夠,所以想找一個能清楚呈現層次,可以用快速選擇各種分類的經目,甚至可以細到單經的選擇。單經的選擇是過去所沒有提供的,但這功能卻是許多使用者希望見到的,在思索許久之後,終於想到利用內含 Checkbox 的 TreeView 元件。 當初第一個方案是想到利用 yap 介紹的 Virtual Treeview 這個元件 (http://www.soft-gems.net/VirtualTreeview/),它的畫面蠻美觀的,也支援 Unicode,理當是最佳的選擇,不過試了一下,發覺用法不太習慣,範例也大多是 Delhpi 的,甚至許多參數在 BCB 上與 Delhpi 不同,花了不少時間卻成果有限,想想時間不夠用,實在無法花太多時間研究,只好暫時放棄,下次的正式版再來考慮這個元件。 接著在網路搜尋,找到一個方法可以把原來的 Treeview 元件變成有 Checkbox 的支援,程式很少,這樣就可以了。
重要度:
文章分類:
電腦標籤:
訂閱 元件