Pomoc w Delphi

Adam Boduch

Często gdy piszemy program myślimy: "Fajnie by było do niego napisać pomoc, ale jak to zrobić?". No właśnie. W takim przypadku też chodzi o to, aby po naciśnięciu na odpowiedni przycisk otwierała się strona pomocy odpowiadająca temu przyciskowi. No więc jak to zrobić?

Przede wszystkim potrzebny nam będzie odpowiedni program do tworzenia plików pomocy. Polecam: "Oasis" - prosty i szybki.

Teraz gdy tworzysz pomoc potrzebujesz nadać każdej stronie odpowiedni kontekst. Tylko dla tych stron dla których chcesz wykorzystać z swoim programie. Np. tworzysz stronę z opisem funkcji "Otwórz". Możesz wówczas nadać jej numer 0. Kolejna strona będzie o jeden numer większa. W programie "Oasis" robi się to naciskając prawym przyciskiem myszy na stronie i wybierając opcję "Contect ID". Nadajesz jej następnie jakiś numer np. 0, itd., itp. Teraz musisz skompilować pomoc ( "Project" -> "Compile" ). Do katalogu z Twoim programem musisz skopiować plik pomocy ( *.hlp ) jak i również plik ze spisem treścio ( *.cnt ). Teraz musisz uruchomić Delphi - będziemy musieli trochę popisać :)

Ok, uruchomiłeś już swój progam? Teraz musisz dopisać jedną linie w procedurze "OnCreate":

Application.HelpFile := 'NazwaPlikuPomocy.hlp';

Teraz w sekcji "private" dopisz takie oto dwie linie:

HelpMode : Boolean;
procedure DoHelp(ID : Integer);

Uzupełnij procedurę "DoHelp" ( najeżdżasz kursorem na nazwę i wciskasz Shift + Ctrl + C ). Deklaracja powinna wygladać w ten sposób:

procedure TMainFrm.DoHelp(ID: Integer);
begin
  Application.HelpContext(ID);
end;

Teraz musisz na formie umieścić przycisk, który będzie zmieniał wartość zmiennej "HelpMode". Oto deklaracja procedury "OnClick" przycisku:

procedure TMainFrm.Button1Click(Sender: TObject);
begin
  HelpMode := not HelpMode;
    if HelpMode then
      Screen.Cursor := crHelp
    else 
      Screen.Cursor := crDefault;
end;

Procedura zmienia wartość zmiennej "HelpMode" - jeżeli była "True" zmienia na "False" i odwrotnie. Jeżeli jest to wartość "True" zmienia kursor na "crHelp".

Już prawie wszystko gotowe. Teraz załóżmy, że masz jakiś przycisk, który wyświetla okno "Otwórz". Procedura taka wyglądać będzie tak:

procedure TMainFrm.FileOpenClick(Sender: TObject);
begin
//otworz okno dialogowe 
  OpenDialog.Execute;
end;
Procedurę taką musisz teraz zmodyfikować do takiej postaci:

procedure TMainFrm.FileOpenClick(Sender: TObject);
begin
if HelpMode then  // jeżeli "HelpMode" = "True"
  begin
    DoHelp(0); // wczytaj odpowiednią stronę w pliku pomocy
    Exit; // później nie rób nic
  end;
//otworz okno dialogowe 
    OpenDialog.Execute;

W takim przypadku jeżeli zmienna "HelpMode" ma wartość "True" zostanie otwarty plik pomocy i wczytana zostanie strona pomocy oznaczona kontekstem 0.

Żeby to lepiej zrozumieć możesz ściągnąć sobie program "Pad", w którym taka metoda również została zastosowana.

7 komentarzy

a nie prosciej jest tak:
uses ShellApi;
...
ShellExecute(0,'open','plik_pomocy.hlp',,,SW_SHOWNORMAL);

Ten oasis nie dziala!! :-( Jak robie compile to tworzy jakieś dziwne pliki a hlp nie ma

Brakuje tu takiej rzeczy, jak pokazanie pliku pomocy z aktywną zakładką "Zawartość", "Indeks" lub "Znajdź", a nie jedynie wybranego tematu.

LX a co to za różnica? :/

Zamiast wpisywać Application.HelpFile := 'NazwaPlikuPomocy.hlp';
Można wybrać plik hlp w Project->Options->Application

Jest na tej stronie w dziale programy, Oasis...

Spox, tylko... zamieść jakiś program do helpów!