Cum se lucrează cu sistemul de ajutor în Delphi 7


Așa cum am dori să facem noua aplicație un sistem standard de ajutor, dar toate sfaturile care spun - fă-o și asta e și totul va fi "OK" - nu funcționează. A trebuit mult timp să "luăm" documentația și codul sursă pentru ca totul să funcționeze și acum merită să ne împărtășim cu toată lumea. Nu vor exista oferte repetate de manuale diferite, deoarece nu lucrau în aplicații MDI. Iată rezultatele finale care funcționează stabil în aplicațiile MDI cu apeluri multiple la formulare suplimentare de la copil.






Notă 1. Acolo unde lucrarea va fi descrisă în Delphi 7, numai pentru că rețetele propuse în ea au fost verificate. Este posibil ca aceste rețete să funcționeze și în alte versiuni, dar acest lucru nu a fost testat.
Notă 2. Pentru dezvoltarea fișierului Ajutor, a fost folosit HelpManual 4.0. Acesta este unul dintre cele mai bune programe, dar are o "zbura în unguent" - Plug-in pentru Delphi, care ajută la aranjarea numărului de subiecte pentru proiect. De fapt, utilizarea lui duce la multe probleme. În cazul în care programul HelpManual este instalat, trebuie notat în opțiunile că acest plug-in nu ar trebui instalat. Altfel - trebuie reinstalat. Deși pentru aplicația în sine nu contează în ce program se face fișierul de ajutor.
Deci, să începem:

Lucrați într-o singură aplicație de ferestre (aplicație SDI)

Acesta este cel mai simplu caz și în care funcționează versiunea care a fost inventată de Borland. Și anume:
- În formularul HelpFile, trebuie să înregistrați calea către fișierul sistemului de ajutor. Dacă este scris doar numele fișierului, atunci aplicația va căuta sistemul de ajutor în același loc unde este aplicația. Această proprietate poate fi generată prin procesarea evenimentului onFormCreate și apoi scrierea căii complete în fișierul de ajutor.
- Pentru fiecare obiect din proprietatea HelpContext, specificați numărul de subiect, care corespunde acestui control-y. Plug-in-ul de la HelpManual creează automat Topic invizibil - și pentru EACH Control și le prescrie numerele. Dar, în primul rând, nu fiecare obiect necesită tema sa, și în al doilea rând - adesea, mai multe controale necesită o temă - a. A corecta o situație este adesea mai dificilă decât crearea din nou.






Și, în principiu, acest lucru este suficient pentru a ajuta sistemul de ajutor. Așa a conceput firma Borland. Și totul ar fi bine dacă această aplicație SDI nu numește alte forme, de exemplu, o formă modală pentru introducerea datelor. Apoi, există probleme legate de aplicațiile cu ferestre multiple.
Cu toate acestea, numerele de prescriere nu sunt foarte convenabile - puteți obține întotdeauna ceva amestecat. Prin urmare, există oa doua opțiune. Utilizați nu numere, dar TopicID - identificator de text.
Dar, în același timp, este necesar să distrugem urmele activității anterioare. Faptul este că, dacă în proiect (sub orice formă) proprietatea HelpContext a fost umplută, atunci Delphi va intercepta evenimentul onKeyDown și va procesa însăși cheia F1. Pentru verificare, puteți folosi următorul cod:

După aceasta, puteți începe să lucrați cu tasta F1.
Primul lucru pe care trebuie să-l faceți este să creați sistemul de ajutor, valorile tuturor subiectelor Topic care sunt legate la obiecte specifice, egale cu numele obiectelor pentru care sunt create. Aceasta nu este o cerință a sistemului, dar reduce semnificativ numărul de erori.
În al doilea rând, când creați un formular, determinați calea spre fișierul sistemului de ajutor.

Apoi puteți apela ajutorul unui anumit obiect după cum urmează:

unde parametrul din funcția HelpJump este un TopicID.

Lucrul în aplicația Multi-Window (aplicația MDI)

aplicație multi-fereastră este caracterizat prin aceea că, mai întâi - fiecare formular poate corespunde unui sistem de fișiere de referință, și în al doilea rând - orice formă poate provoca alte modale sau modul normal, și că, la rândul său, este o alta. Exemplul anterior cu metoda HelpJump funcționează într-o aplicație MDI numai când este apelat de la un formular copil care a fost numit de forma principală, la rândul său. De îndată ce forma copil este orice dialog, Delphi trimite apelul la părinte fereastra Help, iar fereastra HelpContext părinte nu este definită ca o eroare. Acest lucru este cauzat de faptul că WinHelp deschide fișierul de ajutor de două ori înainte de a se deschide. Mai precis, numărul de deschideri corespunde nivelului de apel al formei, adică Dacă forma copilului este numită altul, din care este apelat ajutorul, atunci numărul de deschideri din fișierul de ajutor va fi de trei. Ajutorul este deschis pe această temă, care a fost prima în fișierul .CNT.
Pentru a face un sistem de ajutor de lucru într-o aplicație MDI, trebuie să utilizați următorul cod în fiecare formular:

Constantele care definesc numărul HelpContext pentru fiecare TopicID sunt cel mai bine scrise la început într-un singur loc, pentru a face mai ușor schimbarea. În aceleași scopuri, numele constante corespund cu numele obiectelor cu adăugarea prefixului "hlp_".
Apoi, în evenimentul FormCreate, ID-ul ferestrei de formular este scris la variabila fmhWND.

În evenimentul FormClose, este furnizată o ieșire directă WinHelp pentru a închide actualul sistem de ajutor.

În cele din urmă, pentru fiecare obiect din evenimentul KeyDown, se înregistrează procesarea cheii F1:

Apelarea sistemului de ajutor din meniu







Articole similare

Trimiteți-le prietenilor: