Delphi и Lazarus компилиÑÐ°Ñ ÐµÐ´Ð¸Ð½ и ÑÑÑ Object Pascal и именно Ñова повÑÑÑ
ноÑÑно ÑÑ
одÑÑво пÑави поÑÑиÑанеÑо на визÑализаÑÐ¾Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ
Ñолкова измамно. ÐвеÑе веÑиги Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑи (toolchains) Ñе ÑÐ°Ð·Ð¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð½Ð° ÑÑи меÑÑа, коиÑо Ñа Ð¾Ñ Ð·Ð½Ð°Ñение за ÑабоÑаÑа Ñ PDF: ÑиÑÑемниÑÑ Ñип string е UTF-16 в Delphi и UTF-8 в LCL пÑиложение; VCL и LCL Ñа ÑазлиÑни визÑални библиоÑеки ÑÑÑ ÑобÑÑвени конÑÑоли, диалози и ÑоÑмаÑи за ÑÑÑийминг на ÑоÑми; а Delphi бинаÑниÑÑ Ñайл е наÑоÑен кÑм Windows, докаÑо FPC бинаÑниÑÑ Ñайл може да бÑде пÑедназнаÑен за Linux или macOS. ÐиÑо една Ð¾Ñ Ñези Ñазлики не Ñе поÑвÑва по вÑеме на компилаÑиÑ. ÐизÑализаÑоÑ, изгÑаден Ñ PDFium Component (койÑо пÑедоÑÑÐ°Ð²Ñ VCL и LCL веÑÑии Ð¾Ñ ÐµÐ´Ð½Ð¾ и ÑÑÑо кодово дÑÑво), Ñе Ñе компилиÑа ÑÑпеÑно под Lazarus Ñлед нÑколко замени на имена на модÑли и нÑколко {$IFDEF FPC} блока. ÐÑоблемиÑе вÑÐ·Ð½Ð¸ÐºÐ²Ð°Ñ Ð¿Ð¾-кÑÑно, когаÑо ÑеалниÑе данни и ÑеалноÑо внедÑÑване ÑазкÑиÑÑ Ð¿ÑедположениÑÑа, коиÑо Delphi компилаÑиÑÑа ÑиÑ
о е пÑавила.
ЧеÑиÑи Ð¾Ñ Ñези пÑÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñа пÑиÑина за по-голÑмаÑа ÑаÑÑ Ð¾Ñ Ð¸Ð·Ð³ÑбеноÑо вÑеме: кодиÑанеÑо на ÑекÑÑа на гÑаниÑаÑа Ñ Ð¿Ð¾ÑÑебиÑелÑÐºÐ¸Ñ Ð¸Ð½ÑеÑÑейÑ, изкÑÑениеÑо да Ñе поддÑÑÐ¶Ð°Ñ Ð´Ð²Ðµ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð° ÑоÑмаÑа, наÑинÑÑ, по койÑо Ñе заÑежда наÑивнаÑа библиоÑека на енджина по вÑеме на изпÑлнение, и моменÑÑÑ, в койÑо ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸ÑÑа за пÑеобÑазÑване на ÑекÑÑ Ð² ÑÐµÑ (text-to-speech) оÑÑава без плаÑÑоÑма Ñлед пÑÐµÐ¼Ð°Ñ Ð²Ð°Ð½ÐµÑо на SAPI. СпÑавÑнеÑо Ñ Ð²Ñеки Ð¾Ñ Ñези пÑоблеми е леÑно, ако знаеÑе за него пÑедваÑиÑелно, и изклÑÑиÑелно ÑÑÑдно за оÑкÑиване, ако не го оÑакваÑе.
Ðдин и ÑÑÑ Pascal, ÑазлиÑни низове
СиÑÑемниÑÑ Ñип string в Delphi е UTF-16 Ð¾Ñ 2009 г. Lazarus и Free Pascal по подÑазбиÑане Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ UTF-8 в LCL пÑиложениÑ. ÐÑиложниÑе пÑогÑамни инÑеÑÑейÑи (API) за ÑекÑÑ Ð½Ð° компоненÑа Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ UTF-16 ÑÑез Ñипа WString (койÑо пÑи FPC Ñе деÑиниÑа каÑо WideString), Ñака Ñе вÑÑка гÑаниÑа, пÑез коÑÑо пÑеминава ÑекÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ð°ÑÐ¸Ñ LCL инÑеÑÑÐµÐ¹Ñ Ð¸ PDF енджина, изиÑква пÑеобÑазÑване.
ÐÑеобÑазÑваниÑÑа Ñе ÑлÑÑÐ²Ð°Ñ Ð°Ð²ÑомаÑиÑно пÑи диÑекÑни пÑиÑвоÑÐ²Ð°Ð½Ð¸Ñ Ð¸ в повеÑеÑо ÑлÑÑаи нÑма нÑжда да Ñе миÑли за ÑÑÑ . Ðве добÑи пÑакÑики пÑедоÑвÑаÑÑÐ²Ð°Ñ Ð±Ñгове Ñ ÐºÐ¾Ð´Ð¸ÑанеÑо. ÐÑедавайÑе ÑекÑÑа диÑекÑно без манипÑлаÑии на ниво байÑ: код, койÑо ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð´Ñма за ÑÑÑÑене по байÑово оÑмеÑÑване, ÑабоÑи в Delphi, кÑдеÑо един Char е един UTF-16 елеменÑ, но Ñе повÑеди многобайÑÐ¾Ð²Ð¸Ñ UTF-8 в LCL. ÐÑвен Ñова ÑеÑÑвайÑе Ñ Ð´Ð°Ð½Ð½Ð¸ извÑн ASCII диапазона оÑе Ð¾Ñ Ð¿ÑÑвоÑо пÑÑкане. ÐемÑко име на Ñайл, киÑилиÑа пÑи ÑÑÑÑене или име на авÑÐ¾Ñ Ñ Ð´Ð¸Ð°ÐºÑиÑиÑни знаÑи в меÑаданниÑе на докÑменÑа: ÑеÑÑовиÑе данни Ñ ÑиÑÑ ASCII ÑкÑÐ¸Ð²Ð°Ñ Ð²Ñеки деÑÐµÐºÑ Ð² кодиÑанеÑо, ÑÑй каÑо ASCII е единÑÑвениÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½, в койÑо UTF-8 и UTF-16 ÑÑÐ²Ð¿Ð°Ð´Ð°Ñ Ð±Ð°Ð¹Ñ Ð¿Ð¾ байÑ. ÐÑгÑÑ ÑÑÑеÑÑвÑва пÑез ÑÑлоÑо вÑеме, но ASCII го дÑÑжи невидим, докаÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð² ÐÑÐ½Ñ ÐµÐ½ не оÑвоÑи Ñайл, койÑо никога не ÑÑе ÑеÑÑвали.
Ðдин ÑÑловен блок, а не Ñазклонение за вÑÑка ÑÑеда за ÑазÑабоÑка (IDE)
След пÑÑвиÑе деÑеÑина блока Ñ IFDEF, кодÑÑ Ð°Ð²ÑомаÑиÑно запоÑва да изглежда каÑо два пÑоекÑа в едно Ñ ÑанилиÑе и ÑазделÑнеÑо Ð¼Ñ Ð·Ð° вÑÑко IDE изглежда изкÑÑаваÑо. Това обаÑе е гÑеÑен Ñ Ð¾Ð´. ÐейÑÑвиÑелниÑе Ñазлики Ñе ÑÐ²ÐµÐ¶Ð´Ð°Ñ Ð´Ð¾ един Ð¾Ð±Ñ Ð±Ð»Ð¾Ðº Ð¾Ñ Ð´ÐµÐºÐ»Ð°ÑаÑии, а ÑазделÑнеÑо на пÑоекÑа ÑдвоÑва ÑÐ°Ð·Ñ Ð¾Ð´Ð¸Ñе за вÑÑко ÑледваÑо оÑÑÑÑанÑване на бÑг. ÐÑÑжÑе ÑÑÐ»Ð¾Ð²Ð½Ð¸Ñ Ñлой минимален:
{$IFDEF FPC}
uses
LCLType, Forms, Graphics, Controls;
type
WString = WideString; // component text APIs are UTF-16
TBytes = array of Byte;
{$ELSE}
uses
Winapi.Windows, Vcl.Forms, Vcl.Graphics, Vcl.Controls;
{$ENDIF}
ÐÑиÑко под Ñози блок Ñе компилиÑа иденÑиÑно и в двеÑе ÑÑеди за ÑазÑабоÑка. РабоÑаÑа Ñ Ð´Ð¾ÐºÑменÑи, навигаÑиÑÑа по ÑÑÑаниÑиÑе, извикваниÑÑа за ÑендиÑане â?TPdf и TPdfView пÑедоÑÑавÑÑ ÐµÐ´Ð½Ð°ÐºÑв инÑеÑÑÐµÐ¹Ñ Ð²Ñв VCL и LCL веÑÑииÑе, Ñака Ñе оÑновнаÑа ÑаÑÑÑ Ð¾Ñ Ð²Ð¸Ð·ÑализаÑоÑа не ÑÑдÑÑжа компилаÑионни ÑÑловиÑ. ÐоддÑÑжанеÑо на Ñази ÑÑÑÑкÑÑÑа е вÑпÑÐ¾Ñ Ð½Ð° диÑÑиплина, а не на Ñложни ÑÑикове. СподеленаÑа логика за PDF живее в модÑли, коиÑо не изиÑÐºÐ²Ð°Ñ ÑпеÑиÑиÑни за ÑÑоÑвеÑнаÑа библиоÑека диалогови пÑозоÑÑи или панели. ÐалкоÑо неÑа, коиÑо дейÑÑвиÑелно Ñе ÑазлиÑаваÑ, каÑо диалози за пеÑÐ°Ñ Ð¸ Ð¸Ð·Ð±Ð¾Ñ Ð½Ð° Ñайлове ÑÑÑ ÑÑоÑвеÑниÑе им ÑиÑÑемни конвенÑии, Ñа ÑкÑиÑи зад пÑоÑÑ Ð¸Ð½ÑеÑÑейÑ, имплеменÑиÑан по веднÑж за вÑÑка библиоÑека. ÐлокÑÑ IFDEF Ñе пÑевÑÑÑа в единÑÑвеноÑо мÑÑÑо, кÑдеÑо е ÑазÑеÑено да Ñе вÑÐ²ÐµÐ¶Ð´Ð°Ñ Ð±ÑдеÑи ÑиÑÑемни Ñазлики, вмеÑÑо да Ñе ÑазпÑÑÑÐºÐ²Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°Ñионни диÑекÑиви в деÑеÑки ÑазлиÑни модÑли.
СÑздайÑе ÑоÑмаÑа в код, а не в два дизайнеÑа
СÑÑиймингÑÑ Ð½Ð° ÑоÑми е мÑÑÑоÑо, кÑдеÑо пÑоекÑиÑе за две ÑÑеди ÑиÑ
омÑлком Ñе ÑазпадаÑ. ФайловеÑе .dfm и .lfm, коиÑо опиÑÐ²Ð°Ñ ÐµÐ´Ð½Ð° и ÑÑÑа ÑоÑма, Ñе ÑÐ°Ð·Ð¼Ð¸Ð½Ð°Ð²Ð°Ñ ÑвойÑÑво по ÑвойÑÑво Ñ ÑеÑение на вÑемеÑо, докаÑо двеÑе веÑÑии запоÑÐ½Ð°Ñ Ð´Ð° Ñе дÑÑÐ¶Ð°Ñ ÑазлиÑно по пÑиÑини, коиÑо никой не може да ÑÑавни леÑно, ÑÑй каÑо ÑайловеÑе доÑи не Ñа в един и ÑÑÑ ÑоÑмаÑ. СÑздаванеÑо на визÑализаÑоÑа по вÑеме на изпÑлнение напÑлно Ð·Ð°Ð¾Ð±Ð¸ÐºÐ°Ð»Ñ Ñози пÑоблем. Ðма Ñамо една поÑледоваÑелноÑÑ Ð½Ð° конÑÑÑÑкÑоÑа, ÑпÑавлÑвана в ÑиÑÑемаÑа за конÑÑол на веÑÑииÑе каÑо обикновен код, коÑÑо изглежда по един и ÑÑÑ Ð½Ð°Ñин и за двеÑе плаÑÑоÑми:
procedure TViewerForm.FormCreate(Sender: TObject);
begin
Pdf := TPdf.Create(Self);
PdfView := TPdfView.Create(Self);
PdfView.Parent := Self;
PdfView.Align := alClient;
PdfView.Pdf := Pdf;
PdfView.FitMode := pfmFitWidth;
if ParamCount > 0 then
begin
Pdf.FileName := ParamStr(1);
Pdf.Active := True; // opens the document; PageCount valid after this
end;
end;
ТоÑниÑÑ Ñед на Ñези пÑиÑвоÑÐ²Ð°Ð½Ð¸Ñ Ðµ по-малко важен Ð¾Ñ ÐµÐ´Ð¸Ð½ конкÑеÑен Ñед, койÑо вÑÑÑи оÑновнаÑа ÑабоÑа. PdfView.Pdf := Pdf ÑвÑÑзва визÑÐ°Ð»Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа на докÑменÑа и Ð¾Ñ Ñози Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°ÑаÑÑк навигаÑиÑÑа по ÑÑÑаниÑиÑе ÑÑез PageNumber и поведениеÑо на напаÑване ÑÑез FitMode ÑабоÑÑÑ Ð½Ð°Ð¿Ñлно иденÑиÑно под VCL и LCL. Ðдна оÑобеноÑÑ, обÑа за двеÑе ÑÑеди, Ñи ÑÑÑÑва да Ñе знае, пÑеди поÑÑебиÑел да Ñ ÑÑобÑи каÑо бÑг: ÑÑÑноÑо пÑиÑвоÑване на Zoom вÑÑÑа FitMode обÑаÑно кÑм pfmNone и в двеÑе библиоÑеки. Така Ñе, ако ленÑаÑа Ñ Ð¸Ð½ÑÑÑÑменÑи ÑÑеÑиÑа âнапаÑванÐ?по ÑиÑинаâ?каÑо поÑÑоÑнно пÑедпоÑиÑание, ÑÑÑбва да зададеÑе оÑново Ñежима на напаÑване Ñлед вÑÑко пÑогÑамно маÑабиÑане, в пÑоÑивен ÑлÑÑай наÑÑÑойкаÑа ÑиÑ
омÑлком Ñе ÑпÑе да ÑабоÑи пÑи пÑÑваÑа пÑомÑна на маÑаба.
ÐинаÑниÑÑ Ñайл, за койÑо ÑÑедаÑа за ÑазÑабоÑка не ви пÑедÑпÑеждава
ÐомпоненÑÑÑ Ð¾Ð±Ð²Ð¸Ð²Ð° енджина PDFium, койÑо Ñе доÑÑÐ°Ð²Ñ ÐºÐ°Ñо наÑивен бинаÑен Ñайл за ÑÑоÑвеÑнаÑа плаÑÑоÑма, и Ñози Ñайл е пÑиÑинаÑа за поÑÑи вÑÑко ÑÑобÑение Ð¾Ñ Ñипа âÑабоÑи в IDE-Ñо, но Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ð¿Ñи ÑÑаÑÑиÑане Ð¾Ñ Ð¿ÑÐµÐºÐ¸Ñ Ð¿ÑÑâ? ТÑи пÑавила обÑÑнÑÐ²Ð°Ñ Ð¿Ð¾Ð²ÐµÑеÑо Ð¾Ñ Ñези ÑлÑÑаи. РазÑÑдноÑÑÑа (bitness) ÑÑÑбва да ÑÑвпада ÑоÑно. 32-биÑов изпÑлним Ñайл не може да заÑеди 64-биÑова pdfium библиоÑека, а ÑÑобÑениеÑо, коеÑо опеÑаÑионнаÑа ÑиÑÑема вÑÑÑа (âmodule not foundâ?пÑи нÑкои веÑÑии на Windows), ÑеÑÑо подвежда, ÑÑй каÑо ÑайлÑÑ Ñе намиÑа ÑоÑно до изпÑÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñайл. ТÑÑÑеÑе пÑÑÑ Ð´Ð¾ библиоÑекаÑа ÑпÑÑмо изпÑÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñайл, а не ÑпÑÑмо ÑабоÑнаÑа диÑекÑоÑиÑ; ÑÑаÑÑиÑанеÑо Ð¾Ñ IDE-Ñо и ÑÑаÑÑиÑанеÑо Ð¾Ñ ÐºÐ¾Ð½Ð·Ð¾Ð»Ð°Ñа Ñе ÑазлиÑÐ°Ð²Ð°Ñ ÑоÑно по Ñози показаÑел, поÑади коеÑо бÑгÑÑ Ð¾ÑÑава ÑкÑÐ¸Ñ Ð¿Ð¾ вÑеме на ÑазÑабоÑка. РнакÑаÑ, пÑÐ¸Ñ Ð²Ð°Ð½ÐµÑе неÑÑпеÑноÑо заÑеждане пÑеди оÑваÑÑнеÑо на пÑÑÐ²Ð¸Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð¸ го докладвайÑе Ñ Ð¿Ñлно опиÑание на оÑÐ°ÐºÐ²Ð°Ð½Ð¸Ñ Ð¿ÑÑ Ð¸ аÑÑ Ð¸ÑекÑÑÑа. ÐоÑÑебиÑелÑки билеÑ, койÑо глаÑи âÐипÑвÐ?64-биÑов бинаÑен Ñайл на PDFium в <path>â? Ñе ÑеÑава за минÑÑи. ТакÑв, койÑо казва Ñамо âвизÑализаÑоÑÑÑ Ñе ÑÑива пÑи ÑÑаÑÑиÑанеâ? води до ÑедмиÑи излиÑна коÑеÑпонденÑиÑ.
Ðаедно Ñ Ñова поддÑÑжайÑе веÑÑиÑÑа на библиоÑекаÑа на енджина ÑÑглаÑÑвана Ñ Ð¸Ð·Ð¿ÑÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñайл. PDFium Ñе Ñазвива бÑÑзо и инÑÑалаÑоÑ, койÑо акÑÑализиÑа пÑиложениеÑо, но оÑÑÐ°Ð²Ñ ÑÑаÑа библиоÑека на диÑка, води до ÑÑивове, коиÑо никой вÑв ваÑÐ¸Ñ Ð¾ÑÐ¸Ñ Ð½Ðµ може да вÑзпÑоизведе â?поÑади пÑоÑÑаÑа пÑиÑина, Ñе вÑеки компÑÑÑÑ Ð²Ñв ваÑÐ¸Ñ Ð¾ÑÐ¸Ñ Ñазполага ÑÑÑ ÑÑвпадаÑа двойка Ñайлове. ТÑеÑиÑайÑе библиоÑекаÑа каÑо ÑаÑÑ Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð°ÑÐ¸Ð¾Ð½Ð½Ð¸Ñ Ð°ÑÑеÑакÑ, ÑÑÑ ÑÑÑÐ¸Ñ Ð¸Ð½ÑÑалаÑоÑ, ÑÑÑаÑа веÑÑÐ¸Ñ Ð¸ ÑÑÑÐ¸Ñ Ð¿ÑÑ Ð·Ð° вÑзÑÑановÑване (rollback) каÑо изпÑÐ»Ð½Ð¸Ð¼Ð¸Ñ Ñайл, койÑо Ñ Ð·Ð°Ñежда.
РегиÑÑÑиÑане на компоненÑи в Lazarus IDE
СÑздаванеÑо на компоненÑиÑе по вÑеме на изпÑлнение не изиÑква никаква ÑегиÑÑÑаÑÐ¸Ñ Ð² дизайнеÑа, коеÑо е най-ÑиÑÑоÑо ÑеÑение за визÑализаÑоÑ, койÑо изгÑажда инÑеÑÑейÑа Ñи изÑÑло в код. ÐогаÑо обаÑе иÑкаÑе да имаÑе компоненÑиÑе в палиÑÑаÑа на Lazarus за ÑабоÑа в дизайнеÑа, инÑÑалиÑайÑе пакеÑа и оÑÑавеÑе Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ ÑегиÑÑÑаÑионен модÑл PDFiumLazReg в Lib/FPC/PDFiumLaz.lpk да Ñе погÑижи за Ñова. Този модÑл е маÑкиÑан каÑо пÑедназнаÑен Ñамо за ÑÑедаÑа за ÑазÑабоÑка (design-time) Ñ ÐºÐ¾Ð½ÐºÑеÑна Ñел: Ñой пÑепÑаÑа кÑм инÑеÑÑейÑи на ÑедакÑоÑа на ÑвойÑÑва в IDE-Ñо, коиÑо никога не ÑÑÑбва да Ñе ÑвÑÑÐ·Ð²Ð°Ñ Ñ ÐºÑÐ°Ð¹Ð½Ð¸Ñ Ð¸Ð·Ð¿Ñлним Ñайл.
Ðко ÑгÑеÑиÑе ÑÑк, пÑиложениеÑо ви неоÑаквано Ñе запоÑне да завиÑи Ð¾Ñ Ð¿Ð°ÐºÐµÑиÑе на ÑÑедаÑа за ÑазÑабоÑка, коеÑо Ñе Ñе пÑоÑви каÑо гÑеÑка пÑи внедÑÑване на пÑÑÐ²Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑки компÑÑÑÑ, на койÑо никога не е инÑÑалиÑан Lazarus.
ÐлаÑово ÑеÑене и екÑанни ÑеÑÑи извÑн Windows
ÐÑеобÑазÑванеÑо на ÑекÑÑ Ð² ÑÐµÑ (text-to-speech) е ÑÑнкÑиÑÑа, пÑи коÑÑо кÑоÑплаÑÑоÑменаÑа поддÑÑжка Ñе наÑÑÑава, и Ñова Ñе ÑлÑÑва на ниво опеÑаÑионна ÑиÑÑема, а не в компоненÑа. SAPI, обиÑайнаÑа TTS ÑиÑÑема в Windows, ÑÑÑеÑÑвÑва Ñамо под Windows. ÐеÑÑÐ¸Ñ Ð½Ð° Lazarus, коÑÑо вÑе оÑе е наÑоÑена кÑм Windows, запазва пÑлнаÑа поддÑÑжка на SAPI и ÑÑвмеÑÑимоÑо Ñ NVDA поведение, коеÑо пÑиÑежава оÑигиналÑÑ Ð½Ð° Delphi, Ñака Ñе пÑÐµÑ Ð¾Ð´ÑÑ Ð¾Ñ Windows кÑм Windows не гÑби ниÑо ÑÑк и поÑÑебиÑел Ñ NVDA не би забелÑзал Ñазлика Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÐµÑе веÑÑии.
ÐеÑÑÐ¸Ñ Ð·Ð° Linux или macOS обаÑе е ÑÑвÑем дÑÑг вÑпÑоÑ. ТÑй каÑо Ñам нÑма SAPI ÑиÑÑема, коÑÑо да бÑде извикана, аÑдио Ð¸Ð·Ñ Ð¾Ð´ÑÑ ÑÑÑбва да бÑде пÑенаÑоÑен кÑм ÑÑоÑвеÑнаÑа вгÑадена глаÑова ÑÑлÑга на ÑиÑÑемаÑа, докаÑо API инÑеÑÑейÑиÑе за ÑеÑене над Ð½ÐµÑ Ð¾ÑÑÐ°Ð²Ð°Ñ Ð½ÐµÐ¿Ñоменени. Това Ñазделение е ÑеÑиозен аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð° поÑÑавÑне на глаÑовиÑе ÑÑнкÑии зад инÑеÑÑÐµÐ¹Ñ Ð¾Ñе Ð¾Ñ ÑамоÑо наÑало: анализÑÑ Ð½Ð° Ñеда на ÑеÑене и пÑоÑледÑванеÑо на дÑмиÑе Ñа незавиÑими Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑмаÑа и Ñе пÑенаÑÑÑ Ð±ÐµÐ· пÑомени, каÑо ÑÑÑбва да Ñе подмени Ñамо ÑÑнкиÑÑ Ñлой, койÑо Ñеално вÑзпÑоизвежда звÑка. СÑаÑиÑÑа за доÑÑÑпен ÑеÑÐµÑ Ð½Ð° PDF Ñазглежда Ñези Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¸ в деÑайли.
СпиÑÑк за пÑовеÑка на ÑÑоÑвеÑÑÑвиеÑо пÑеди завÑÑÑване на поÑÑиÑанеÑо
СледниÑÑ ÑпиÑÑк за пÑовеÑка е помагал за оÑкÑиване на Ñеални ÑегÑеÑии, подÑедени ÑпоÑед обиÑÐ°Ð¹Ð½Ð¸Ñ Ñед на ÑÑÑ Ð½Ð¾Ñо пÑоÑвление. ÐÑвоÑеÑе докÑменÑ, ÑийÑо пÑÑ ÑÑдÑÑжа Ñимволи извÑн ASCII. ÐоÑÑÑÑеÑе дÑма Ñ Ð½Ðµ-ASCII Ñимволи и Ñе ÑвеÑеÑе, Ñе ÑÑвпадениÑÑа Ñе маÑкиÑÐ°Ñ Ð½Ð° пÑавилниÑе меÑÑа. ÐзпÑобвайÑе пÑевÑÑÑанеÑо Ñ ÐºÐ¾Ð»ÐµÐ»ÑеÑо на миÑкаÑа, ÑелекÑиÑÑа Ñ Ð²Ð»Ð°Ñене и клавиаÑÑÑнаÑа навигаÑÐ¸Ñ Ð¿Ð¾ ÑÑÑаниÑиÑе за вÑÑка библиоÑека Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñи, коÑÑо ÑазпÑоÑÑÑанÑваÑе, ÑÑй каÑо ÑпÑавлениеÑо на ÑокÑÑа и колелÑеÑо на миÑкаÑа Ñа най-завиÑимиÑе Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð¸Ñ LCL ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð´ÐµÑайли. ÐÑовеÑеÑе ÑендиÑанеÑо пÑи 100%, 150% и 200% маÑаби на диÑплеÑ. ÐакÑаÑ, ÑÑаÑÑиÑайÑе инÑÑалиÑанаÑа веÑÑиÑ, а не Ñази Ð¾Ñ IDE-Ñо, на компÑÑÑÑ, на койÑо ÑÑедаÑа за ÑазÑабоÑка никога не е била инÑÑалиÑана â?ÑÑй каÑо Ñова е единÑÑвениÑÑ Ð½Ð°Ñин Ñеално да Ñе ÑеÑÑва заÑежданеÑо на наÑивнаÑа библиоÑека. ÐÑиÑко оÑÑанало може да ÑабоÑи, докаÑо Ñази поÑледна ÑÑÑпка ÑÐ¸Ñ Ð¾ Ñе пÑовалÑ.
СкоÑоÑÑÑа на ÑендиÑане Ñе запазва непÑоменена Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÐµÑе веÑÑии, Ñака Ñе Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð·Ð° кеÑиÑане Ð¾Ñ ÑÑаÑиÑÑа за ÐºÐµÑ Ð½Ð° ÑендиÑане и пÑоизводиÑелноÑÑ Ð¿Ñи маÑабиÑане Ñе пÑилага за LCL визÑализаÑоÑа ÑоÑно по ÑÑÑÐ¸Ñ Ð½Ð°Ñин, по койÑо е опиÑан за VCL.
ÐиÑо Ð¾Ñ Ñова не пÑави LCL веÑÑиÑÑа по-маловажна. ÐÑновнаÑа ÑÑнкÑионалноÑÑ Ðµ иденÑиÑна и Ð¾Ñ Ð´Ð²ÐµÑе ÑÑÑани: TPdf, TPdfView, ÑендиÑанеÑо, ÑоÑмÑлÑÑиÑе, извлиÑанеÑо на ÑекÑÑ Ð¸ API инÑеÑÑейÑиÑе за доÑÑÑпноÑÑ Ñе дÑÑÐ¶Ð°Ñ Ð¿Ð¾ един и ÑÑÑ Ð½Ð°Ñин, незавиÑимо Ð¾Ñ Ñова кое IDE ги е компилиÑало. ÐÑÑка Ñазлика, коÑÑо Ñи ÑÑÑÑва да Ñе пÑоÑледи, е обвÑÑзана Ñ Ð¿Ð»Ð°ÑÑоÑмаÑа, а не Ñ ÐºÐ¾Ð½ÐºÑеÑнаÑа веÑÑÐ¸Ñ Ð½Ð° библиоÑекаÑа. ЧеÑенеÑо ÑÑÑ SAPI е Ñамо за Windows, диалозиÑе ÑÐ»ÐµÐ´Ð²Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÐ½ÑииÑе на вÑÑка библиоÑека, а бинаÑниÑÑ Ñайл ÑÑÑбва да ÑÑоÑвеÑÑÑва на аÑÑ
иÑекÑÑÑаÑа, в коÑÑо Ñе заÑежда. ÐаÑÑÑойÑе пÑавилно гÑаниÑиÑе на кодиÑанеÑо, динамиÑнаÑа ÑоÑма и заÑежданеÑо на бинаÑÐ½Ð¸Ñ Ñайл, а оÑÑаналаÑа ÑаÑÑ Ð¾Ñ Ð¿Ð¾ÑÑиÑанеÑо е пÑоÑÑо меÑ
аниÑна ÑабоÑа, Ñ ÐºÐ¾ÑÑо компилаÑоÑÑÑ Ð²ÐµÑе Ñе е ÑпÑавил.
ÐпиÑаниÑе ÑÑк VCL и LCL веÑÑии Ñе доÑÑавÑÑ Ð·Ð°ÐµÐ´Ð½Ð¾ каÑо ÑаÑÑ Ð¾Ñ PDFium Component, Ñ Ð¸Ð·Ñ Ð¾Ð´ÐµÐ½ код и иденÑиÑни пÑблиÑни пÑиложни пÑогÑамни инÑеÑÑейÑи (API) за Delphi, C++Builder и Lazarus/FPC.