Pääteohjaustehtäviä 12 / 24-25.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ä

1.
Kirjoita erittäin minimaalinen HTML- tiedosto (yhden valmiin saat esim: n:\kurssit\winohj\help\html\Elaimet.html)
2.
Tee Delphillä erittäin minimaalinen WWW- selain, jossa on vain yksi HTML- komponentti ( TWebBrowser), Edit- ikkuna ja nappula Hae.
3.
HTML- komponenttiin voit hakea dokumentin komennolla
	WebBrowser.Navigate(EditURL.Text);
4.
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ä!
5.
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.