Dodawanie pomocy w aplikacjach Delphi

sorrow

Opisany przeze mnie sposób jest nieco prostszy niż ten, który już się tu znajduje. Jego główną zaletą jest bardzo niewielka ilość modyfikacji, jakie trzeba przeprowadzić (ograniczona do 2 linijek kodu!). Metoda przetestowana w Delphi 7, nie wiem, jak z innymi wersjami.

Na początek powinniśmy mieć jakiś plik pomocy do naszego programu. Sposób tworzenia i doczepiania go do programu opisany został tutaj, więc powtarzać się nie będę.
Mając plik pomocy należy pamiętać o nadaniu poszczególnym stronom wartości ContextID.
Większość komponentów w Delphi posiada własność HelpContext. Jej wartość ustawiamy tak, aby odpowiadała ContextID strony, która ma się wyświetlić.
Teraz trzeba trochę popisać - każda forma posiada zdarzenie OnHelp, wywoływane przy każdym żądaniu i wyświetlaniu pomocy (czyli np. naciskając F1 zdarzenie wywołane będzie dwa razy). Naszym zadaniem jest dopisać obsługę tego zdarzenia. Wyglądać ono powinno w ten sposób:

function TForm1.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
begin
 if Command=8 then application.HelpContext(Data);
 Result:=true;
end;

Wartość Command=8 jest przekazywana, gdy jest żądanie wyświetlenia konkretnego tematu, ContextID przechowywane jest wtedy w zmiennej Data.
Result:=true zwraca informację o skutecznym wywołaniu pomocy.
Mała uwaga - jeśli w pliku pomocy nie istnieje wybrane ContextID, plik nie zostanie otwarty (dlatego warto domyślny temat pomocy oznaczyć ContextID=0).

Opisany sposób działa zarówno z przyciskiem pomocy w pasku tytułowym, jak i z naciśnięciem F1, gdy dany komponent jest aktywny.

Mam nadzieję, że okazało się to przydatne. Jakby co, pytajcie.
Sorrow.

6 komentarzy

A zdarzenie OnKeyPress? Sorry, jeśli go nie ma w Delphi (zaczynam się gubić w gąszczu tych języków)

Potrzebuje inormacji jak przechwycic w delphi 6 F1?? Chodzi o to ze: po nacisnieciu F1 pojawia mi sie pomoc ktora jest wpisania w inny przycisk.
Mam nadzieje ze jasnow wytlumaczylam. Pozdrawiam Prosze o szybka odpwoiedz.
mary

ee lipa nie działa przynajmniej w 5 enterprise

Ustawianie wyniku funkcji przez przypisanie wartości do nazwy tejże funkcji nie jest zalecane (przestarzałe), zamiast tego należy użyć Result (czyli, w tym przypadku, Result:=True).

Drajwer, a może tak jakoś konkretniej?

ee... czegos tu brak :/