GKO 2007

Pääteohjaustehtäviä 10 / 12.-13.11

1. Avustus WinHelpillä

1.
Kirjoita avustuksen alkua omaan ohjelmaasi. Kopioi aluksi tiedosto n:\kurssit\winohj\oop\apf\mfc\vaihtaja\help2000.dot omaan hakemistoosi. Käynnistä sitten Word 2000 (jos vanhempi Word, niin käytä help97.dot tai help.dot ), avaa uusi tiedosto ja valitse malliksi (template) HELP2000 (Tools/Templates and Add-Ins../Document template/Attach ja tarkista vielä että Add automatically... on päällä).
2.
Ennen aloittamista tarkista, että makrossa Testaa (Tools/Macro/Macros ja valitse Testaa ja Edit) rivi
 WordBasic.Shell "C:\PROGRA~1\Borland\Delphi6\Help\Tools\hcw /c /m /e" + 
                         BaseName$, 1
todella osoittaa sinne, missä hcw.exe on. Samoin tarkista että tiedostojen sijaintipolku on oikein (Tools/Options/File locations/Documents , tässä tulee joko olla . tai se hakemisto, jossa työskentelet).
3.
Kirjoita avustustiedosto .rtf-nimellä (mieluiten tietysti omaan työhösi liittyen) ja testaa sitä. (jostain syystä pitää kerran avata ja sulkea .err-tiedosto käsin).
    Käyttö:
     0) Tee heti ensimmäiseksi File saveAs oikeaan hakemistoon ja 
        .doc-päättellä
     1) Vaihda näyttömuodoksi normaali (View/Normal).
     2) Jaa avustuksesi "sivuihin".  Kukin sivu erotetaan 
        Sivunvaihdolla (Ctrl-Enter)
     3) Kunkin sivun 1. rivi kannattaa merkitä otsikoksi Heading1 
        tai Heading2-tyylillä.  Älä käytä tyhjiä rivejä! 
        (Ctrl-1, Ctrl-2)
     4) Mene yhden kerran kunkin sivun 1.riville ja paina nappulaa
        "NimiJaOsoite" (Ctrl-Shift-N). Tämä makro tekee tarvittavat
        hyppypaikat ja otsikot sivulle.
     5) Jos haluat hypätä johonkin kohti, mene Footnotes-ikkunassa
        hyppypaikkaa vastaavalle #-riville ja paina OtaHyppy 
        (Ctrl-Shift-O).
     6) Siirry sille tekstissä siihen paikkaan, josta haluat hypätä
        tähän kohti, maalaa se sana,jonka haluat linkiksi.  Paina
        2alleviivaus (Ctrl-Shift-A). 
        Siirry sanan loppuun ja paina LisaaHyppy (Ctrl-Shift-L)
     7) Kun haluamasi hypyt on merkitty, paina Testaa (Ctrl-Shift-T).
     8) Korjaile ja testaa uudelleen.
     9) Lisäile myös avainsanoja: mene sanan kohdalle ja paina KeyWord 
        (Ctrl-Shiftf-K)
    10) Anna myös lukemisjärjestys: Mene kunkin sivun alkuun ja paina
        JarjNro (Ctrl-Shift-J) ja sitten Footnotes ikkunaan syntyvän 
        + -merkin kohdalla kirjoita juokseva tunnus, esim. 00, 01 jne...
4.
Delphissä avustuksen saa auki esimerkiksi suorittamalla komennon
     Application.HelpJump('Elaimet'); 
       // Haluttu #-tunnistemerkkijono .hlp-tiedostosta
Ensin pitää kuitenkin olla esim. .dpr-tiedoston alussa sijoitus:
     Application.HelpFile := 'elukat.hlp';
Voi myös kirjoittaa .hpj-tiedoston [MAP]-osaan:
     [Map]
     #define kissa 100
     #define koira 101
ja sitten laittamalla halutun Delphi-komponentin HelpContext-kohtaan noita vastaavia numeroita. Ja avustustiedostossa täytyy tietysti olla sitten nuo mainitut tunnistemerkkijonot (niitä #:lla Footnotes-ikkunassa merkittyjä).
On myös mahdollista vaihtaa komponentin ominaisuus HelpType muotoon: htKeyword. Tällöin ominaisuuteen HelpKeyWord voi kirjoittaa alaviitteellä K-merkittyjä sanoja. Koodista voi myös suoraan hypätä avainsanaan kutsulla
    Application.HelpKeyWord('Kissa'); 
       // Haluttu K-alaviite .hlp-tiedostosta
Huom! KeyWord-käytössä helpin pitää olla auki, jotta hypyt toimivat?

2. Avustus HTML:llä

5.
Kirjoita erittäin minimaalinen HTML- tiedosto (yhden valmiin saat esim: n:\kurssit\winohj\help\html\Elaimet.html)
6.
Tee Delphillä erittäin minimaalinen WWW- selain, jossa on vain yksi HTML- komponentti ( TWebBrowser), Edit- ikkuna ja nappula Hae.
7.
HTML- komponenttiin voit hakea dokumentin komennolla
     WebBrowser.Navigate(EditURL.Text);
8.
Edit- ikkunaan pitää kirjoittaa www-linkki tai tiedoston koko polku (?). Jos halutaan välttää absoluuttisia polkuja - kuten aina pitäisi - ja kuitenkin hakea tiedostoa samasta hakemistosta kuin missä ohjelma on, voidaan nimi selvittää seuraavasti (esim. FormCreatessa)
     EditUrl.Text := ExtractFilePath(ParamStr(0)) + 'Elaimet.html'
Vastaavasti nykyhakemisto asetettaisiin polun eteen (nykyhakemisto voi olla eri kuin se, mistä ohjelma on käynnistetty):
     GetDir(0,dir); // dir:string jossakin
     EditUrl.Text := dir + '\' + 'Elaimet.html'; 
       // GetDir ei laita loppuun \-merkkiä!
9.
Jos F1 nappula halutaan toimimaan ja tähän vielä sisältöpohjainen avustus, niin silloin voidaan kirjoittaa lomakkeen OnHelp-tapahtumaan esimerkiksi koodi:
     function TForm1.FormHelp(Command: Word; Data: Integer;
       var CallHelp: Boolean): Boolean;
     var ctl : TControl; fn:string;
     begin
       ctl := ActiveControl;
       fn := ExtractFilePath(ParamStr(0)) + '..\html\elaimet.html';
       WebBrowser1.Navigate(fn+'#'+ctl.HelpKeyword);
       CallHelp := false;
       Result := true;
     end;
Lomakkeen BorderIcons-ominaisuudesta tulee biHelp laittaa todeksi. Sitten nappuloihin yms. kontrolleihin laitetaan HelpKeyword halutuksi <a name="???"></a> tagilla merkittyyn hyppypaikkaan. Jotta F1 toimisi, pitää vielä valita ainakin lomakkeella HelpContext-kohtaan jokin nollasta poikkeava arvo.