Umiestnenie komponentu THotPDF na formulár v čase návrhu (design time) je postačujúce pre rýchly prototyp. Tento prístup ale preväzuje komponent so životným cyklom formulára, čo pre produkčný kód nie je vždy celkom to pravé a postačujúce. Pri voľbách kedy má spustiť funkcia na generovanie správy za pomoci stlačenia tlačidla napríklad v jednom úkone, prípadne vlákno poskytujúce služby (service thread) zaradujúce cez noc vývozy vo väčších počtoch naraz alebo bez ohľadu k definovanej vizuálnej stránke prostredníctvom pomocnej triedy (helper class): je vašim prvoradým cieľom v každej zo situácii zaistiť dostupnosť pre spomínaný komponent v presnom limite v nadväznosti pre každý jeden proces na prácu s PDF s jeho okamžitým odstránením na jej samotnom konci. Znamená to teda dynamickú alokáciu počas behu (runtime allocation) nesúcu tak zmeny v dvojici sfér, na ktorých princíp fungovania nesmieme pozabudnúť pred zapísaním akejkoľvek zmienky vo vzťahu prvému riadku: komu a na základe akých práv a za akých náležitostí s ohľadom k premenlivej skutočnosti bude objekt následne aj patriť (owner), ale takisto ako prebehne prípadné samotné upratovanie za podmienok zlyhaní s odozvou odchýlenou z normálneho stavu chýb za daných skutočností s ohľadom výpovednej povahy (cleanup)
Sémantika vlastníka vo VCL
Každý konštruktor vo sfére VCL pre zriadenie komponentu preberá určujúci parameter z pozície podmieňujúceho postavenia v úlohe Owner preberajúc pre parameter samotný typ prislúchajúc k ohraničeniu prameniaceho zo základu za výrazom TComponent*. Samotné priradenie slova this na formovanie pre dané ciele s uplatnením ohraničených sémantík z kategórie vo výrazoch viazania pre sformulovaný základ na platforme zapíše v prvom rade hneď k samotnému príspevku rad novovzniknutých variant do priradenej pre položku navzájom zosúladenú v nadväznostiach, to v plnej miere podmieňuje s vďakou práve zánik ak pri takomto nastavení kedy k formuláru dôjde k trvalému uzatvoreniu zatiaľ čo bol aj napriek vzniknutým zmenám u prvku prislúchajúceho k aplikácií doposiaľ ešte stále zaznamenaný život vo funkčnosti, VCL po vzájomnom potvrdení prístupom k daným úkonom túto entitu ihneď automaticky prepustí do trvalého uvoľnenia z celkovej štruktúry k voľnému sčasti už po novom navrhovanému okruhu možností alokácie. Priamo odovzdanie v tvare zadanom a zameranom k funkčnému variantu obmedzených zoskupení vo formáte pod zápisom pre nullptr sa významom formuje u funkcii výlučne pri podmienkach vzájomne odlíšených o samotného pôvodného zadávateľa: zodpovednosť a vo vzájomnosti spravovanie spojené pre požiadavky od prepojeného odkazu vo vzťahu preukázané pri ukazovateli z danej funkcie beriete okamžite priamo vy sami, žiadnym iným procesom s vďakou voči vám s dodatočnými zámerom úprav a uvoľneniam následne nezariadí žiadna iná funkcia podmienené splnením v okolnosti v situácií kedy s požiadavkou nastane neočakávaný proces za následkom vzniku samotnej zlyhanej sféry ukladania prostredníctvom odvíjajúceho zásobníka (stack) voči formám aplikovaným celkom a o mnoho skôr, ako to zaznamenáte u pre vašu podmienku z vopred stanovenej možnosti delete pre vami nadefinované vlastné použitie
V prostredí k jednorázovému presunutiu dokončenom úspešne po priebehu celkového radu za podmienok obmedzeného prostredia výlučne pri jedinej obalenej funkcií pre uľahčenie výberových krokov, kedy nezávisí z akých dostupných prístupov sformujete krok pre samotný postup: obidve sa dajú formovať so svojim jedinečným variantom ku skupine porúch v chybových stavoch v rámci definície so vzťahmi u vlastného riešenia spustenom v rozlíšených (failure modes). So spomenutým prístupom this zameraným u prvku z kategórie s postavením vlastníka v pozícií zadávateľa zabránite akejkoľvek reálnej strate na unikajúcom zoskupení do okamihu kedy nenastane skutočnosť vyúsťujúca predsa a napokon pri sformulovanom uzatvorení; pri využití parametra akým je typ nullptr u hodnoty, musíte s prispôsobením smerníka vo výslednej fáze dosiahnuť bod k vytvorenému vymedzujúcemu prekážkovému celku označenému u blokovania v termíne s vďakou za výraz obmedzenia formátu __finally. Vo forme u platných skutočností pri samotnom uplatňovaní a prispôsobení modelu z postupov od daného formátu pre kombinovanú zložku v spojitosti od slova nullptr pridávajúc v nadväznosti k slovu ukrytým vo formáte v slove zastrešenom u formy __finally poskytuje v zosumarizovaní omnoho formálnejšie ukážkové vzory čistejšieho zladenia po vizualizácii u prvkov charakterizovaných počas krátkej obmedzenej formy vo fungujúcich cykloch v dĺžkach zo životných hraníc sprístupňujúc vo svojej ukážke takmer v každom formáte v možnosti za okamihoch so zaznamenávaním životností formujúc vo sfére obmedzení bariér pri hľadisku na prvý pohľad, čím rovnako stihne úspešnejšie odvrátiť spomaľujúce javy ohľadom nazbierania celkového formátu za hľadiska zhlukujúcich (accumulating) a previazaných variant od nadbytočnej hromady v sférach prvkov tvoriacich príznačnú dočasnosť (temporary) bez odozvy trvalo zaťažujúce procesy
Štruktúra bezpečná voči výnimkám
U generovania v smere za tvorbou formátu pre PDF dokáže bezohľadne zasiahnuť v úkone zlyhanie a tak stroskotať za podmienok vôbec nijak v podobe ovplyvňujúcich prvkov a nemajúc nič v zhode a vo vzájomnej súčinnosti na funkcie spojené do odozvy nadväzujúce pre postupné odvolávania za rozhranie a dopyty vo všeobecnosti voľaných aplikácii k funkciám prislúchajúc API obmedzeniam: podmieňujúc pri chybovom prenose informácii už vo sfére o k výstupnom okruhu u adresárov formátu vyhradených za obmedzených zistení zo sféry výhradne so zásahmi len za formy so zásahmi slúžiacich ku vopred povoleným krokom u možností na čítanie pre ohraničený presun informácií (read-only), prichádzajúce chybové hlásenie pri zlyhaných zisteniach k voľaniam informácii pre písma na samotné súbory formátu, chýbajúci predčasný presun a nežiadaný prístup vedúci pri včasnej fáze so spláchnutím pre formátované toky, či k dopytu požadujúcom informácie od užívateľa vo forme predloženej žiadosti limitujúce údaje s ohraničením stanoveným k hodnotám k limitu. Bez nutnosti brať v ohľad v konečnom výsledku samotnú príčinu vznikajúcich skutočností u podstát musia následné kroky smerujúce pre odstránenie postupov formujúcich sa k odvolanej stope o možnostiach a samotných snahách pri čistiacej dráhe bežať až v konečnej miere k úspešnému dokončeniu. Ideologický formát z charakteru samotného variantu vo sférach spojených k variantom používaných pre oblasť try/__finally v C++Builderi zaistí splnenie cieľu práve cez dané uplatnené predpoklady vo vzoroch k aplikovanému prispôsobeniu za garantovania výsledku:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma link "HPDFDoc"
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
THotPDF* Pdf = new THotPDF(nullptr);
try
{
Pdf->FileName = "output.pdf";
Pdf->Compression = cmFlateDecode;
Pdf->FontEmbedding = true;
Pdf->BeginDoc();
Pdf->CurrentPage->SetFont("Arial", TFontStyles(), 12);
Pdf->CurrentPage->TextOut(72, 720, 0, L"Hello from C++Builder");
Pdf->EndDoc();
}
__finally
{
delete Pdf;
}
}
Niekoľko vecí v tomto výpise si zaslúži bližšiu pozornosť. Vlastníkom je nullptr, čo robí životný cyklus explicitným. Compression a FontEmbedding sú nastavené pred BeginDoc: obe sú to možnosti na úrovni dokumentu, ktoré HotPDF potvrdzuje pri otvorení dokumentu a ich neskoršie priradenie nemá žiadny účinok. TextOut berie súradnice v bodoch (points) meraných od ľavého dolného rohu stránky, pričom Y rastie smerom nahor; dvojica 72, 720 umiestni text blízko ľavého horného rohu stránky formátu letter s jednopalcovaným ľavým okrajom. Príkaz delete Pdf v bloku __finally sa spustí bez ohľadu na to, či funkcie BeginDoc, kreslenie alebo EndDoc vyvolali výnimku alebo nie
Vyhnite sa volaniu akejkoľvek metódy na objekte Pdf po vykonaní delete. Ak je ukazovateľ uložený v členskej premennej (member variable), hneď po zmazaní ho nastavte na nullptr, aby akýkoľvek prípadný neskorší neúmyselný prístup viedol skôr k čistému zrúteniu (clean crash) ako k tichému poškodeniu (silent corruption)
Konfigurácia projektu
C++Builder nachádza THotPDF pomocou kombinácie include ciest, ciest ku knižniciam a direktívy pragma. Generovaný hlavičkový súbor (header) sídli vedľa súboru HPDFDoc.pas v zdrojovom adresári HotPDF; pridajte tento adresár do Project > Options > C++ Compiler > Include path. Direktíva #pragma link "HPDFDoc" hovorí linkeru, aby vtiahol preloženú jednotku (compiled unit) bez toho, aby ste ju museli ručne vpisovať do súboru projektu. Ak namiesto statického linkovania používate behový balík (runtime package), najprv si nainštalujte návrhárske (design) a behové (runtime) balíčky komponentu HotPDF; daná pragma zostáva naďalej platiť
Ponechajte názov jednotky HPDFDoc bez zmeny. C++Builder odvodzuje názov hlavičkového súboru (header name) z názvu Pascal jednotky, a teda premenovaním súboru alebo použitím aliasu cesty v direktíve pragma by ste tichosti porušili proces vyhľadávania (lookup)
Rozsah platnosti (Scoping) a úlohy s viacerými dokumentmi
Pre jeden export vyvolaný činnosťou používateľa je lokálna premenná obmedzená len na handler tlačidla (button handler) tou správnou voľbou: v jednom volacom rámci (call frame) je tu vytvorená, použitá aj následne zničená, pričom jej zámer zostane pre kohokoľvek prezerajúceho samotný kód v neskorších okamihoch aj naďalej celkom evidentný. Alternatíva aplikovaná s časom na návrh (design-time alternative) si svoje vlastné odôvodnenie obháji vo forme situácie pretrvávajúcej a vo chvíli s prenosom od jedného stvárneného zoskupenia v podnetoch počas nepretržitého chodu riadených úloh formovanou zosumarizovanou sférach, slúžiac ako na uplatňovaný návrh pri panelových úsekov pri voľbe prehliadok náhľadov bez tlače s prepočtami o možných snahách pri znovu stvárňujúcej preukázanej obnove pre stvárňujúce procesy pri samotnom obmedzenom prvku predurčujúc u dokumentov pri danej príležitosti obnovy hneď aj po upravených chvíľach v rámci každého z nastavení, ktoré navolí so samotným uvážením na presne uplatnený podnet práve preukázaným cieľom pre konkrétnych úžívateľov naviazaných v krokoch smerujúcich až k nim v ohraničujúcich voľbách priradených do možností pre ich úpravu vo chvíľach, u takom postavení podmienok s využitým zámerom zachovania živého prostredia s trvajúcim dopadom aj pre komponent uplatňujúc rovnako volania určené k postupom z postupnosti určených radov ako BeginDoc/EndDoc rovnomerne po ich úpravách sa už po vyvolávaných dopytoch aj stáva podmieňovaným u menšieho množstva rušivých prvkov ako pri rovnako stavanom opakovane rozdelených blokov so spájanými okruhmi formujúc v zámeroch za uplatňovania spoločne prítomných podnetov vo sfére obmedzených zón zo sekcií na samotnom vrchole alokujúc od spriahnutých úsekoch hromadného celku voľbou na pridelenie spojenom (repeatedly allocating) naviazaným rovnako ku krokom s nariaďujúcimi cieľmi od zanechania a so samotným prepustením už z oblasti prvkov tvoriacich funkcie po linke podmieňujúc presuny celkov do obmedzených sfér prislúchajúc pod pojem hromada z priradených úloh na objekty prislúchajúc podmieňovaným hromadám vo výraze vo vysporiadaných zámeroch
Pre dávkové úlohy (batch jobs), ktoré produkujú množstvo dokumentov v sérii, je rozsah platnosti (scoping) jedného THotPDF na dokument opodstatnený s ohľadom na alokačnú réžiu. Stav sa medzi dokumentmi neprenáša, ak nie je k dispozícii žiadny objekt, ktorý by ho preniesol, čo predstavuje jednu z kategórií občasných chýb (intermittent bug), ktorú nebudete musieť nikdy odlaďovať. Alokujte, vygenerujte, zmažte, a následne opakujte
Jedna vlastnosť, ktorá sa objavuje vo viacerých ukážkach k HotPDF, je AutoLaunch, zaisťujúca, že sa vygenerovaný súbor po zavolaní EndDoc okamžite otvorí v systémovom prehliadači dokumentov vo formáte PDF. Je to užitočné pri písaní prvej verzie vášho návrhu usporiadania. V reálnej produkcii to preskočte: otvorte explicitne cestu pre výstup, overte, či súbor existuje a jeho veľkosť je odlišná od nuly, výsledok zaevidujte a potom prenechajte volajúcemu (calling workflow) právo rozhodnúť o tom, či je vôbec prehliadač opodstatneným a adekvátne vhodným prístupom k daným obmedzeniam. Pri nejakej dávkovej spracovávanej úlohe, AutoLaunch spúšťa jedno aplikačné okno daného prehliadača dokumentov zodpovedajúcej samotnému kusu vytvoreného formátovaného záznamu, pričom v obmedzeniach procesného priradenia pri určitých súpravách zo sfér okolia k jednotlivým daným koncovým systémom s radosťou zablokuje vo formovanej miere funkciu samotného procesu so zamedzením v úkonoch vo čakaní dokiaľ sa aplikovaný zástupca v samotnej aplikácií pred prehliadač formujúci prístup pre ukážku nakoniec úspešne po požiadavke i nakoniec celkovo od formy navolenej k prehliadaniu aj sám nezatvorí
Zaradený komponent u vopred definovanom postavení reprezentovanom aj samotným predloženým THotPDF a samozrejme priradený u každej sekcie definovaných prístupov ku zložkám voľaní na podmienené predloženia zo sekcií výpisov vyobrazených ako (drawing calls) v takýchto podaniach rovnako aj patria prednostne bez žiadnych zásahov po aplikácii prístupom tvoriacou z úhrnu pre samotnú sféru ako priamou súčasťou ku komponentom zo samotnej sfér pre oblasť za zadefinovaným variantom známa aj v spoločenstve prvkov priamo zúčastnených na produkčnom a definovanom rozvíjaní s názvom HotPDF Component na nasadenie pre Delphi a do úprav z C++Builderovom rozhraní