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.
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 :/