"Fossies" - the Fresh Open Source Software Archive

Member "gambas-3.16.3/app/src/gambas3/tips/tips.zh_TW.txt" (7 Sep 2021, 13888 Bytes) of package /linux/misc/gambas-3.16.3.tar.bz2:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 [WELCOME]
    2 
    3 <p>    歡迎使用<b>Gambas</b>!</p>
    4 
    5 <p><b>    Gambas</b>是一個基於高級<b>Basic</b>語言直譯器的圖形界面的開發環境。</p>
    6 
    7 <p><b>    Gambas</b>的目標是使您能輕易而快速地開發出功能強大的程式。但是高效而簡潔的程式還得靠您<b>自己</b>的努力...</p>
    8 
    9 <p>    希望您會喜歡!</p>
   10 
   11 <p align=right>Beno&icirc;t Minisini<br>
   12 English:<u>g4mba5@gmail.com</u><br>
   13 中文:<u>yizhou.he@gmail.com</u></p>
   14 
   15 [STARTUP]
   16 
   17 <p>    每一個專案都需要有一個<b>啟動類別</b>,這個啟動類別必須定義一個名爲<b>Main</b>的無參數靜態公用方法,它將成爲您的程式的進入點。</p>
   18 
   19 <p>定義啟動類別的方法是,用鼠標右鍵點擊工程目錄樹中要設爲啟動類別的類別,並在彈出的右鍵菜單中選中<b>啟動類別</b>。</p>
   20 
   21 <p>您不需要在啟動視窗中定義一個<b>Main</b>方法,因爲<b>Gambas</b>己經預定義好了。</p>
   22 
   23 <p>這個預定義的啟動方法創建並顯示視窗, 就像<b>Visual Basic&trade;</b>一樣。</p>
   24 
   25 
   26 [OPEN]
   27 
   28 <p>    <b>Gambas</b>的<b>OPEN</b>函數和<b>Visual Basic</b>的不太一樣,它並不回傳整數,而是回傳一個<b>檔案</b>物件。</p>
   29 
   30 <p>所以,不要使用:</p>
   31 
   32 <pre>DIM handle AS Integer
   33 ...
   34 OPEN "myfile" FOR READ AS #handle</pre>
   35 
   36 <p>而應該使用:</p>
   37 
   38 <pre>DIM handle AS File
   39 ...
   40 handle = OPEN "myfile" FOR READ</pre>
   41 
   42 
   43 [CATDIR]
   44 
   45 <p>    您知道嗎?您可以使用<b><tt>&/</tt></b>來連接資料夾和檔案名稱,這個運算子會自動處理路徑結尾的<b><tt>/</tt></b>以免重複。</p>
   46 
   47 <p>例如:</p>
   48 
   49 <pre>PRINT "/home/gambas" &/ ".bashrc"
   50 /home/gambas/.bashrc
   51 
   52 PRINT "/home/gambas/" &/ "/tmp" &/ "foo.bar"
   53 /home/gambas/tmp/foo.bar
   54 </pre>
   55 
   56 <p>怎麼樣?好用吧!</p>
   57 
   58 
   59 [EXEC]
   60 
   61 <p>    可以將您的整個專案生成一個可執行檔,在<b>專案</b>選單中選擇<b>生成可執行檔</b>。</p>
   62 
   63 <p>當<b>Gambas</b>生成可執行檔時,預設會將產生的可執行檔放到您的專案目錄下,可執行檔名和您的專案名稱相同。</p>
   64 
   65 
   66 [PATH]
   67 <p>
   68     相對路徑在<b>Gambas</b>中有特殊含義,它們總是指向您專案內的文件。
   69 <p>
   70 這裏沒有<b>當前目錄</b>的概念,沒有<b>CHDIR</b>之類的關鍵字來改變它。
   71 <p>
   72 <b>注意:</b>您只能用相對路徑存取專案中的檔案,因爲絕對路徑在您生成可執行檔後就不再可靠了。
   73 
   74 
   75 [GLOBAL]
   76 
   77     <b>Gambas</b>裏不再有<b>全域變數</b>了!
   78 <p>
   79 新的處理方法是,在您的主模組中宣告它們爲<b>PUBLIC</b>(公用類型)。
   80 <p>
   81 如果您的專案中沒有主模組,只有主視窗,那麼宣告它們爲<b>STATIC PUBLIC</b>(靜態公用類型)。
   82 <p>
   83 要存取這些變數,您必須使用主模組名或主視窗名:<tt>MyMainModule.MyGlobalVariable</tt>或
   84 <tt>MyMainForm.MyGlobalVariable</tt>。
   85 
   86 
   87 [EMPTY]
   88 
   89 <p>    要知道一個字串是否爲空,並不需要使用<b>Len()</b>函數,您可以直接測試它,因爲空字串爲<b>FALSE</b>非空字串爲<b>TRUE</b>。</p>
   90 
   91 <p>例如,您不需要寫:</p>
   92 
   93 <pre>IF Len(MyString) > 0 THEN ...
   94 IF Len(MyString) = 0 THEN ...</pre>
   95 
   96 <p>您只需寫:</p>
   97 
   98 <pre>IF MyString THEN ...
   99 IF NOT MyString THEN ...</pre>
  100 
  101 [TRANSLATE]
  102 
  103 <p>    <b>Gambas</b>應用程式是可完全翻譯的,條件是您應指定哪些字串是必須要翻譯的。 </p>
  104 <p>用括號將字串括起來就表示該字串是可以被翻譯的。<p>
  105 
  106 <pre>PRINT ("我可以被翻譯!")
  107 PRINT "我不能被翻譯!"</pre>
  108 
  109 [EVENT]
  110 
  111 <p>    每個控制項和每個物件都可以產生事件,都有一個<b>event observer</b>(事件觀察器)和一個事件 <b>group name</b>(組名)。</p>
  112 
  113 <p>事件觀察器捕捉物件產生的每一個事件,事件組名將是您用來處理事件的類別名稱的前綴。</p>
  114 
  115 <p>預設的事件觀察器是您創建的控制項的容器物件,事件組名是控制項名。</p>
  116 
  117 <p>在這種狀況下,一個視窗會接收您在它上面創建的所有控制項發生的事件。</p>
  118 
  119 <pre>' Gambas form
  120 DIM hButton AS Button
  121 
  122 PUBLIC SUB _new()
  123 &nbsp;&nbsp;hButton = NEW Button(ME) AS "MyButton"
  124 END
  125 
  126 PUBLIC SUB MyButton_Click()
  127 &nbsp;&nbsp;PRINT "You have clicked MyButton !"
  128 END
  129 </pre>
  130 
  131 
  132 [FORM]
  133 
  134 <p>    在<b>Gambas</b>中,一個視窗是它自己的事件觀察器,所以您可以直接在它自己的類代碼中管理它的事件(像<b>Resize</b>, 
  135 <b>Activate</b>, ...)。 </p>
  136 
  137 <p>這樣,從<b>Visual Basic</b>轉來的新手們就不會迷失方向:-)。</p>
  138 
  139 
  140 [EMBED]
  141 
  142 <p>    在<b>Gambas</b>中,您可以在視窗中嵌入視窗!</p>
  143 
  144 <p>    要實現如此強大的功能,只要在初始化視窗物件時將父容器做爲最後一個參數傳給視窗構建函數。</p>
  145 
  146 <p>例如:</p>
  147 <p><tt>DIM hForm AS MyDialog<br>
  148 DIM hSuperControl AS MyForm<br><br>
  149 ' 創建一個對話框<br>
  150 hForm = NEW MyDialog<br>
  151 ' 在此對話框中插入一個視窗<br>
  152 ' 注意此視窗需要三個參數,最後一個參數是容器物件<br>
  153 hSuperControl = NEW MyForm(Param1, Param2, MyDialog)<br>
  154 ' 移動並改變視窗的大小<br>
  155 hSuperControl.Move(8, 8, 128, 64)<br>
  156 </tt></p>
  157 
  158 <p>小心:嵌入後的視窗還是個視窗,它還是它自己的事件觀察器。</p>
  159 
  160 
  161 [GROUP]
  162 
  163 <p>    每個控制項都有一個<b>Group</b>(組)屬性,當此屬性被設置,事件處理名稱的前綴就將是組名而不是控制項名。</p>
  164 
  165 <p>    假定您有一個<b>Button</b>(按鈕)名叫<b>btnAction</b>
  166 有一個<b>Click</b>事件處理:</p>
  167 
  168 <pre>PUBLIC SUB btnAction_Click()</pre>
  169 
  170 <p>    如果您將<b>btnAction</b>的<b>(Group)</b>屬性設爲<b>MyGroup</b>,那麼事件處理從按鈕收到的事件將是:</p>
  171 
  172 <pre>PUBLIC SUB MyGroup_Click()</pre>
  173 
  174 <p>    此屬性讓您在一個函數中處理不同的控制項的事件,同組中的控制項不需要有相同的類型!</p>
  175 
  176 <p><b>註釋:</b> <b>Visual Basic</b>老手可能會認為這個屬性和VB中的<b>控制項陣列</b>相似,但更為強大。:-)</p>
  177 
  178 
  179 [TAG]
  180 
  181 <p>    每一個控制項都有<b>Tag</b>屬性,此屬性是爲編程者設計的,可以是任何您想要的<b>VARIANT</b>(可變類型)數據。</p>
  182 
  183 <p>這在使用同組的公用事件處理中區別控制項時非常有用。</p>
  184 
  185 
  186 
  187 [LAST]
  188 
  189 <p>    <b>LAST</b>關鍵字回傳最近一次發生事件的控制項,當您要寫一個獨立於控制項名的事件處理函式就非常有用。</p>
  190 
  191 <p>例如,假設您要寫一個計算器程式。
  192 您定義了十個按鈕,每個數字一個,它們都在一個名叫"Digit"的<b>群組</b>,每個控制項的<b>Tag</b>屬性都被設爲相應的數字。
  193 您的處理程序將會是:</p>
  194 
  195 <p><tt>PUBLIC SUB Digit_Click()<br><br>
  196 &nbsp;&nbsp;Display = Display & LAST.Tag<br>
  197 &nbsp;&nbsp;RefreshDisplay<br><br>
  198 END</tt></p>
  199 
  200 
  201 [LEFT]
  202 
  203 <p>    大名鼎鼎的<b>BASIC</b>函數<b>Left$</b>、<b>Right$</b>
  204 和<b>Mid$</b>在<b>Gambas</b>中有了新功能。</p>
  205 
  206 <p><b>Left$</b>和<b>Right$</b>的第二個參數是可選的,預設值爲1。</p>
  207 
  208 <p><tt>Left$("Gambas")</tt> 回傳<tt>"G"</tt><br>
  209 <tt>Right$("Gambas")</tt> 回傳<tt>"s"</tt></p>
  210 
  211 <p>第二個參數可以是負數,它的用途是指定反方向上將被切掉的字元個數。</p>
  212 
  213 <p><tt>Left$("Gambas", -2)</tt> 回傳<tt>"Gamb"</tt><br>
  214 <tt>Right$("Gambas", -2)</tt> 回傳<tt>"mbas"</tt></p>
  215 
  216 <p>相同的,<b>Mid$</b>的第三個參數也可以是負數,指定字串末端將被切掉的字元的個數。</p>
  217 
  218 <p><tt>Mid$("Gambas", 2, -2)</tt> 回傳<tt>"amb"</tt>
  219 
  220 [OBSERVER]
  221 
  222 <p>    <b>Observer</b>類別允許您在物件發出事件之前先攔截它。 </p>
  223 
  224 <pre>MyTextBox = NEW TextBox(ME) AS "MyTextBox"
  225 MyObserver = NEW Observer(MyTextBox) AS "MyObserver"
  226 ...
  227 PUBLIC SUB MyObserver_KeyPress()
  228   DEBUG "Got it first"
  229 END
  230 
  231 PUBLIC SUB MyTextBox_KeyPress()
  232   DEBUG "Got it next"
  233 END</pre>
  234 
  235     <b>Observer</b>能取消事件,防止物件對外發出事件。
  236 
  237 
  238 [STRING]
  239 
  240 <p>    <b>Gambas</b>使用<b>UTF-8</b>字元編碼在記憶體中描述字串。</p>
  241 
  242 <p>但是所有的標準<b>Gambas</b>字串函數只處理<b>ASCII</b>碼: 
  243 <b>Left</b>、<b>Mid</b>、<b>Right</b>、<b>UCase</b>...
  244 
  245 <p>如果想處理UTF-8編碼的字串,必須使用<b>String</b>靜態類別的方法,它們的名字和標準字串處理函數完全相同。
  246 
  247 <pre>PRINT Len("bébé");; Left$("bébé", 3)
  248 6 bé
  249 PRINT String.Len("bébé");; String.Left("bébé", 3)
  250 4 béb</pre>
  251 
  252 
  253 [ASSIGNMENT]
  254 
  255 <p>    <b>Gambas</b>實現了<b>C/C++</b>程序員常用的快捷賦值。 
  256 
  257 <p><tt>MyVariable += 2</tt> 等價於 <tt>MyVariable = MyVariable + 2</tt>
  258 
  259 <p><tt>MyVariable &= "Great"</tt> 等價於 <tt>MyVariable = MyVariable & "Great"</tt>
  260 
  261 <p>諸如此類...
  262 
  263 
  264 [DEBUG]
  265 
  266 <p>    可以使用<b>DEBUG</b>語句列印除錯信息到控制台(也就是stderr),用法和<b>PRINT</b>語句完全一樣。
  267 
  268 <p>除錯信息前綴有類別名稱,方法名稱和<b>DEBUG</b>語句所在的行號。 
  269 
  270 <p>除錯信息在生成不包含除錯信息的可執行檔時會被自動刪除。
  271 
  272 
  273 [TRY]
  274 
  275 <p>    Gambas使用下面的語句實現錯誤管理: 
  276 <b>TRY</b>,<b>ERROR</b>,<b>CATCH</b>和<b>FINALLY</b>。
  277 
  278 <p><b>TRY</b>嘗試執行一個語句而不引發錯誤,隨後使用<b>ERROR</b>語句檢測語句執行中是否發生錯誤。
  279 
  280 <pre>TRY MyFile = OPEN "/etc/password" FOR WRITE
  281 IF ERROR THEN PRINT "I cannot do what I want!"</pre>
  282 
  283 
  284 [CATCH]
  285 
  286 <p>    Gambas使用下面的語句實現錯誤管理: 
  287 <b>TRY</b>,<b>ERROR</b>,<b>CATCH</b>和<b>FINALLY</b>。
  288 
  289 <p><b>CATCH</b>標明函數或者過程中錯誤管理部分(錯誤處理常式)的程式碼的開頭。
  290 
  291 <p>當錯誤發生於函數執行的起始到終止之間時,會跳去執行錯誤處理常式的部分。
  292 
  293 <p>如果錯誤發生於執行錯誤處理常式期間,會繼續向下一層傳送。錯誤處理常式不保護自己!
  294 
  295 <pre>SUB ProcessFile(FileName AS STRING)
  296   ...
  297   OPEN FileName FOR READ AS #hFile
  298   ...
  299   CLOSE #hFile
  300 CATCH ' 只在發生錯誤時執行
  301   PRINT "Cannot process file "; FileName
  302 END</pre>
  303 
  304 
  305 [FINALLY]
  306 
  307 <p>    Gambas使用下面的語句實現錯誤管理: 
  308 <b>TRY</b>,<b>ERROR</b>,<b>CATCH</b>和<b>FINALLY</b>。
  309 
  310 <p>在函數的尾部,<b>FINALLY</b>語句引領的代碼被執行,即使在其執行期間有錯誤發生。
  311 
  312 <b>FINALLY</b>部分是非必要的。如果函數中有錯誤處理常式,<b>FINALLY</b>部分必須位於處理常式之前。
  313 
  314 
  315 <p><b>FINALLY</b>部分是非必要的。如果函數中有錯誤處理常式,<b>FINALLY</b>部分必須位於處理常式之前。
  316  
  317 <p>如果錯誤發生於<b>FINALLY</b>部分執行期間,錯誤會正常傳送。
  318 
  319 <pre>SUB ProcessFile(FileName AS STRING)
  320   ...
  321   OPEN FileName FOR READ AS #hFile
  322   ...
  323 FINALLY ' 即使有錯誤發生也會被執行
  324   CLOSE #hFile
  325 CATCH ' 只在錯誤發生時執行
  326   PRINT "Cannot print file "; FileName
  327 END</pre>
  328 
  329 
  330 [OPTIONAL]
  331 
  332 <h3>Optional</h3>
  333 
  334 <p>在<b>Gambas</b>裡面,函數和程序的參數可以含有選擇性的參數。</p>
  335 
  336 <p>定義選擇性參數的方法是在參數名稱面加上 <b><tt>Optional</tt></b> 關鍵字。</p>
  337 
  338 <p>您也可以在選擇性參數後面加上預設值,例如:</p>
  339 
  340 <pre>Private Sub MyFunction(Param AS String, Optional Optim AS String = "Default")
  341   ...
  342   Print "Required: "; param; ", Optional: "; optim
  343   ...
  344 End</pre>
  345 
  346 
  347 [ARRAY]
  348 
  349 <h3>For Each</h3>
  350 
  351 <p>在 <b>Gambas</b> 裡面,您可以輕易地用迴圈跑過陣列、集合以及其他支援 <b><tt>For Each</tt></b> 的可列舉類別。</p>
  352 
  353 <p>例如:</p>
  354 
  355 <pre>Dim Xml As New XmlDocument
  356 Dim Node As XmlNode
  357 Dim I As Integer
  358 
  359 ' Open XML file
  360 Xml.Open("pokus.xml")
  361 ' Children is indexed via [i], since it's an array
  362 For I = 0 To Xml.Root.Children.Count - 1
  363   'Attributes are looped via For Each, since it's a collection
  364   For Each Node In Xml.Root.Children[i].Attributes
  365     Print Node.Name;; Node.Value
  366   Next
  367 Next</pre>
  368 
  369 
  370 [ICON]
  371 
  372 <h3>預設圖示</h3>
  373 
  374 <p>您可以使用內建的圖示來建構更美觀的圖形程式。這些內建圖示提供多種大小 (<tt>"small"</tt>, <tt>"medium"</tt>, <tt>"large"</tt>,...),您也可以使用絕對大小 (從 16x16 到 256x256)。</p>
  375 
  376 <p>例如:
  377 
  378 <pre>Image1.Picture = Picture["icon:/32/warning"]
  379 Image2.Picture = Picture["icon:/small/error"]
  380 </pre>
  381 
  382 <p><b>警告:</b> 這個功能需要 <tt>gb.form</tt> 元件.
  383 
  384 
  385 [SETTINGS]
  386 
  387 <h3>設定</h3>
  388 
  389 <p>如果您需要在程式中儲存一些設定值 (如視窗位置、大小),您很幸運,在 <b>Gambas</b>
  390 中做到這個是易如反掌。 :-)
  391 
  392 <p>儲存視窗位置:
  393 <pre>Settings.Write(TheForm)</pre>
  394 
  395 <p>回復視窗位置:
  396 <pre>Settings.Read(TheForm)</pre>
  397 
  398 儲存設定的方法:
  399 <pre>Settings["Slot/Key"] = Value</pre>
  400 
  401 讀取設定的方法:
  402 <pre>Value = Settings["Slot/Key", DefaultValue]</pre>
  403 
  404 這些設定將被儲存在 <tt>~/.config/gambas3/&lt;MyApplication&gt;.conf</tt> 中,
  405 <tt>&lt;MyApplication&gt;</tt> 是您的專案名稱。
  406 
  407 <p><b>警告:</b> 這個功能需要 <tt>gb.settings</tt> 元件。
  408 
  409 
  410 [EDITOR]
  411 
  412 <p>來點編輯器的提示...</p>
  413 
  414 <h3>兩種註解類型</h3>
  415 
  416 <pre>' 普通註解</pre>
  417 <b><pre>'' 粗體註解</pre></b>
  418 
  419 <p>粗體註解可以用來替程式碼撰寫文件.</p>
  420 
  421 <h3>如何使用程式碼片段</h3>
  422 
  423 <p>輸入 <tt>main</tt> 然後按下 <b>TAB</b> 鍵. 編輯器將自動插入 static public <tt>Main</tt>
  424 到程式碼中.
  425 
  426 <p>輸入 <tt>ds</tt> 然後按下 <b>TAB</b> 鍵. 編輯器將自動插入區域字串變數的宣告, 之後可以立即輸入變數名稱.
  427 
  428 <p>程式碼片段可以在開發環境的選項中設定.
  429 
  430 
  431 [END]
  432 
  433 <p>    您己讀完所有的每日提示提示。我希望您己經是 <b>Gambas</b> 的專家了!:-)</p>
  434 
  435 <p>如果您想爲Gambas貢獻一份力量,請用電子郵件發送新提示到:</p>
  436 英文:<p><u>g4mba5@gmail.com</u></p>
  437 中文:<p><u>yizhou.he@gmail.com</u></p>
  438 
  439 <p>預先感謝!</p>
  440 
  441 
  442