"Fossies" - the Fresh Open Source Software Archive

Member "gambas-3.16.3/app/src/gambas3/tips/tips.sv.txt" (7 Sep 2021, 12056 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>Välkommen till <b>Gambas</b> !</p>
    4 
    5 <p><b>Gambas</b> är en grafiskt utvecklingsmiljö
    6 grundad på en avancerad <i>Basic</i> interpretator.</p>
    7 
    8 <p><b>Gambas</b> mål är att få dig att göra
    9 kraftfulla program, enkelt och snabbt. Men rena strukturerade
   10 program är ditt <i>eget</i> ansvar...</p>
   11 
   12 <p>Lycka till!</p>
   13 
   14 <p align=right>Beno&icirc;t Minisini<br>
   15 <u>g4mba5@gmail.com</u></p>
   16 
   17 
   18 [STARTUP]
   19 
   20 <p>Varje projekt måste ha en <i>startup class</i>. Denna
   21 startup-class måste definiera en statisk publik metod kallad <i>Main</i>
   22 utan argument, som kommer att fungera som uppstartmetod för
   23 ditt program.</p>
   24 
   25 <p>Du kan definiera startup-classen genom att klicka på den med
   26 höger musknapp i projektträdet och genom att välja 
   27 <i>Startup class</i> i popup-menyn.</p>
   28 
   29 <p>Det är inte nödvändigt att definiera en <i>Main</i>-metod i ett startupp-
   30 formulär, ty det har redan en fördefinierad sådan.</p>
   31 
   32 <p>Denna fördefinierade uppstartmetod instansierar formuläret och visar det,
   33 som i <i>Visual Basic&trade;</i>.</p>
   34 
   35 
   36 [OPEN]
   37 
   38 <p><b>OPEN</b>-instruktionen i <b>Gambas</b> fungerar inte på
   39 samma sätt som den i <i>Visual Basic</i>. Den lämnar inte filen,
   40 som ett heltal, utan som ett <i>File</i>-objekt.</p>
   41 
   42 <p>Så i stället för att skriva:</p>
   43 
   44 <pre>DIM handle AS Integer
   45 ...
   46 OPEN "myfile" FOR READ AS #handle</pre>
   47 
   48 <p>måste du skriva:</p>
   49 
   50 <pre>DIM handle AS File
   51 ...
   52 handle = OPEN "myfile" FOR READ</pre>
   53 
   54 
   55 [CATDIR]
   56 
   57 <p>Vet du att du kan slå ihop mappnamn och
   58 filnamn med <b><tt>&/</tt></b>-operatorn? Denna operator
   59 tar hand om avslutande snedstreck "/" så att den resulterande sökvägen
   60 blir perfekt.</p>
   61 
   62 <p>Till exempel:</p>
   63 
   64 <pre>PRINT "/home/gambas" &/ ".bashrc"
   65 /home/gambas/.bashrc
   66 
   67 PRINT "/home/gambas/" &/ "/tmp" &/ "foo.bar"
   68 /home/gambas/tmp/foo.bar
   69 </pre>
   70 
   71 <p>Är det inte förunderligt?</p>
   72 
   73 
   74 [EXEC]
   75 
   76 <p>Du kan göra en körbar fil utgående från ditt hela projekt. Välj
   77 <i>Gör exekverbar</i> i <i>Projekt</i>-menyn.</p>
   78 
   79 <p>När <b>Gambas</b> gör en körbar fil, läggs 
   80 resultatet i din projektmapp som standard. 
   81 Den körbara filen får samma namn som ditt projekt.</p>
   82 
   83 
   84 [PATH]
   85 <p>
   86 Relativa sökvägar har speciell betydelse i <b><i>Gambas</i></b>.
   87 De refererar alltid till filer inuti ditt projekt.
   88 <p>
   89 Det finns ingen innebörd i <i>current directory</i> och inget nyckelord som
   90 <tt>CHDIR</tt> att ändra det.
   91 <p>
   92 <b>Var försiktig:</b> du måste använda relativ sökväg endast för att komma åt
   93 projektfiler, ty absoluta sökvägar fungerar inte längre, när du gör en körbar fil.
   94 
   95 
   96 [GLOBAL]
   97 
   98 Det finns <u>inga globala variabler</u> i <b><i>Gambas</i></b>!
   99 <p>
  100 Ett sätt att kringgå detta är att placera dem i din huvud/main-modul
  101 och deklarera dem som <tt>PUBLIC</tt>.
  102 <p>
  103 Om du inte har en huvud/main-modul i ditt projekt, men ett huvud/main-
  104 formulär, deklarera dem som <tt>STATIC PUBLIC</tt>.
  105 <p>
  106 För att komma åt dessa variabler, måste du använda namnet på huvudmodulen
  107 eller huvudformuläret: <tt>MinMainModul.MinGlobalaVariabel</tt> or
  108 <tt>MinMainForm.MinGlobalaVariabel</tt>.
  109 
  110 
  111 [EMPTY]
  112 
  113 <p>För att veta om en sträng är tom, är det inte nödvändigt att använda
  114 <b>Len()</b>-funktionen. Du kan testa den direkt, eftersom en tom sträng
  115 är <b>FALSE</b> och en icke-tom sträng är <b>TRUE</b>.</p>
  116 
  117 <p>Till exempel, i stället för att göra:</p>
  118 
  119 <pre>IF Len(MyString) > 0 THEN ...
  120 IF Len(MyString) = 0 THEN ...</pre>
  121 
  122 <p>Bör du göra:</p>
  123 
  124 <pre>IF MyString THEN ...
  125 IF NOT MyString THEN ...</pre>
  126 
  127 
  128 [TRANSLATE]
  129 
  130 <p>Gambastillämpningar är helt och hållet översättningsbara, förutsatt att du
  131 talar om vilka strängar som skall översättas.</p>
  132 <p>För att markera att en sträng är översättningsbar, så sätt den bara inom parantester:<p>
  133 
  134 <pre>PRINT ("Översätt mig")
  135 PRINT "Men inte mig!"</pre>
  136 
  137 [EVENT]
  138 
  139 <p>Varje kontroll och varje objekt, som kan ge avbrott, har en
  140 <i>avbrottshanterare</i> och ett avbrotts-<i>group name</i>.</p>
  141 
  142 <p>Avbrottshanteraren fångar varje avbrott åstadkommet av objektet och
  143 avbrottsgruppnamnet är prefix för den procedur, som anropas för att hantera
  144 avbrottet.</p>
  145 
  146 <p>Som standard är denna avbrottshanterare det objekt där du har
  147 skapat kontrollen och gruppnamnet är samma som kontrollens.</p>
  148 
  149 <p>På detta sätt får ett formulär mottaga alla avbrott som åstadkommits
  150 av de kontroller du skapade inuti.</p>
  151 
  152 <pre>' Gambas form
  153 DIM hButton AS Button
  154 
  155 PUBLIC SUB _new()
  156 &nbsp;&nbsp;hButton = NEW Button(ME) AS "MyButton"
  157 END
  158 
  159 PUBLIC SUB MyButton_Click()
  160 &nbsp;&nbsp;PRINT "You have clicked MyButton !"
  161 END
  162 </pre>
  163 
  164 
  165 [FORM]
  166 
  167 <p>I <b><i>Gambas</i></b> är ett formulär sin egen avbrottshanterare, så att
  168 du direkt kan hantera dess avbrott (som <i>Resize</i>, 
  169 <i>Activate</i>, ...) in till dess egen klasskod.</p>
  170 
  171 <p>På detta sätt blir nybörjare, som kommer från <i>Visual Basic</i> inte
  172 disorienterade :-).</p>
  173 
  174 
  175 [EMBED]
  176 
  177 <p>Du kan inbädda vilket formulär som helst i andra formulär med <b><i>Gambas</i></b>
  178 &nbsp;!</p>
  179 
  180 <p>För att åstadkomma en så kraftfull sak, bara instanciera formuläret genom att skicka
  181 ett förälderbehållare (parent container) som sista argument hos konstruktorn (contructor).</p>
  182 
  183 <p>Till exempel&nbsp;:</p>
  184 <p><tt>DIM hForm AS MyDialog<br>
  185 DIM hSuperControl AS MyForm<br><br>
  186 ' Skapa en dialog<br>
  187 hForm = NEW MyDialog<br>
  188 ' Tag in ett formulär i denna dialog<br>
  189 ' Notera att detta formulär tar två parametrar före behållaren (container)<br>
  190 hSuperControl = NEW MyForm(Param1, Param2, MyDialog)<br>
  191 ' Flytta och justera storlek på formuläret<br>
  192 hSuperControl.Move(8, 8, 128, 64)<br>
  193 </tt></p>
  194 
  195 <p>Var uppmärksam: ett formulär inbäddat i ett annat är fortfarande ett formulär och
  196 dessutom sin egen avbrottshanterare.</p>
  197 
  198 
  199 [GROUP]
  200 
  201 <p>Varje kontroll har en <i>(Group)</i>-egenskap. När denna egenskap
  202 sätts, är prefixet för avbrottshanterarens namn, namnet på gruppen
  203 och inte namnet på kontrollen.</p>
  204 
  205 <p>Låt oss anta att vi har en <i>Knapp</i> kallad <b>btnAction</b>
  206 med följande <i>Click</i> avbrottshanterare:</p>
  207 
  208 <pre>PUBLIC SUB btnAction_Click()</pre>
  209 
  210 <p>Om du sätter <i>(Group)</i>-egenskapen hos <b>btnAction</b> till
  211 <i>MyGroup</i>, så kommer avbrotsshanteraren att mottaga avbrott från
  212 knappen att se ut som:</p>
  213 
  214 <pre>PUBLIC SUB MyGroup_Click()</pre>
  215 
  216 <p>Denna egenskap låter dig hantera avbrott från skilda kontroller med
  217 en enkel funktion och kontrollerna i samma grupp behöver inte ha samma typ!</p>
  218 
  219 <p><b>Notera :</b> Den gamle <i>Visual Basic</i>-veteranen kan kanske känna igen
  220 konceptet i <i>kontroll array</i>, men i en kraftfullare implementering. :-)</p>
  221 
  222 
  223 [TAG]
  224 
  225 <p>Varje kontroll har en <i>Tag</i>-egenskap. Denna är till för
  226 programmeraren och kan innehålla vilken <b>VARIANT</b>-data som du tycker är relevant.</p>
  227 
  228 <p>Detta är mycket användbart, när du vill åtskilja kontroller i
  229 samma grupp i en gemensam avbrottshanterare.</p>
  230 
  231 
  232 
  233 [LAST]
  234 
  235 <p>Nyckelordet <b>LAST</b> returnerar den sista kontroll, som
  236 har mottagit ett avbrott. Detta är mycket användbart om du vill skriva en
  237 avbrottshanterare, som är oberoende av namn på kontroller.</p>
  238 
  239 <p>Till exempel, låt oss anta du vill skriva ett kalkylatorprogram.
  240 Du har definierat tio knappar, en för varje siffra, var och en i 
  241 samma <i>group</i> "Digit". <i>Tag</i>-en för varje kontroll sätts till
  242 siffran ritad i knappen. Din avbrottshanterare skulle kunna se ut som:</p>
  243 
  244 <p><tt>PUBLIC SUB Digit_Click()<br><br>
  245 &nbsp;&nbsp;Display = Display & LAST.Tag<br>
  246 &nbsp;&nbsp;RefreshDisplay<br><br>
  247 END</tt></p>
  248 
  249 
  250 [LEFT]
  251 
  252 <p>De välkända <i>BASIC</i> rutinerna <b>Left$</b>, <b>Right$</b>
  253 och <b>Mid$</b> har användbara uppträdande i <b><i>Gambas</i></b></p>
  254 
  255 <p>Andra parametern i <b>Left$</b> och <b>Right$</b> är
  256 frivillig och sätts till ett som standard.</p>
  257 
  258 <p><tt>Left$("Gambas")</tt> returnerar <tt>"G"</tt><br>
  259 <tt>Right$("Gambas")</tt> returnerar <tt>"s"</tt></p>
  260 
  261 <p>Andra parametern kan vara negativ och betyder då antal
  262 tecken som ej skall tas ut.</p>
  263 
  264 <p><tt>Left$("Gambas", -2)</tt> returnerar <tt>"Gamb"</tt><br>
  265 <tt>Right$("Gambas", -2)</tt> returnerar <tt>"mbas"</tt></p>
  266 
  267 <p>På samma sätt med tredje argumentet till <b>Mid$</b> kan vara negativt och
  268 ger då antal tecken från slutet på strängen som ej skall tas ut.</p>
  269 
  270 <p><tt>Mid$("Gambas", 2, -2)</tt> returnerar <tt>"amb"</tt>
  271 
  272 [OBSERVER]
  273 
  274 <p><b>Observer</b>-klassen tillåter dig att fånga upp alla händelser skapade
  275 av ett objekt innan de verkligen sänds.</p>
  276 
  277 <pre>MyTextBox = NEW TextBox(ME) AS "MyTextBox"
  278 MyObserver = NEW Observer(MyTextBox) AS "MyObserver"
  279 ...
  280 PUBLIC SUB MyObserver_KeyPress()
  281   DEBUG "Got it first"
  282 END
  283 
  284 PUBLIC SUB MyTextBox_KeyPress()
  285   DEBUG "Got it next"
  286 END</pre>
  287 
  288 "Observatören" kan avbryta händelsen för att förhindra att objektet att åstadkommer den (händelsen).
  289 
  290 
  291 [STRING]
  292 
  293 <p>Gambas använder <b>UTF-8</b>-teckensätt för att representera strängar i minnet.</p>
  294 
  295 <p>Men alla Gambas standardsträngfunktioner hanterar <b>ASCII</b>: 
  296 <tt>Left</tt>, <tt>Mid</tt>, <tt>Right</tt>, <tt>UCase</tt>...
  297 
  298 <p>Om du vill manipulera UTF-8-strängar, måste du använda metoder hörande till
  299 <b>String</b>-static klass, vilka har samma namn som deras motsvarande standard.
  300 
  301 <pre>PRINT Len("bébé");; Left$("bébé", 3)
  302 6 bé
  303 PRINT String.Len("bébé");; String.Left("bébé", 3)
  304 4 béb</pre>
  305 
  306 
  307 [ASSIGNMENT]
  308 
  309 <p>Gambas implementerar förenklad tilldelning, som C/C++ programmerare är vana vid.
  310 
  311 <p><tt>MyVariable += 2</tt> är samma sak som <tt>MyVariable = MyVariable + 2</tt>
  312 
  313 <p><tt>MyVariable &= "Great"</tt> är samma sak som <tt>MyVariable = MyVariable & "Great"</tt>
  314 
  315 <p>och så vidare...
  316 
  317 
  318 [DEBUG]
  319 
  320 <p>Du kan använda <b>DEBUG</b>-instruktionen till att skriva ut avlusningsmeddelandem
  321 till konsolen (nämligen standard error output). Den uppför sig precis som <tt>PRINT</tt>-
  322 instruktionen.
  323 
  324 <p>Dessa meddelanden föregås av klassnamn, metodnamn och radnummer för
  325 <tt>DEBUG</tt>-instruktionen.
  326 
  327 <p>Debugmeddelandena tas automatiskt bort när en exekverbar fil
  328 utan avlusningsinformation görs.
  329 
  330 
  331 [TRY]
  332 
  333 <p>Felhantering i Gambas görs med följande instruktioner: 
  334 <b><tt>TRY</tt></b>, <b><tt>ERROR</tt></b>, <tt>CATCH</tt> och <tt>FINALLY</tt>.
  335 
  336 <p><tt>TRY</tt> försöker utföra en sats utan att åstadkomma ett fel. <tt>ERROR</tt>-
  337 instruktionen används just för att ta reda på om satsen utfördes korrekt.
  338 
  339 <pre>TRY MyFile = OPEN "/etc/password" FOR WRITE
  340 IF ERROR THEN PRINT "I cannot do what I want!"</pre>
  341 
  342 
  343 [CATCH]
  344 
  345 <p>Felhantering i Gambas görs med följande instruktioner: 
  346 <tt>TRY</tt>, <tt>ERROR</tt>, <b><tt>CATCH</tt></b> och <tt>FINALLY</tt>.
  347 
  348 <p><tt>CATCH</tt> utvisar början på felhanteringsdelen i en funktion eller procedur. 
  349 Den placeras i slutet på funktionskoden.
  350 
  351 <p>Catch-delen utförs när ett fel har åstadkommits mellan början på funktionen och dess slut.
  352 
  353 
  354 <p>Om ett fel inträffar under utförande av catch-delen, fångas den. 
  355 
  356 <pre>SUB ProcessFile(FileName AS STRING)
  357   ...
  358   OPEN FileName FOR READ AS #hFile
  359   ...
  360   CLOSE #hFile
  361 CATCH ' Utförs endast om det finns ett fel
  362   PRINT "Cannot process file "; FileName
  363 END</pre>
  364 
  365 
  366 [FINALLY]
  367 
  368 <p>Felhantering i Gambas görs med följande instruktioner: 
  369 <tt>TRY</tt>, <tt>ERROR</tt>, <tt>CATCH</tt> och <b><tt>FINALLY</tt></b>.
  370 
  371 <p><tt>FINALLY</tt> inleder den kod, som utförs vid slutet av funktionen, även om ett fel åstadkomms under funktionsutförandet. 
  372 
  373 <p>Finally-delen är inte obligatorisk. Om det finns en catch-del, så måste finally-delen föregå den. 
  374  
  375 <p>Om ett fel inträffar under utförande av finally-delen, fortsättes normalt.
  376 
  377 <pre>SUB ProcessFile(FileName AS STRING)
  378   ...
  379   OPEN FileName FOR READ AS #hFile
  380   ...
  381 FINALLY ' Utförs alltid, även om fel inträffat
  382   CLOSE #hFile
  383 CATCH ' Utförs endast om fel inträffat
  384   PRINT "Cannot print file "; FileName
  385 END</pre>
  386 
  387 
  388 
  389 [END]
  390 
  391 <p>Du har nu lästa alla Dagens Tips. Hoppas att du blivit
  392 en <b>Gambas</b>-expert nu! :-)</p>
  393 
  394 <p>Om du vill bidraga, sänd nya tips till följande
  395 adress&nbsp;:</p>
  396 <p><u>g4mba5@gmail.com</u></p>
  397 
  398 <p>Tack på förhand!</p>
  399 
  400 
  401