Oberon/ETH Oberon/教程/GadgetsUse
這些教程頁面由 André Fischer (afi) 編寫,由 Hannes Marais 提供編輯協助,託管在 ETHZ,並保留在 ETH 許可 下。相關內容可在系統中透過 Book.Tool 找到。擴充套件內容也可以在 紙質版 上找到。一些教程頁面位於 WayBack 檔案 中。
瞭解如何將小部件插入顯示空間,如何命名它,以及更一般地理解小部件屬性的概念。回顧系統提供的豐富的小部件集合。瞭解和練習小部件的組合,以構建具有圖形使用者介面或將現有介面根據您的喜好進行調整的新應用程式。
預計時間:60 分鐘。
Gadgets.Insert ViewNewProc ~ 建立指定型別視覺小部件的新例項,並將其插入到顯示空間中的 插入符 位置。假設模組 M 包含一個過程 P,它的任務是動態分配某個物件型別的新例項。"M.P" 然後被稱為該物件的 New 過程或生成器。執行 New 過程 M.P 會導致建立該物件型別的新例項並將其初始化為預設狀態,以便它可以接受訊息(即它完全功能)。由於該物件在建立後不知道該做什麼,因此需要另一個命令來顯示新物件(即,如果它是視覺小部件)。Oberon 模組 "Gadgets" 提供了用於建立和插入物件的標準介面。
將模型小部件連結到小部件 - Gadgets.Link
[edit | edit source]Gadgets.Link ModelNewProcedure ~ 建立指定型別模型小部件的新例項,並將其連結到所選的視覺化小部件。如果模型小部件已連結到所選的小部件,則首先將其刪除。
插入視覺化 + 模型小部件對
[edit | edit source]Gadgets.Insert ViewNewProc ModelNewProc ~ 與以下命令序列具有相同的效果
- Gadgets.Insert ViewNewProc ~
- Gadgets.Link ModelNewProcedure ~
ViewNewProc 標識要建立的視覺化小部件的 New 過程。ModelNewProc 標識要連結到新建立的小部件的模型小部件。例如,以下建立了一個按鈕和布林值的模型-檢視對:
- Gadgets.Insert BasicGadgets.NewButton BasicGadgets.NewBoolean ~
此新的小部件對插入到插入符號位置。請注意,許多小部件既可以與模型一起使用,也可以不使用模型。通常,按鈕 不需要模型小部件。
小部件屬性
[edit | edit source]小部件的有趣特性是它們可以被修改並在任何位置使用。 Oberon 系統 3 以典型的拖放方式建立新的使用者介面 (GUI) 或修改現有的使用者介面。UI 構造簡化為文件編輯。
為此,每個小部件型別都有自己的屬性集,用於配置特定的小部件例項,但所有小部件都有兩個共同屬性,即Gen(生成器)和Name屬性。每個屬性都由屬性名稱和屬性值對組成,它們定義了小部件外觀和行為的一部分。屬性通常用於指定按鈕 的標題、小部件的顏色或當小部件受到滑鼠中鍵單擊的請求時必須執行的命令。
此外,小部件可以使用使用者定義的屬性進行擴充套件。
Columbus 可用於檢查和更改當前屬性值以進行自定義。在本教程的後面,您將有很多機會練習這一點。屬性也可以使用命令或在程式控制下進行詢問和設定。
Gen 屬性
[edit | edit source]Gen 屬性包含建立此小部件例項的生成器或New 過程的名稱,如果您願意,也可以將其分配。它是一個只讀值,也就是說它不能被定製。但是,可以使用命令Gadgets.Change 將給定型別的小部件轉換為另一種型別的小部件。這種可能性很少使用。
Name 屬性
[edit | edit source]Name 是小部件最重要的屬性之一,每個小部件都有這樣的屬性。當小部件被例項化時,屬性包含空字串。它用於引用小部件,無論是來自其他小部件還是來自應用程式。引用另一個小部件名稱的小部件或應用程式可以在指定的環境或上下文 中搜索並找到(或找不到)該另一個小部件。小部件通常使用名稱來引用彼此的屬性。實際上,小部件使用以下語法來引用另一個小部件的屬性
- ObjectName.AttributeName
其中ObjectName 是小部件的名稱(屬性),AttributeName 是要訪問的屬性名稱。您觀察到“名稱屬性”和“屬性名稱”之間的區別了嗎?
名稱屬於小部件,即它儲存在小部件本身內部,這意味著命名小部件的副本具有相同的名稱。
名稱範圍
[edit | edit source]當命名小部件屬於私有庫時,使用名稱範圍。系統搜尋小部件的範圍由容器元素的層次結構決定。當前名稱範圍是在小部件執行命令或接收訊息時確定的,並且正是小部件所在的容器。祖先會收到一個特殊的Find 訊息來搜尋指定的物件。find 訊息以廣度優先的方式從祖先傳播到所有後代,直到找到命名物件。如果需要,小部件可以透過在容器層次結構中更高的點開始查詢操作來擴大搜索空間,但可能會遇到歧義名稱的風險。
Cmd 屬性
[edit | edit source]Cmd 屬性可能包含一個字串,指定當使用者用滑鼠中鍵單擊小部件時應採取的操作。此操作在 Oberon 語言中被編碼為一個過程,即該字串必須表示一個 Oberon 命令,無論是否有引數。該過程可以搜尋使用者介面中的物件,並相應地更改其狀態。例如,在按鈕中指定的命令屬性“Edit.Open Test.Text”將在您單擊它時開啟一個顯示檔案“Test.Text”的文字檢視器。使用非常簡單的指令碼工具,可以在將引數傳遞給過程之前對其進行編輯:在命令字串中嵌入特殊宏 字元允許訪問屬性、處理選擇、編輯字串等。這些宏用於將不同的小部件組合在一起,並具有構建某些類別的 Oberon 應用程式的圖形介面的足夠功能。
如果此字串為空或無法解釋為命令,則不執行任何操作。
很少有小部件沒有此屬性,例如日曆、時鐘等。
ConsumeCmd 屬性
[edit | edit source]ConsumeCmd 屬性可能包含一個字串,指定當小部件被小部件消耗時應採取的操作。該字串的規格與上面 Cmd 屬性字串的規格相同。此外,可以使用宏 字元來控制消耗操作,處理被消耗者。目前,只有圖示 小部件配備了此屬性。
Color 屬性
[edit | edit source]一些小部件具有Color 屬性。小部件系統使用 16 色或 256 色調色盤,具體取決於安裝的硬體。每種顏色都由一個整數 0 .. 15 或 0 .. 255 標識,具體取決於硬體。使用顏色選擇器 可以非常方便地設定小部件的顏色屬性:為此,其Cmd 屬性的預設值已定義。
GridSnap 屬性
[edit | edit source]容器小部件,如面板,配備了網格捕捉屬性,允許輕鬆定位其後代。捕捉功能(在手工繪圖中沒有等效功能)強制可顯示的小部件在移動或複製時對齊到(不可見的)垂直和水平線的柵格。分配給屬性的整數值指定柵格線的距離(以畫素為單位)。預設捕捉距離為 4 畫素。
Locked 屬性
[edit | edit source]通常您可能希望限制您建立的小工具的可編輯性。編輯可能意味著更改小工具在面板或其他容器中的位置或大小(請參見 調整大小和移動)。此可編輯性由兩個因素決定。首先,小工具可能 程式設計 方式使其無法移動或調整大小。這是由程式設計師決定的內在限制。其次,鎖定 屬性是一個布林值,它決定了小工具的可編輯性。
您將在視覺小工具集合的呈現中觀察到,所有容器小工具(圖示化器、筆記本、組織器、面板、面板文件、文字小工具)都具有此屬性。請注意,該屬性控制容器的所有和僅直接後代。也就是說,您不能選擇性地僅鎖定某些後代,並且必須自己鎖定巢狀容器。由於包含的小工具的可編輯性由其上下文(祖先)控制,因此當它移動到另一個上下文時,其編輯行為會發生變化。
在建立 UI 後,您可以使用 Columbus 明確凍結它,使用者可以隨時解鎖 UI 以進行調整。
Oberon 系統 3 為您提供了一個全面的小工具集合,每個小工具將在後面詳細描述。將來,與系統一起提供的新的應用程式可能會新增它們自己的小工具。
每個小工具描述都包含以下部分
小工具屬性和與小工具相關的命令的詳細說明包含在“The Oberon Companion”的第 4 章中,該檔案包含在發行版中。此材料最好以印刷文件的形式消化,並且過於龐大,無法放入 HTML 文件中。
為了支援以下詳細說明,我們建議您準備並保留您 桌面 上的一小塊空閒區域,以便在該區域中插入新小工具(只需單擊命令),並且您可以使用 Columbus 同時研究各種屬性,因為您閱讀本教程。這些小工具立即可以使用,可以隨意修改和組合,您甚至可以磨練它們,直到它們成為可操作的物件,最終。否則,它們就是一次性產品。
或者,您也可以透過單擊一次 BasicGadgets.Panel 來插入幾乎完整的小工具集合。在這種情況下,您還需要 Columbus。然後您將觀察到所有這些小工具都配備了一個名為“Tutorial”的“自定義”屬性,否則沒有記錄。它用於將幫助圖示
指向本教程中小工具的描述。因此,您可以選擇按順序閱讀本教程(小工具按字母順序排列)或隨機閱讀。
這種替代方案的缺點是它使用了一個光學上很大的面板,並且您的顯示空間會很擁擠。您最好使用桌面上的“文件列表”按鈕!不要“儲存”該面板,只需“關閉”它。
生成器: Gadgets.Insert BasicGadgets.NewButton ~
別名: 按鈕
功能: 按鈕可以使用中間滑鼠鍵單擊進行推入和推出。您已經在另一個教程中練習過 按鈕。它可能有一個字串或一個視覺小工具作為 標題,用於標識按鈕的功能。它可以連結到 布林 或 整數 模型小工具。按鈕在單擊時能夠執行命令。一個屬性指示按鈕是否應該在單擊後彈出。按鈕在連結到整數值時充當單選按鈕。要構建一組單選按鈕,多個按鈕連結到同一個整數小工具。每個小工具都記住一個特定的數字,當整數小工具具有該值時,該按鈕將被按下。提供了一個命令來為按鈕小工具分配唯一的數字。
生成器: Gadgets.Insert Clocks.NewCalendar ~
別名: 日曆
功能: 顯示當前星期幾和日期的日曆。
生成器: Gadgets.Insert TextFields.NewCaption ~
別名: 無
功能: 標題是一段文字,通常用於面板和其他容器小工具中的標題或註釋。標題可能包含多行文字。標題僅提供有限的編輯功能。焦點位置使用左鍵單擊設定。然後該小工具被框在一個細矩形中,但沒有可見的游標。當處於焦點狀態時,鍵入的字元將追加到標題中。使用退格鍵來更正或修改標題。也可以透過複製來追加選定的文字。當標題被選中時,可以使用其中一個 EditTools 命令更改字型和文字顏色。
有用提示: 可以直接在游標位置的面板中鍵入標題。不需要首先使用 Gadgets.Insert Caption ~ 插入標題。
生成器: Gadgets.Insert BasicGadgets.NewCheckBox ~
別名: 複選框
功能: 複選框的功能類似於 按鈕,只是它在設定為 TRUE 時會顯示一個小勾號。它可以連結到 布林 或 整數 模型小工具。它在連線到整數小工具時充當單選按鈕。在這種情況下,勾號是矩形的。
生成器: Gadgets.Insert BasicFigures.NewCircle ~
別名: 圓形
功能: 具有可變半徑的圓形。選擇圓形會導致出現兩個控制點,一個位於中心,另一個位於圓周上。可以使用中間滑鼠鍵拖動任何一個控制點來更改圓形的位置和半徑。
生成器: Gadgets.Insert Clocks.NewClock ~
別名: 時鐘
功能: 帶有時針和分針的模擬時鐘,顯示當前時間。
生成器: Gadgets.Insert ColorTools.NewColorPicker ~
別名: 顏色選擇器
功能: 顏色選擇器顯示系統當前的調色盤。顏色從上到下、從左到右排列,從顏色索引 0 到可用的顏色數量。按下顏色選擇器上的中間滑鼠鍵會彈出一個選單,從中可以選擇一種顏色。然後將該顏色應用於上次選擇,無論是文字、小工具還是小工具組。請注意,並非所有小工具都可以著色。
生成器: Gadgets.Insert Clocks.NewDigiClock ~
別名: 數字時鐘
功能:一個顯示當前時間(小時和分鐘)的數字時鐘。
生成器:Gadgets.Insert Finder.NewDocList ~
別名:查詢器
功能:查詢器用於快速在堆積在容器中的許多文件中找到一個文件。查詢器通常放置在桌面上,儘管它們也可以在其他容器中使用。將滑鼠游標移動到查詢器上並按下滑鼠中鍵會彈出一個文件名稱列表,從中可以選擇一個。當釋放滑鼠鍵時,選定的文件將被帶到容器的最前面。查詢器標有“文件列表”。
生成器:Gadgets.Insert Icons.NewIcon ~
別名:圖示
功能:圖示為其內容(單個子項)提供標題。建立時,圖示不包含任何內容。在此階段,它將消耗一個元件作為其內容。一旦圖示消耗了元件,它將不再接受任何其他元件供其消耗。選擇此類圖示併發出命令Icons.Break將逆轉操作。
生成器:Gadgets.Insert Icons.NewIconizer ~
別名:圖示器
功能:圖示器用於構建各種型別的選單。它可以被視為翻轉卡片,卡片的每一面都有一個元件。翻轉卡片會從一個元件切換到另一個元件。最初,圖示器不包含任何元件,但可以在其兩個面開啟和關閉之間翻轉。翻轉按鈕位於圖示器的左上角。點選此按鈕會翻轉圖示器。在構建選單時,卡片的一面代表選單,另一面代表選單項。當一個狀態為空時,可以將元件放到圖示器中,使其成為卡片那一面的檢視。透過設定屬性,可以將圖示器更改為不同型別的彈出選單。
生成器:Gadgets.Insert BasicFigures.NewLine ~
別名:線條
功能:顯示一條線。
生成器:Gadgets.Insert Lists.NewList ~
別名:列表
功能:參見 列表
生成器:Gadgets.Insert NamePlates.NewNamePlate ~
別名:名稱板
功能:名稱板顯示文件選單欄中文件的名稱,以及位於桌面內部時桌面的名稱。名稱是在 TextDoc 元件、LogDoc 元件或 PanelDoc 元件的DocumentName屬性中找到的字串值,在桌面情況下。大多數編輯操作的工作方式與主可編輯文字中的操作相同 - 名稱可以更改,可以選中一段文字,刪除或複製。一個限制是,為了設定插入符號(點選滑鼠左鍵),滑鼠焦點必須指向名稱板的底部。然後名稱板進入本地編輯模式,其中回車鍵 (RETURN) 不被接受。另一個限制是字型、顏色和垂直偏移量不能更改。
生成器:Gadgets.Insert Navigators.NewNavigator ~
別名:導航器
功能:你的桌面,由元件系統提供,是顯示屏大小的四倍。它被組織成四個象限,每次只有一個象限可見。導航器是這四個象限的微型表示,顯示了放置在桌面上的物件的輪廓,以及顯示屏上顯示的象限用黑色標記。你可以將物件從當前象限拖動到其他三個相鄰的象限中,或者透過將物件放置在象限之間的邊界上將物件帶到當前象限。點選象限之一會將你傳送到該象限,該象限將變得可見。
生成器:Gadgets.Insert NoteBooks.New ~
別名:筆記本
功能:筆記本將元件組織為筆記本的頁面。所有頁面都具有相同的大小,這意味著如果未鎖定,調整頁面大小會導致所有其他頁面也相應調整大小。標題,即當前頁面的名稱屬性,顯示在筆記本的頂部。兩個箭頭形按鈕允許你向前或向後翻頁。標題欄消耗一個新頁面,然後將其新增到筆記本的末尾。可以透過將其放到其他位置或使用右鍵加左鍵單擊來刪除頁面。
生成器:Gadgets.Insert Organizers.NewPanel ~
別名:組織器
功能:組織器是一個面板,擴充套件了一個簡單的約束求解器,以便在組織器的大小發生變化時自動重新排列子項。組織器透過組織器左上角的對角線與面板區分開來。約束系統基於虛擬線:四條線在子項的四個邊和麵板的邊緣之間延伸。子元件的水平邊連線到面板的頂部或底部,垂直邊連線到左側或右側。四根線的長度以四個數字的形式給出,在子項的Constraint字串屬性中。正數將線“向外”延伸,負數將線“穿過”元件。
也就是說
Gadgets.ChangeAttr Constraints "10 20 10 10" ~
在選定子項上設定一個約束,其中元件的左邊緣距離面板左側 10 畫素,頂部邊緣距離面板頂部 20 畫素,右側邊緣距離面板右側 10 畫素,底部邊緣距離面板底部 10 畫素。因此數字的順序是左、上、右和下線距離。將 20 更改為 -20 會將元件的頂部邊緣連線到面板底部 20 畫素處。
生成器:Gadgets.Insert Outlines.NewOutline ~
別名:輪廓
功能:輪廓,它僅在文字元件內部工作,實現了一種將文字摺疊到元件中的方法。摺疊時,輪廓是一個黑色矩形。在摺疊的輪廓上中間點選會將它的內容“展開”在兩個箭頭之間。展開的輪廓中的文字可以自由編輯。點選兩個箭頭之一會將文字重新摺疊到輪廓中:這是一種有趣的方式,可以在不使主文字過載的情況下呈現細節或解釋性資訊。但是要注意,刪除輪廓箭頭可能會阻止輪廓再次摺疊。請注意,編譯器無法編譯摺疊的輪廓中包含的文字,你需要先展開它們。
生成器:Gadgets.Insert Panels.NewPanel ~
別名:面板
功能:參見 額外描述
生成器:Gadgets.Insert PanelDocs.NewDoc ~
別名:面板文件
功能:面板文件是一個文件,包含一個面板元件。可以為文件指定一個名稱,並以該名稱儲存在檔案中。如果使用命令 Desktops.OpenDoc (PanelDoc) 打開面板文件,它將顯示一個選單欄,其中包含標有 [關閉] 和 [儲存] 的按鈕。如果它在文字使用者介面的檢視器中開啟,選單欄將顯示另外兩個按鈕 [複製] 和 [增長]。
生成器: Gadgets.Insert ProgressMeter.NewFrame ~
別名: ProgressMeter
功能: 顯示一個進度條,顯示資料傳輸的進度。例如,它被用於 HyperDocs.Panel 中。
生成器: Gadgets.Insert BasicFigures.NewRect ~
別名: Rectangle
功能: 一個矩形,可能被填充。選擇一個矩形會導致兩個對角線相對的控制點出現。控制點可以透過拖動滑鼠中鍵來調整。一個橡皮筋線指示當前矩形,當滑鼠鍵釋放時,它將呈現最終形狀。
生成器: Gadgets.Insert BasicFigures.NewRect3D ~
別名: Rectangle3D
功能: 一個具有 3D 效果的矩形,可能被填充。選擇一個矩形會導致兩個對角線相對的控制點出現。控制點可以透過拖動滑鼠中鍵來調整。一個橡皮筋線指示當前矩形,當滑鼠鍵釋放時,它將呈現最終形狀。
生成器: Gadgets.Insert RefGadgets.NewFrame ~
別名: RefFrame
功能: 一個引用框架(也稱為視覺引用小工具)提供了一個框架,用於視覺化對任何型別為 Objects.Object 的物件的引用。此框架可以有三種不同的表示形式
此小工具的實際優勢在於,引用代表了一個物件,無論其型別(視覺小工具或模型)和大小。它可以像它所代表的物件一樣輕鬆地被拖放到另一個上下文,或被複制到另一個上下文。
視覺引用可以透過將視覺小工具拖放到其框架中或透過複製選定的視覺小工具來更改。或者,來自另一個引用的引用可以被拖放到或複製到該框架,效果相同。當引用透過這樣的使用者互動更改時,如果指定了,它將執行一個消費命令。滑鼠中鍵單擊引用以使用 Columbus 檢查它。要刪除(或清除)引用,請在引用內進行左右互換單擊。與大多數其他視覺小工具一樣,引用在被單擊時可能會執行命令。此小工具用於 Objects.Panel 和 Libraries.Panel 中,這兩個是為其設計的 Columbus 的兩個元件,但可以在任何其他環境中使用。
生成器: Gadgets.Insert Gages.NewFrame ~
別名: Scope
功能: 與之連結的模型小工具所採用的先前值的條形圖。當模型更改其值時,會在右側新增一個垂直條。當圖表填滿範圍時,條形圖會隨著新新增的垂直條向左滾動。圖表可見部分中觀察到的最小值和最大值顯示在左側。範圍會根據此值範圍自動調整其比例。
生成器: Gadgets.Insert RembrandtDocs.NewDoc ~
別名: RembrandtDoc
功能: 一個圖片文件,顯示單個圖片小工具。包含的圖片可以用倫勃朗.Panel 提供的繪圖、操作和顏色工具進行編輯。如果用命令 Desktops.OpenDoc (RembrandtDoc) 開啟,它會顯示一個選單欄,其中包含標有 [關閉]、[+]、[-] 和 [儲存] 的按鈕。[+] 放大選擇,或者如果沒有選擇,則放大整個圖片。該按鈕可以連續點選 5 次,以獲得 16 倍的放大倍數。這使得畫素級修補圖片變得非常容易。[-] 縮小整個圖片。該按鈕可以連續點選最多 5 次,直到恢復原始大小,不能超過。如果文件在文字使用者介面的檢視器中開啟,則選單欄會顯示兩個額外的按鈕 [複製] 和 [增長]。
生成器: Gadgets.Insert Rembrandt.New ~
別名: 無
功能: 一個倫勃朗框架提供了一個框架,用於視覺化單個圖片模型小工具。
生成器: Gadgets.Insert Gages.NewFrame ~
別名: ScrollView
功能: 一個滾動檢視是一個檢視,可以根據其屬性值,用水平或垂直捲軸,或兩者同時來進行裝飾。
生成器: Gadgets.Insert SetGadgets.NewFrame ~
別名: SetFrame
功能: 一個設定框架提供了一個框架,用於視覺化一個集合模型小工具。可以透過單擊其佔位符(位 0 從小工具的左側開始)來包含或排除一個位。當黑條出現在其對應位置時,一個位處於開狀態。一個設定框架可以與一個整數或一個集合模型小工具連結。
生成器: Gadgets.Insert Sisiphus.New ~
別名: Sisiphus
功能: 一個動畫卡通,代表一個名為西西弗斯的步行者。單擊西西弗斯會啟用螢幕保護程式,然後按下 Esc 鍵會將其移除。
生成器: Gadgets.Insert BasicGadgets.NewSlider ~
別名: Slider
功能: 請參見滑塊。它可以與一個整數、一個實數或一個字串 模型小工具連結。與任何其他小工具一樣,滑塊可以調整大小,但它的特殊之處在於,它可以調整為具有垂直或水平裝置,並且手柄會相應地滑動。
生成器: Gadgets.Insert BasicFigures.NewSpline ~
別名: Spline
功能:樣條線,可能填充。選擇樣條線會導致控制點出現線上連線處。控制點可以使用滑鼠中鍵調整。在拖動控制點時右鍵單擊會插入一個額外的控制點。在拖動控制點時左鍵單擊會刪除該點。
生成器:Gadgets.Insert TextDocs.NewDoc ~
別名:TextDoc
功能:文字文件提供將文字儲存到檔案的功能。文字文件容器的子級是文字工具。如果文字文件使用命令 Desktops.OpenDoc (TextDoc) 開啟,它將顯示一個選單欄,其中包含標有 [搜尋]、[替換] 和 [儲存] 的按鈕。[搜尋] 按鈕在文字中搜索選定的文字段。每次按下 [搜尋] 按鈕時,游標都會向前移動到文字中出現模式的下一個位置。當到達文字結尾時,搜尋將從文字開頭迴圈。[替換] 按鈕將最後搜尋的模式替換為當前文字選擇。然後游標將向前移動到搜尋模式的下一個出現位置。重複按下 [替換] 按鈕將替換搜尋模式的所有後續出現位置。可以透過按下 [搜尋] 按鈕(次數取決於需要)來跳過替換。在任何時候都可以按下 [替換] 按鈕以開始替換搜尋模式的出現位置。
生成器:Gadgets.Insert TextFields.NewTextField ~
別名:TextField
功能:TextField 允許編輯一行文字。它可以連結到 Integer、Real、String 或相容的模型工具。完整的 Oberon-like 文字編輯 功能可用於文字欄位。游標或焦點位置使用滑鼠左鍵單擊設定,選擇使用滑鼠右鍵處理。文字欄位在編輯過程中進入臨時本地編輯模式。在此期間,文字欄位的框架似乎從螢幕中彈出。在該編輯模式下,對包含的文字字串所做的更改不會立即反映在連結到文字欄位的模型工具中。一旦游標移開或按下 RETURN 鍵,本地編輯模式就退出,模型和檢視保持一致。當按下 ESC 時,文字欄位將恢復以前的值(如果模型工具中仍然可用)。當文字欄位連結到除字串模型工具以外的模型工具時,將執行值轉換,以與模型工具相同的格式進行轉換。在某些情況下,轉換不可行,這將導致根據模型工具的確切性質顯示預設值。當多個文字欄位位於同一個容器中時,TAB 鍵將游標從一個文字欄位移到另一個文字欄位。設定游標並按下左右箭頭鍵會水平滾動包含的文字,前提是內容比文字欄位的寬度更寬。
生成器:Gadgets.Insert Gadgets.New ~
別名:TextGadget
功能:文字工具允許編輯文字。完整的 Oberon 文字編輯功能可用於文字工具。大多數 編輯命令 也會對文字工具起作用。但是,Locate、Search 和 Replace 命令已被 TextDocs 模組中實現的類似但更強大的命令所取代。除了 Edit 的基本編輯功能外,還支援樣式。透過按下 Ctrl-Enter (鍵盤) 在文字工具中插入樣式。樣式可能具有以下模式之一:左、中、右和墊。
生成器:Gadgets.Insert TextGadgets.NewControl ~
別名:TextHyperlink
功能:TextHyperlink 是一個文字控制元件,僅在文字工具中開啟控制元件檢視(使用 TextDocs.Controls 命令)時可見。超連結包含一個 Oberon 命令,該命令將在滑鼠中鍵單擊位於該文字正前方的彩色文字時執行。請注意,超連結前面的文字必須與黑色不同的顏色才能啟用超連結。
生成器:Gadgets.Insert TextGadgets.New ~
別名:TextNote
功能:TextNote 是一個 TextGadget,沒有捲軸。唯一的區別是由於沒有滾動,文字註釋會自動增長(寬度和高度)以確保整個文字可見。該工具可以像便箋簿或便籤一樣使用,一組 TextNotes 可以組織在 筆記本 中。它也可以用作彈出選單,作為 List 的替代,它還具有允許工具在文字中流動的附加功能。顏色可以用來增強演示效果。
生成器:Gadgets.Insert TextGadgets.NewStyleProc ~
別名:TextStyle
功能:TextStyle 是一種文字控制元件工具,它會影響文字的格式。樣式工具的可見性使用 TextDocs.Controls 命令切換。它們的形狀是一條細的水平虛線,兩端有黑色的權重。可以使用 TextGadgets.NewStyle 命令在游標處插入樣式,也可以透過按下鍵盤上的 CTRL-ENTER 來插入樣式。在這種情況下,所有樣式都將變為可見。在 Macintosh 上,請改用 num-lock 鍵。樣式分為兩個部分,上面部分(虛線以上)控制格式;下面部分控制製表符(或製表符)的設定。滑鼠中鍵單擊虛線以上的區域如下:在按住並拖動黑色權重所在的區域時,可以指定左邊界和格式寬度;單擊權重旁邊(但不在權重頂部),會開啟和關閉權重。權重將文字行左右兩端的文字拉向自己。這樣就可以選擇左對齊、塊對齊、居中對齊和右對齊。當滑鼠焦點位於虛線以下時,滑鼠中鍵和左鍵的組合單擊會插入一個新的製表符。製表符顯示為一個小小的黑色矩形,可以透過拖動滑鼠中鍵來移動。透過將製表符完全拖出樣式工具來刪除製表符。透過將值分配給Tabs、Left 和Width 屬性,所有這些調整都可以比使用滑鼠更方便地進行。請注意,製表符僅在選擇左對齊模式時才會顯示自己。複製一段文字總是會複製包含在該段中的工具(樣式也是工具)。Pagebreak 屬性用於指定列印時是否應該在樣式之前插入分頁符。導致分頁的樣式將顯示為實線而不是虛線。當 TextStyle 被命名並放置在公共庫中時,它可以在同一個文件中甚至在不同的文件中多次重複使用。
生成器:Gadgets.Insert TimeStamps.New ~
別名:TimeStamp
功能:TimeStamp 顯示包含它的文件最後一次儲存在磁碟上的日期和時間。日期和時間根據登錄檔 [System] 部分中的 DateFormat 和 TimeFormat 欄位中包含的規範進行格式化。在新交付的系統的登錄檔中,分別為這些欄位分配了預設值 DD.MM.YY 和 HH:MM:SS。
生成器:Gadgets.Insert Views.NewView ~
別名:View
功能: 檢視就像一個攝像頭,顯示單個視覺小部件。這允許您對同一個小部件擁有許多不同的檢視。檢視可能為空,即不顯示任何內容,在這種情況下,它可以消耗一個小部件來顯示。每個檢視對它顯示的內容都有一個特定的視角(攝像頭角度)。可以透過用滑鼠抓取顯示的小部件的邊框並將其移動到新位置來更改視角。如果小部件太大導致邊框不可見,則可以使用檢視左上角周圍的不可見區域來抓取和移動顯示的小部件。另請參閱 ScrollView,它是一個帶有可選水平和垂直捲軸的 View。
有關模型小部件的解釋,請參閱 小部件介紹 和 使用模型小部件。
每個小工具描述都包含以下部分
生成器: Gadgets.Link BasicGadgets.NewBoolean
別名: Boolean
功能: 布林值是一個模型小部件,它儲存一個 BOOLEAN 值。布林值充當按鈕和小部件模型。參見 布林值
生成器: Gadgets.Link Complex.New
別名: Complex
功能: Complex 是一個複合模型小部件,它具有指定複數的實部和虛部的屬性。
生成器: Gadgets.Link Gages.NewDrv
別名: CurrentDirectory
功能: CurrentDirectory 模型小部件儲存系統當前使用的工作目錄。此模型小部件通常由 TextField 小部件視覺化。
練習: 將游標設定在桌面上,然後單擊
- Gadgets.Insert TextField CurrentDirectory ~
生成器: Gadgets.Link Gages.NewLoad
別名: CurrentLoad
功能: CurrentLoad 模型小部件儲存 Oberon 系統的當前工作負載。工作負載是根據系統在 Oberon 迴圈中獲取控制權的頻率估計的。此模型小部件通常由 Scope 小部件視覺化。
練習: 將游標設定在桌面上,然後單擊
- Gadgets.Insert Scope CurrentLoad~
生成器: Gadgets.Link Gages.NewLap
別名: EventTimer
功能: EventTimer 模型小部件儲存當前系統負載,該負載是根據系統在 Oberon 跟蹤和事件迴圈中獲取控制權的頻率計算得出的。它是一個未縮放的數字。
練習: 將游標設定在桌面上,然後單擊
- Gadgets.Insert TextField EventTimer~
生成器: Gadgets.Link BasicGadgets.NewInteger
別名: Integer
功能: Integer 是一個模型小部件,它儲存一個 LONGINT 值。它可以透過文字欄位、滑塊或按鈕進行視覺化。當與一組按鈕或複選框(或按鈕和複選框的混合)連結時,按鈕和複選框充當單選按鈕。在這種情況下,按鈕和複選框應被分配唯一的整數值以儲存在其各自的 SetVal 屬性中。這可以透過 BasicGadgets.SetValues 命令方便地完成。當其分配的整數值與整數小部件值對應時,按鈕或複選框為“開啟”。參見 整數。
生成器: Gadgets.Link Gages.NewMem
別名: MemoryUsed
功能: MemoryUsed 模型小部件包含有關當前使用 Oberon 堆的多少內容的最新指示。
練習: 將游標設定在桌面上,然後單擊
- Gadgets.Insert TextField MemoryUsed ~
生成器: Gadgets.Link Pictures.NewPicture
別名: Picture
功能: Picture 是一個模型物件,包含一個彩色二維點陣圖,由與它連結為模型的 RembrandtFrame 視覺化。它根本沒有屬性,也不能附加任何其他屬性。系統中包含一個名為 Rembrandt 的圖片編輯器,用於編輯點陣圖。
練習: 將游標設定在桌面上,然後單擊
- Gadgets.Insert Rembrandt.New Picture ~
生成器: Gadgets.Link BasicGadgets.NewReal
別名: Real
功能: Real 是一個模型小部件,它儲存一個 LONGREAL 值。它可以與滑塊或文字欄位小部件連結。參見 實數
生成器: Gadgets.Link RefGadgets.NewReference
別名: Reference
功能: 對任何物件的引用,該物件是 Objects.Object 的擴充套件。此模型小部件由 RefFrame 小部件視覺化。
生成器: Gadgets.Link SetGadgets.NewSet
別名: Set
功能: Set 是一個模型小部件,它儲存一個 32 位集合。它通常由 SetFrame 小部件視覺化,但也可以連結到文字欄位、滑塊、按鈕或其組合。
生成器: Gadgets.Link BasicGadgets.NewString
別名: String
功能: String 是一個模型小部件,它儲存一個最多 64 個字元的字串值。參見 字串
生成器: Gadgets.Link Texts.New
別名: Text
功能: Text 是 Oberon 系統中用於操作文字的抽象資料型別。文字可以是(實際上)無限長度,並且包含字型、顏色和垂直偏移資訊。小部件可以在文字流中浮動。文字不是真正的小部件,沒有屬性。
複製小部件可以透過兩種不同的方式完成。複製視覺小部件和模型小部件被稱為深層複製。 僅複製視覺小部件(然後視覺化與原始小部件相同的模型小部件)被稱為淺層複製。淺層複製可以直接用滑鼠完成。例如,用中間鍵拖動一個小部件,然後右鍵單擊會導致在滑鼠位置插入小部件的淺層複製。深層複製必須使用以下命令顯式完成:
- Gadgets.Copy
它獲取選擇,對其進行深層複製,並將副本插入游標位置。深層複製是結構保持的。 Gadgets.Panel 提供一個按鈕來進行深層複製。
為了允許程式設計師新增與現有視覺化小部件(滑塊、按鈕、文字欄位等)一起工作的新的模型小部件,使用模型和視覺化小部件之間的訊息協議。 訊息協議目前僅限於簡單型別布林值、整數、字串和實數。 本質上,視覺化小部件可以指示它對模型小部件的哪個屬性(或欄位或元件)感興趣。 一些視覺化小部件具有一個名為“Field”的字串屬性,其中包含這樣的屬性名稱。 如果此屬性為空,則假定預設屬性“Value”。 因此,模型小部件可能是複合的,並且可以由許多不同的視覺化小部件視覺化,每個視覺化小部件都顯示與其連結的模型小部件的不同屬性。 如果模型或檢視發生變化,則將啟用訊息交換協議以確保模型和檢視之間的一致性。
除了例項化小部件和操作屬性的命令之外,小部件模組還匯出以下命令
更改視覺化小部件的型別 - Gadgets.Change
[edit | edit source]Gadgets.Change viewNewProcedure ~ 將選定的(當然,是視覺化的)小部件更改為新的型別。 這些小部件的舊模型將被保留。
設定屬性值 - Gadgets.Set
[edit | edit source]Gadgets.Set Obj.Attr value ~ 更改所指示小部件的屬性。 此命令必須與目標的上下文在同一個上下文中執行。
設定屬性 - Gadgets.ChangeAttr
[edit | edit source]Gadgets.ChangeAttr attrName attrValue ~ 設定選定小部件的屬性值。
可以使用 Oberon 命令直接設定屬性。 這些命令很少使用,但有時在另一個小部件控制下更改屬性時很有用。
AttributeValue 可以採用多種形式,具體取決於屬性的型別
名稱 對於字串屬性 是/否 對於布林屬性 1234 對於數字屬性 "字串" 對於字串屬性
請注意,您可以向小部件新增任何您想要的屬性。 小部件知道的屬性將被強制轉換為特定型別。 未知的屬性將被儲存,但會被忽略。
宏
[edit | edit source]宏用於處理小部件的屬性。 它們充當不同小部件之間的粘合劑。 通常,小部件在啟用時執行命令,命令的引數是從顯示中檢索的。 引數可能是選擇,例如,或某個小部件屬性的值。 宏首先完全展開,然後將生成的文字以正常 Oberon 方式傳遞給執行的程式。 這使得向現有 Oberon 應用程式新增使用者介面成為可能。 系統以這樣一種方式整理引數,使其可以以傳統方式解析。
查詢宏 &
[edit | edit source]當您想向命令傳遞引數(引數的值是某個小部件的屬性值)時,查詢宏非常有用。 宏的語法為&ObjName.AttrName,展開時它會在當前範圍內搜尋名為ObjName的物件,提取其AttrName屬性值,並將此值插入到命令字串中。 例如,當您單擊按鈕時,您希望開啟一個文字檔案(其名稱寫在文字欄位中)。 首先,您必須使用 Columbus 為文字欄位命名,例如TF。 然後,透過執行以下命令,可以設定按鈕的Cmd屬性
- Gadgets.ChangeAttr Cmd "Edit.Open &TF.Value"
請注意,按鈕和文字欄位必須在同一個名稱空間中,即具有相同的容器。
啟用器宏 #
[edit | edit source]啟用器宏返回執行命令的小部件的屬性值。 它以#AttrName的形式使用,其中AttrName標識屬性的名稱。 在List小部件中可以找到一個示例。 這裡一個屬性Point包含在列表中點選的專案。
發起者宏 !
[edit | edit source]當物件被其他物件使用時,被使用的物件被稱為發起者或傳送者,而使用物件的被稱為接收者或接收者。 此宏經常出現在ConsumeCmd屬性中,並允許訪問發起者的屬性值。 使用命令由接收者執行。 宏採用!AttrName的形式,並擴充套件到發起者組中每個物件的屬性值列表。 它可用於在將檔案圖示拖放到編譯器圖示上時編譯檔案列表。 假設屬性Filename指示檔名稱(它必須是檔案圖示的屬性),那麼以下內容可用於設定編譯器圖示的ConsumeCmd屬性
- Gadgets.ChangeAttr ConsumeCmd "Compiler.Compile !Filename ~"
選擇宏 ^
[edit | edit source]與標準 Oberon 系統一樣,此宏擴充套件到當前選擇。 小部件系統使用略微擴充套件的選擇語義。 在這裡,以^AttrName形式的宏擴充套件為所有選定物件的屬性值列表。 如果沒有選擇小部件,則假定文字選擇。 例如,這允許建立對選定的小部件組起作用的命令。 與以前一樣,該裝置可用於優雅地構建將選擇作為引數的編譯按鈕。 請注意,返回的選擇始終包含至少一個完整的單詞,即使只選擇了單詞的開頭。
處理器宏 {, }, |
[edit | edit source]處理器宏始終具有以下形式:{ 字首 | 字尾 | 列表}。 當它展開時,列表中的每個單詞都會像指示的那樣獲得字首和/或字尾。 字首和字尾可以省略。 像 { | /s | ^ } 這樣的處理器序列將擴充套件到當前選擇,其中每個單詞都有一個 /s 字尾。
字串串聯
[edit | edit source]大多數宏的行為一開始可能看起來很奇怪。宏用特殊的起始符號 !,&等標識,後面跟著一個引數。在擴充套件宏時,系統需要知道何時停止解析引數。預設情況下,這是在沒有字元剩餘要掃描(字串結束)或遇到空格時。但是,當先遇到空格時,空格不會包含在擴充套件的宏中。如果你想在擴充套件的文字中包含空格,你必須在第一個空格後面顯式插入另一個空格。此功能允許你連線宏。例如,如果 O1.Value 是 "Hello" 並且 O2.Value 是 "World",那麼
- "&O1.Value &O2.Value" (一個空格分隔符)
將擴充套件為 "HelloWorld",而
- "&O1.Value &O2.Value" (中間有兩個空格)
將擴充套件為 "Hello World"。
小部件最有趣和新穎的一點是,除了從建立開始到使用者明確鎖定它們之外,它們的大小和位置都可以改變。這與大多數其他系統形成對比,在那些系統中,使用者收到鎖定使用者介面的,並且必須“接受或拒絕”。使用者的大量時間可能花在組織現有使用者介面或構建新介面上。這可以比作使用者在經典的 Oberon 系統中調整其私有的文字工具。
本章解釋瞭如何在執行時進行小部件的互動式組合。建立新介面或更改介面並不一定需要程式設計。
嘗試這個簡單的介面組合示例。逐步執行以下說明將引導你建立一個簡單的編譯器介面面板。
- 建立一個新的、空面板:Desktops.OpenDoc (PanelDocs.NewDoc).
- 開啟 Gadgets.Panel:Desktops.OpenDoc Gadgets.Panel.
- 將插入符號放在新建立的面板中,然後透過單擊 Gadgets.Panel 中“檢視”列表中的“按鈕”來插入一個按鈕。
- 單擊按鈕幾次,看看它如何工作。
- 透過單擊 Gadgets.Panel 中的 [哥倫布] 按鈕開啟檢查器。
- 使用滑鼠右鍵選擇新按鈕。
- 點選檢查器的[檢查]按鈕。
- 將“標題”文字欄位更改為編譯。
- 在“命令”文字欄位中鍵入Compiler.Compile *。
- 選中“彈出”複選框。
- 點選[應用]按鈕。請注意,按鈕的標題已更改。
- 透過點選 Esc 鍵或再次使用右鍵選擇按鈕來取消選擇按鈕。
- 開啟一個帶有 Oberon 源文字(任何 *.Mod 檔案)的文字檢視器。
- 標記檢視器.
- 點選[編譯]按鈕開始編譯。
- 將插入符號放在名稱面板中,透過鍵入“My.Panel”為面板命名。
- 透過單擊選單欄(面板)中的“儲存”按鈕來儲存面板。你的工作現已儲存,可以重複使用。
- 透過單擊選單欄中的[關閉]按鈕關閉面板。
- 重新打開面板以使用它 Desktops.OpenDoc My.Panel.
為了幫助你組合新的使用者介面或修改現有的使用者介面,我們提供了 Gadgets.Panel。在幕後,它使用一組之前已經審查過的小部件模組命令。不要忘記,這些命令也可以在通常的 Oberon 方式中直接在文字中執行。
這兩個列表包含標準的視覺和模型小部件集。順帶一提,“檢視”比“視覺小部件”更簡潔,“模型”比“模型小部件”更簡潔。同樣為了使用者的方便,列表條目是真實 New 過程名稱的別名。單擊“檢視”列表中的一個條目將在插入符號位置插入該型別的小部件。單擊“模型”列表中的一個條目將該型別的模型小部件連結到所選的小部件或小部件。[恢復] 按鈕會恢復最後一個刪除的面板(注意:它只對面板小部件起作用)。[哥倫布] 按鈕會開啟一個新的哥倫布面板,[後退] 和 [前進] 按鈕會更改所選小部件的顯示優先順序。顯示優先順序是指在面板中哪個小部件重疊其他小部件。預設情況下,新小部件始終插入到已位於容器中的小部件的前面,並保持其當前優先順序,直到它被顯式更改。一個例外是文件小部件;當這些小部件獲得焦點時,它們會彈出到最前面。如果你想將一個小部件帶到容器的最前面,可以使用 consume interclick 組合作為快捷方式。但是請注意,新的 consume 位置與之前的容器相同,否則小部件可能會意外地更改容器。
[深度複製] 按鈕控制 Gadgets.Copy 命令的執行。
對齊選單 面板允許你控制所選小部件的對齊方式。
對齊通常相對於某條假想線進行。例如,左對齊 意味著所有選定的小部件都應該在其左邊緣對齊,參考線是最左邊的選定小部件的左邊緣。
記住所有 New 過程可能相當困難。Gadgets 包含一個別名功能,允許你為 New 過程使用更短的名稱。登錄檔 (_OBERON.INI) 中的 [別名] 部分決定了這些別名。使用以下命令可以在系統日誌中顯示當前定義的完整別名列表:System.Get Aliases
每個別名在這個部分的文字行中只出現一次,格式如下
- AliasName = M.P
其中AliasName 標識了 M.P 過程的別名。現在可以使用以下更短的命令來建立模型-檢視對,例如
- Gadgets.Insert Button Boolean ~
別名功能僅適用於 "Gadgets.Insert" 和 "Gadgets.Link" 命令。
要修改別名,請使用以下命令:System.Set Aliases AliasName := M.P ~
瞭解如何在 Oberon 程式中操作小部件,請參閱在 Oberon 中使用小部件。
如果你想開發自己的小部件,請在程式設計新的 Gadget中瞭解所有內容。
A
B
C
日曆
標題
複選框
圓形
時鐘
Cmd 屬性
顏色屬性
顏色選擇器
複數
組合工具
連線
ConsumeCmd 屬性
當前目錄
當前負載
D
E
F
G
小部件組合
小部件例項
Gadgets.Change
Gadgets.ChangeAttr
Gadgets.Copy
Gadgets.Insert
Gadgets.Insert
Gadgets.Link
Gadgets.Set
Gen 屬性
生成器
網格捕捉屬性
GUI
I
L
M
N
O
P
R
S
範圍
滾動檢視
選擇宏 ^
設定框架
集合
淺複製
西西弗斯
滑塊
樣條曲線
字串
T
TextDoc
TextField
TextGadget
TextHyperlink
TextNote
TextStyle
文字
TimeStamp
U
V
修訂,afi 1996 年 11 月 26 日
安裝於 1997 年 05 月 30 日

