Noutați

Este WebAssembly cu adevărat mai rapid decât JavaScript? Un experiment practic!

WebAssembly este un limbaj de nivel scăzut, cu un format binar compact, care rulează cu performanțe aproape native. Free Pascal oferă, de ceva vreme, o modalitate de a compila Pascal în WebAssembly și de a integra aceste module în aplicațiile dvs. web. Așa că, desigur, a trebuit să experimentăm cu el, pentru a vedea dacă se ridică la înălțimea hype-ului. Este important de știut că, în timp ce WebAssembly este rapid și foarte compact, are un nivel foarte scăzut. WebAssembly nu are conexiune directă cu DOM-ul browserului, iar comunicarea dintre JavaScript și WebAssembly este limitată la matrice de octeți, valori întregi și flotante. Din fericire, puteți aloca memorie pentru modulul WebAssembly și puteți utiliza aceasta pentru a citi/scrie date mai complexe. Dar toată interfața necesară pentru aceasta (și pentru accesarea DOM) este ceva ce va trebui să scrieți singur. Procesarea imaginii Pentru experimentul nostru, am creat o aplicație de procesare a imaginilor, deoarece aceasta implică de obicei o procesare grea a datelor. Puteți urmări o demonstrație live a aplicației aici . Puteți încărca o imagine și puteți folosi diferite filtre pe ea. Puteți utiliza comutatorul de comutare pentru a alege între JavaScript pur sau WebAssembly pentru a procesa imaginea și pentru a vedea singur cât de rapid este WebAssembly. Primul test a luat în considerare doar procesarea imaginii și nu citirea și scrierea datelor. După cum puteți vedea în grafic, în acest test, WebAssembly este de aproximativ 3 ori mai rapid. Pentru al doilea test, am cronometrat funcția completă. Aceasta a inclus scrierea și citirea din WebAssembly. Și chiar și atunci, WebAssembly este de aproximativ 1,5 ori mai rapid decât JavaScript. Concluzie JavaScript este mult mai lent decât WebAssembly atunci când este implicată procesarea unor cantități mari de date. Pentru sarcini mici, JavaScript ar putea fi totuși calea de urmat, deoarece diferența este de neglijat. Pentru sarcinile care necesită multe resurse , cum ar fi editarea video și procesarea avansată a imaginilor, WebAssembly este calea de urmat. Aceste sarcini necesită mult calcul și aici strălucește WebAssembly , performând la o viteză aproape nativă. Cod sursa Puteți descărca codul sursă al proiectului demonstrativ aici . Aceasta include aplicația client web TMS WEB Core, precum și codul sursă al procesării imaginilor bazate pe Pascal, care urmează să fie compilat într-un modul WebAssembly. Am livrat un fișier WebAssembly pre-compilat în proiect, astfel încât să nu fie nevoie să-l compilați singur. Dar dacă doriți să compilați sau să scrieți propriile module WebAssembly, va trebui să instalați compilatorul Object Pascal to WebAssembly al echipei FPC. Puteți găsi ghidul de instalare pentru compilator aici .

Read More

Urmărirea stivei de apeluri în timpul execuției cu Delphi

Suntem obișnuiți să inspectăm o stivă de apeluri atunci când ceva nu merge bine în aplicația noastră și se blochează. Delphi are instrumente suplimentare excelente care înregistrează informații detaliate despre stiva de apeluri atunci când o aplicație se blochează. Dar nu întotdeauna când o aplicație se blochează informațiile din stiva de apeluri pot fi utile. Din când în când, simțim că, având informații detaliate despre stiva de apeluri în timpul unei aplicații care rulează obișnuit, ne poate ajuta să urmărim situații nedorite. Recent, s-a întâmplat ca, în cazuri rare, o proprietate a unei componente să aibă o valoare neașteptată. În aplicația în care a fost utilizată componenta, această proprietate a fost setată din multe părți ale codului și cadrul VCL însuși și a fost mai ales o chestiune de a ști de unde exact a fost setată valoarea neașteptată. Odată ce am știut, am putea înțelege și rezolva problema. Capacitatea de a face doar în timpul executării un instantaneu al stivei de apeluri atunci când a fost setată o anumită valoare a fost suficientă pentru a găsi vinovatul. Așadar, deși această capacitate ne-a salvat deja pentru mai multe cazuri o perioadă enormă de timp, ne-am gândit că este interesant să o punem la dispoziție și pentru dvs. în TMS MemInsight . În timp ce TMS MemInsight vă va oferi, în timpul executării, o perspectivă asupra stivei de apeluri atunci când apar excepții, acum există o metodă simplă GetCallStack(sl: TStrings) pe care o puteți apela de oriunde și de câte ori doriți și va reveni informații detaliate despre stiva de apeluri. Singura cerință este să vă conectați aplicația cu o informație detaliată a hărții (consultați Opțiuni de linker sub Opțiuni de proiect) Cum functioneaza? Imaginați-vă că există o clasă TMyClass cu o proprietate Text: TMyClass = clasa (TPersistent) protejat procedura SetText(const Value: string); public text de proprietate: șir citire FText scrie SetText; Sfârşit; Acum, vrem să știm de unde exact în aplicația noastră, această proprietate Text de clasă ar fi setată cu o valoare de șir goală. Putem scrie setter-ul proprietăților în felul următor: utilizări TMS.MI.Core; interfata tip TMyClass = clasa (TPersistent) protejat procedura SetText(const Value: string); public text de proprietate: șir citire FText scrie SetText; Sfârşit; implementare proceduer TMyClass.SetText(const Value: string); var sl: TStringList; ÎNCEPE FText := Valoare; dacă FText = ” atunci ÎNCEPE sl := TStringList.Create; încerca GetCallStack(sl); sl.SaveToFile(‘c:tempcallstack.log’); in cele din urma sl.Gratuit; Sfârşit; Sfârşit; Sfârşit; Acum, la nivel de aplicație, putem folosi această clasă de exemplu ca: MyClass.Text := Edit1.Text; iar când proprietatea text este setată cu un șir gol, vom obține un raport frumos de urmărire a stivei care ne oferă informațiile pe care le doream. Pentru acest exemplu, creăm la nivelul clasei TForm metoda pentru a seta myClass.Text prin: TForm1 = clasa (TForm) privat { Declarații private } procedura SetClassText(s: string); Sfârşit; implementare procedura TForm1.SetClassText(s: string); ÎNCEPE clasa mea.Text := s; Sfârşit; și când numim acest lucru atât din evenimentul OnChange al unui control de editare, cât și din evenimentul OnClick al butonului de formular: procedura TForm1.Button1Click(Expeditor: TObject); ÎNCEPE SetClassText(Edit1.Text); Sfârşit; procedura TForm1.Edit1Change(Expeditor: TObject); ÎNCEPE SetClassText(Edit1.Text); Sfârşit; Acum, obținem un jurnal frumos de urmărire a stivei când proprietatea clasei Text este setată cu o valoare de șir goală: TMyClass.SetText (57) TForm1.SetClassText (77) TForm1.Button1Click (43) TControl.Click (7443) TWinControl.WndProc (10162) TButtonControl.WndProc (2617) …. indicând că acest lucru […]

Read More

8 versiuni ale pachetului TMS VCL UI pentru Delphi până acum în 2022

TMS VCL UI Pack este produsul nostru emblematic VCL, care cuprinde peste 600 de componente VCL pentru a vă ajuta să creați mai rapid aplicații Windows VCL bogate în funcții . Astăzi, am lansat TMS VCL UI Pack v10.7.7.0, care este a 8-a lansare până acum în acest an 2022. De fapt, am pierdut socoteala asupra numărului de lansări de la înființarea TMS VCL UI Pack (denumit anterior TMS Component Pack în 1998). Cu pachetul TMS VCL UI, nu doar dorim să vă permitem să includeți rapid funcții foarte puternice în aplicațiile dvs. VCL, dar dorim și să oferim rapid remedieri, îmbunătățiri, precum și dorințele dvs. pentru noi funcții. La urma urmei, ne aflăm într-o lume în mișcare rapidă, iar dezvoltatorii de software doresc să lanseze actualizări pentru clienții lor și rapid. Toate acestea inspirate de celebrele cuvinte ale lui Mark Twain: „ Îmbunătățirea continuă este mai bună decât perfecțiunea întârziată” . Așadar, astăzi, am lansat TMS VCL UI Pack 10.7.7.0 , versiunea numărul 8 în acest an. Aceasta este o listă scurtă de noi funcții și îmbunătățiri care au intrat deja în TMS VCL UI Pack doar în 2022: 10.7.7.0 Nou: suport pentru stiluri VCL adăugat în TAdvMoneyEdit Nou: Suport pentru a persista tastaturi cu caractere unicode în TAdvTouchKeyboard Nou: suport pentru utilizarea TVirtualImageList pentru utilizare în scenarii cu DPI ridicat pentru TDBadvGlowNavigator Nou: suport pentru desenarea evenimentelor suprapuse adăugat în TPlannerCalendar TPlannerCalendarGroup Nou: Setarea SelectionColor SelectionTextColor = clNone permite utilizarea întotdeauna a culorii personalizate specificate în TAdvDBLookupComboBox Nou: CalculatorLook.BorderColor adăugat în TAdvMoneyEdit Nou: setarea identificatorului binar în stilul de sintaxă pentru a evidenția și numerele formatate binar în TAdvMemo Nou: proprietatea AutoShowCalculator a fost adăugată în TAdvMoneyEdit Îmbunătățit: aspectul butonului de închidere cblChrome la DPI ridicat în TAdvOfficeTabSet Îmbunătățit: gestionarea LabelFont în legătură cu ParentFont în controalele cu etichetă atașată Îmbunătățit: Păstrarea alinierii la introducerea unei linii noi în TAdvRichEditor 10.7.6.0 Nou: proprietate vizibilă pentru a afișa sau ascunde acele suplimentare în TAdvSmoothGauge Nou: desenul casetei de selectare a celulei cu stilul VCL activat în TAdvStringGrid Nou: evenimente OnItemClick și OnItemDblClick în TAdvKanbanBoard Nou: S-a adăugat suport pentru wpSftpList în TWebCopy Nou: S-a adăugat suport pentru utilizarea TVirtualImageList în TPlannerMonthView Îmbunătățit: gestionarea erorilor când a fost introdusă oră nevalidă în TAdvTimePickerDropDown Îmbunătățit: dimensionarea controlului dropdown în Delphi 11 pentru DPI ridicat în TAdvControlDropDown Îmbunătățit: aspectul butonului închis în scenariile DPI ridicate în TAdvOfficeTabSet Îmbunătățit: manipularea ButtonWidth cu DPI ridicat în TAdvEditBtn Îmbunătățit: Cheie adăugată în TAdvSmoothListBoxItem.CopySettings() 10.7.5.0 Nou: Proprietatea FindText a fost adăugată pentru a controla dacă nodul este căutat sau nu în TAdvTreeComboBox Nou: metode BeginUpdate/EndUpdate adăugate în TAdvWordCloud Îmbunătățit: Desenul DPI ridicat al pictogramelor de sistem și gestionarea DPI pe monitor în TDirectoryListBoxEx TFileListBoxEx Îmbunătățit: proprietățile Font expuse și Aliniere pentru TAdvGradientDirectionSelector 10.7.4.1 Îmbunătățit: specificatorul tipului de telefon se adaugă la export în TvCard Îmbunătățit: inițializarea dimensiunii fontului etichetei la momentul proiectării pentru DPI ridicat în TAdvSpinEdit TAdvComboBox TAdvDropDown… Îmbunătățit: gestionarea excepțiilor pentru deschiderea fișierelor neacceptate din TAdvRichEditorEditToolBar 10.7.4.0 Nou: suport TVirtualImageList adăugat în TInspectorBar Nou: TAdvOfficePage.TextAlignmentTAdvOfficePage.TextVerticalAlignment adăugat Îmbunătățit: THTMLStatusBar suport DPI ridicat pentru Delphi 11 Îmbunătățit: opriți editarea setând Key = #0 în OnKeyPress() în TAdvStringGrid Îmbunătățit: actualizare RowHeight prin Zoom() în DPI mare / Delphi 11 în TAdvStringGrid Îmbunătățit: comportamentul barei de instrumente pop-up este ridicat în TAdvRichEditor Îmbunătățit: Performanță în TAdvRichEditor Îmbunătățit: modul […]

Read More

Extindeți TMS WEB Core cu bibliotecile JS cu Andrew: FlatPickr (partea 2)

Ultima dată, ne-am uitat la cum să încorporăm FlatPickr într-un proiect TMS WEB Core. Am luat ceea ce ar putea fi considerat abordarea manuală. Un link către un CDN sau altă sursă pentru bibliotecă este adăugat la fișierul Project.html , iar apoi un mic cod JavaScript este folosit pentru a lega manual codul bibliotecii la un element care a fost plasat pe un TWebForm . Acest lucru funcționează destul de bine și, de obicei, folosesc aceasta și multe alte biblioteci JS în proiectele mele. Dar există o altă modalitate care ar putea fi mai în concordanță cu modul în care Delphi este utilizat în mare parte a timpului – prin utilizarea componentelor. Deci, în această postare, vom revizui aceeași bibliotecă JS, dar vom parcurge cum să creați o componentă care va apărea în paleta de componente a IDE-ului Delphi. De acolo, vom putea adăuga controale FlatPickr la orice TWebForm sau oriunde avem nevoie să apară componenta, la fel de ușor ca și cu un TWebLabel sau un TWebEdit . Și vom putea ajusta multe dintre opțiunile pe care dorim să le transmitem la FlatPickr setând proprietăți în Delphi IDE Object Inspector. Motivația. Dincolo de a facilita utilizarea FlatPickr într-o aplicație TMS WEB Core, ideea acestei postări este de a înțelege cum să creați un pachet Delphi care poate include multe astfel de controale. Pe măsură ce ne facem drum prin mai multe biblioteci JS și controalele acestora în postările viitoare, sperăm că vom putea face upgrade acest pachet și cu acele noi comenzi și poate chiar vom arunca și altele pe parcurs. Acest pachet poate fi apoi instalat de oricine lucrează la proiectele TMS WEB Core și, astfel, obțineți acces mai ușor la toate bibliotecile JS pe care le acoperim într-un singur pas simplu. Rețineți că, dacă utilizați o bibliotecă JS într-o situație unică, munca necesară pentru a crea un pachet de componente este probabil să fie substanțial mai mult decât abordarea manuală. Dar există potențialul de a economisi timp și efort în (cel puțin) următoarele scenarii. Când doriți să utilizați mai multe instanțe ale unei componente, poate în mai multe forme. Când doriți să utilizați aceeași componentă în mai multe proiecte. Când nu doriți să fiți nevoit să vă amestecați cu JavaScript sau cu nuanțele bibliotecii JS de bază. Când doriți să creați ceva pentru a fi folosit cu alții, economisindu-le timp și efort. Având aceste tipuri de controale în Delphi, puteți pur și simplu să lucrați așa cum ați proceda în mod normal, fără a fi nevoie să știți că utilizați o bibliotecă JavaScript. Crearea unui pachet. Dar înainte de a crea componente, primul lucru pe care îl vom face este să creăm un pachet care să dețină aceste tipuri de componente. Ieșit de la poartă, avem câteva lucruri de acoperit. Scrierea aplicațiilor TMS WEB Core în Delphi înseamnă că folosim IDE-ul Delphi pentru a face o parte din lucru și apoi transpilăm codul folosind pas2js în culise pentru a produce codul final care rulează într-un browser. Dar Delphi IDE nu știe prea multe despre JavaScript sau HTML sau CSS sau lucruri de genul – este un mediu Delphi, până la urmă. Și odată ce aplicația rulează într-un browser, a uitat în mare măsură de orice legat de Delphi sau Pascal. Când dezvoltăm componente, trebuie, de asemenea, să […]

Read More

Urmărirea criptomonedelor în Delphi cu diagramă FNC

Noi, ca dezvoltatori, căutăm noi API-uri interesante, noi componente care să ofere acel pic în plus sau ceva complet nou și uimitor. În calitate de dezvoltatori de componente, este o încercare zilnică de a introduce caracteristici noi și interesante în componentele noastre și de a le oferi clienților noștri. Acum, cadrul FNC oferă o mulțime de componente pentru a finaliza diverse sarcini. Chiar și atunci când sunteți entuziasmați să creați o mulțime de componente noi, este adesea bine să reflectăm la ceea ce s-a făcut deja și să vedem unde ne putem îmbunătăți. TMS FNC Chart a fost primul produs FNC și a fost o introducere în dezvoltarea cross-platform, cross-framework și cross-IDE. La momentul lansării, VCL și FMX erau acceptate. Ulterior am adăugat suportul Lazarus și TMS WEB Core. A fost nevoie de mai mult timp pentru a suporta mai multe cadre și sisteme de operare și pentru a rezolva toate diferențele. Am avut imediat ideea de a crea mai multe componente UI, ceea ce a dus la varietatea de seturi de componente bazate pe framework FNC pe care le avem astăzi. Între timp, am decis că este timpul să ne întoarcem la început, la primul nostru produs FNC și să vedem ce poate fi îmbunătățit. Astăzi, dorim să dezvăluim câteva funcții noi și interesante care vor apărea în versiunea 2.0, precum și un mic eșantion despre ceea ce înseamnă asta pentru tine ca client/dezvoltator. TMS FNC Chart v2.0 Apare în v2.0 Tipuri moștenite : TTMSFNCChart era singura componentă disponibilă, iar tipurile de serie trebuiau schimbate acolo, de fiecare dată când se folosea o nouă instanță a TTMSFNCChart. În v2.0 introducem tipurile moștenite , ceea ce înseamnă că va exista un tip de clasă descendentă pentru fiecare tip de serie, de exemplu: TTMSFNCBarChart, TTMSFNCLineChart, TTMSFNCPieChart, … . Utilizarea acestui nou set de clase va preseta tipul de serie la creare, adăugarea de noi serii va fi, de asemenea, tipul corect și există o previzualizare în timp de proiectare care va semăna mai mult cu ceea ce ar trebui să reprezinte tipul ales. Aspect și teme de culoare : diagrama afișează diverse elemente, cum ar fi un titlu, axa x, axa y și fiecare dintre aceste elemente poate fi personalizat cu o mulțime de proprietăți. Modificarea aspectului general al diagramei poate dura destul de mult. În v2.0 dorim să introducem un aspect global, care aplică numele fontului, culoarea și capacitatea de a mări toate fonturile din diagramă dintr-o singură mișcare. În plus, am dorit să facem diagrama mai prietenoasă cu culorile și mai dinamică. 2.0 introduce o nouă listă de culori personalizată, stil Excel și culori monocromatice. Import de date : diagrama poate vizualiza în mod evident datele. Datele provin din diferite tipuri de surse și, în prezent, nu există metode de ajutor de niciun fel care să facă acest lucru posibil. În v2.0, va fi posibil să încărcați date din CSV, JSON și matrice de date predefinite cu o mulțime de opțiuni de personalizare. Suport pentru baze de date: În v2.0 oferim și suport pentru baze de date doar pentru citire. TTMSFNCChartDatabaseAdapter va fi disponibil ca o componentă separată și va recunoaște dinamic câmpurile ca serie, cu flexibilitatea de a adăuga personalizare suplimentară. Conectarea la grilă : În pachetul TMS FNC UI , avem componenta TTMSFNCGrid. În v2.0, va fi […]

Read More

Extindeți TMS WEB Core cu JS Libraries cu Andrew: Luxon

Ultimele postări au acoperit FlatPickr , o bibliotecă JS populară și foarte capabilă de datepicker. Ne-am uitat la multe dintre opțiunile sale și am analizat două moduri complet diferite de a-l adăuga la proiectele noastre TMS WEB Core. În ceea ce nu ne-am aprofundat prea mult este întreaga zonă a formatelor de dată și oră, fusuri orare, internaționalizare și diferențele dintre gestionarea datei în Delphi și JavaScript. Ei bine, am făcut puțin, dar suficient pentru a trece prin câteva exemple. De data aceasta, vom intra în mai multe detalii și vom introduce, de asemenea, cea mai recentă bibliotecă JS în repertoriul nostru – Luxon – care se descrie ca „un înveliș puternic, modern și prietenos pentru datele și orele JavaScript”. Nu sunt deloc sigur că cumpăr bitul „prietenos”, dar este într-adevăr puternic și modern, așa că să vedem unde se potrivește. Motivația. Dezvoltatorii Delphi de lungă durată sunt probabil să fie destul de familiarizați cu TDateTime și cu diferitele sale avantaje și deficiențe. Și chiar dacă ești relativ nou în Delphi și nu ai avut prea multă oportunitate de a interacționa cu TDateTime, nu există prea multe lucruri care să te împiedice și, în general, nu este probabil să atragă prea multă atenție de la sine . Acesta este un lucru bun, desigur. Când aveți de-a face cu JavaScript, totuși, frumosul și confortabilul TDateTime este înlocuit cu un format de dată JavaScript destul de sinistru, care nu este niciunul dintre aceste lucruri. Sigur, este destul de ușor să începeți cu o dată JavaScript, dar este într-adevăr o fiară complet diferită. Deplasarea între cele două poate fi o provocare și chiar și doar încercarea de a face cea mai mică parte de formatare poate fi uneori mult mai multe probleme decât ar putea părea posibil. Deci, în această postare, vom trece peste o grămadă de astfel de lucruri. Scoateți totul dintr-o singură lovitură, smulgeți aparatul, ca să spunem așa, ca să putem trece cu sinceritate și încredere la alte subiecte, dar să avem asta în buzunarul din spate atunci când avem nevoie. Și crede-mă, vom avea nevoie de el! Epocă epică. Să ne scufundăm mai întâi degetul în capătul superficial și să trecem rapid peste ce este TDateTime. Delphi folosește clasa TDateTime pentru a codifica, în mod natural, o dată și o oră. Face acest lucru într-un mod foarte simplu – prin utilizarea unui număr în virgulă mobilă (în special, un dublu), în care întreaga parte a numărului reprezintă numărul de zile de la 1899-12-30, iar partea fracțională a numărului reprezintă timpul ca o fracțiune de zi. Amiaza ar fi reprezentată ca .5, 18:00 ar fi reprezentată ca .75 și așa mai departe. Alegerea lui 1899-12-30 este oarecum arbitrară, dar am dat peste acest link care a descris-o astfel: Se pare că motivul pentru Delphi începând cu 30 decembrie 1899 este acela de a-l face cât mai compatibil cu Excel și, în același timp, nu adoptă incorectitudinea Excel cu privire la date. Din punct de vedere istoric, Excel a jucat al doilea lăutar în fața lui Lotus 1-2-3. Lotus (care poate să fi primit această eroare de la Visicalc) a considerat în mod incorect 1900 ca fiind un an bisect, prin urmare, o valoare de 60 vă oferă 29 februarie 1900 în Excel, dar este interpretat ca 28 februarie 1900 în […]

Read More

Extindeți TMS WEB Core cu bibliotecile JS cu Andrew: CodeMirror

Doriți să afișați sau să editați codul direct în aplicația dvs. TMS WEB Core? Atunci aceasta este postarea pentru tine. De data aceasta, ne aruncăm cu capul întâi în CodeMirror 5 , care se descrie ca „un editor de text versatil implementat în JavaScript pentru browser”. Ceea ce cu siguranță este. Pe lângă faptul că este doar un editor de text, este conștient în mod nativ de peste 100 de limbaje de programare diferite. În plus, are numeroase suplimente și opțiuni configurabile pentru a imita numeroasele stiluri și convenții ale altor editori cu care ați putea fi deja familiarizați, cum ar fi Vim, Emacs și așa mai departe. Și folosirea acestuia într-un proiect TMS WEB Core este la fel de ușoară ca oricare dintre celelalte biblioteci JS pe care le-am acoperit până acum. Motivația. De ce avem nevoie de un editor de cod? Primul beneficiu al unui editor de cod, în comparație cu un simplu editor de text sau un câmp editabil TWebMemo, de exemplu, este că de obicei vine cu evidențiere de sintaxă care este configurată pentru limbajul de programare pe care îl editați. Pentru Pascal, aceasta înseamnă că începutul și sfârșitul sunt afișate automat într-o culoare diferită, precum și orice alte cuvinte cheie rezervate legate de Pascal. Acest lucru înseamnă, de obicei, că diferitele tipuri de paranteze sunt afișate într-un mod care facilitează găsirea perechilor de paranteze potrivite sau că comentariile apar într-o culoare sau stil diferit. Poate că nu pare mult, dar dacă ați încercat vreodată să scrieți cod fără acest lucru, este o experiență foarte diferită. Desigur, probabil că ești foarte familiarizat cu acest tip de lucruri, deoarece IDE-ul Delphi face exact acest lucru (și mult, mult mai mult!) atunci când editează codul. Uneori este chiar util să afișați alt text folosind acest tip de mecanism, dacă nu există niciun alt motiv decât pentru a-l face puțin mai frumos de privit. Dacă aveți fișiere jurnal care sunt potențial vizibile pentru utilizatorii dvs., de exemplu, acestea pot fi configurate astfel încât să fie vizualizate prin CodeMirror. Poate că setat la ceva de genul SQL (preferința mea personală) va face fișierele jurnal puțin mai ușor de citit, în funcție de modul în care au fost formatate, cu datele și numerele și alte lucruri afișate potențial într-o culoare diferită. Sau poate doriți să afișați text care are numere de rând lângă el. Sau, poate, cel mai comun dintre toate, doriți să editați sursa HTML și să aveți etichetele afișate într-o culoare diferită. Vom arunca o privire atât la Summernote , cât și la SunEditor într-o postare viitoare, ambele utilizând CodeMirror pentru a oferi funcționalitatea de „editare sursă HTML”. CodeMirror 5 vs. CodeMirror 6. Înainte de a merge mai departe, hai să rezolvăm rapid asta. În mod normal, sunt 100% all-in când vine vorba de a folosi marginea de vârf a oricărei biblioteci JS, cu gândul că va avea probabil cel mai bun suport pentru cele mai recente browsere și cele mai active eforturi de dezvoltare, în comparație. la versiuni mai vechi ale aceleiași biblioteci. Și acest lucru se aplică într-adevăr și aici. Cu toate acestea, în acest moment sunt puțin prea departe de vârf. Până acum, CodeMirror 6 este într-adevăr o colecție de module care nu pot fi încărcate direct (poate cu ușurință ar fi mai precis) într-o aplicație […]

Read More

Tkinter vs DelphiFMX în fluxul Embarcadero Open Source

Începem ceva nou și sunt destul de încântat de asta. Acesta este primul dintr-o serie de fluxuri live regulate care discută cele mai recente proiecte open source. Ambele proiecte sponsorizate de Embarcadero și proiecte cheie din comunitate. Voi fi gazda și mi se vor alătura membri ai comunității, dezvoltatori implicați în aceste proiecte open source, precum și membri ai Embarcadero și Idera’s Product Management. Primul nostru flux, săptămâna viitoare, este axat pe Tkinter vs DelphiFMX pentru dezvoltarea GUI Python, deci vizează în mod direct dezvoltatorul Python. Joi, 2 iunie 2022 la 10:00 CDT (Reveniți la această postare după webinar pentru link-uri, diapozitive și reluare.) Aceste fluxuri servesc mai multe scopuri: Colaborați pentru mine cu alți manageri de proiect de la Embarcadero și Idera pentru a modela foaia de parcurs și modul în care sprijinim aceste proiecte Distribuiți conversațiile din culise cu comunitatea acestor conversații Modelați în colaborare viitorul acestor proiecte open source Actualizări regulate pentru noutățile acestor proiecte și ale comunității Scopul este să se rotească prin proiecte în fiecare săptămână și să includă o temă în proiect. De exemplu, săptămâna aceasta discutăm despre biblioteca GUI DelphiFMX pentru Python și o comparăm cu Tkinter, biblioteca existentă de facto GUI Python. Aceasta este o oportunitate bună de a vedea lacune în care DelphiFMX se poate îmbunătăți, în timp ce vedem ce face DelphiFMX pentru a îmbunătăți viața dezvoltatorului Python. Vorbind despre dezvoltarea GUI Python, avem o nouă . Ne vom uita, de asemenea, la unele dintre proiectele conexe pentru Python: Agenda pentru flux: Tkinter vs. DelphiFMX Prezentare generală și comparare a celor două biblioteci Unde se poate îmbunătăți DelphiFMX? Ce este nou în DelphiFMX Probleme de revizuire și solicitări de tragere Răspundeți la întrebări Alți feedback sau colaboratori Planificați o foaie de parcurs pentru schimbările viitoare Fluxurile viitoare vor acoperi alte proiecte din ecosistemul nostru Python, proiecte non-Python și chiar proiecte comunitare pe care le iubim! Aceasta este cea mai recentă hartă a ecosistemului tău Python. L-am împărțit în două părți, jumătatea de sus este proiecte pentru dezvoltatorii Python și este punctul central al fluxului pe 2 iunie. Planificăm pe 9 iunie să ne concentrăm asupra proiectelor pentru dezvoltatorii Delphi care includ biblioteci Python pentru o dezvoltare simplă bazată pe Open Pascal. Sunt foarte încântat să arăt la ce lucrăm acolo. Iată o listă cu alte biblioteci open source pe care le putem discuta în fluxurile viitoare: SonarDelphi Pluginul Sonar-Delphi folosit pentru a analiza proiecte Delphi cu SonarQube Bold pentru Delphi – O arhitectură de driver de model (și bibliotecă ORM) pentru Delphi Dev-C++ – Un IDE C/C++ rapid, portabil, simplu și gratuit Jocuri arcade C++ – 4 jocuri arcade dezvoltate în C++Builder cu FireMonkey pentru Windows, macOS, iOS și Android DelphiArcadeGames – 4 jocuri arcade dezvoltate în Delphi cu FireMonkey pentru Windows, macOS, iOS și Android DelphiBigNumbers – Numere întregi și cu virgulă mobilă foarte mari în Delphi Kastri – Biblioteca Delphi de uz general skia4delphi – Bibliotecă GUI 2D pentru VCL și FireMonkey Hashload Boss – Manager de dependențe pentru Delphi și Lazarus Și deschis la sugestiile comunității Ca parte a fluxului live, voi împărtăși documente mai detaliate despre proiect, dar iată câteva statistici ca o previzualizare. Sper să ne vedem online pentru seminariul web de joi, 2 iunie 2022, la ora 10:00 CDT .

Read More

Marcaje și Navigator sunt disponibile pentru RAD Studio 11!

Marcaje și Navigator, cunoscute inițial sub numele de pluginuri Parnassus, sunt unele dintre cele mai solicitate suplimente IDE ale noastre. Suntem foarte bucuroși să vă anunțăm că acestea sunt acum disponibile în GetIt pentru RAD Studio 11. Pentru a instala, mergeți la meniul Instrumente din IDE, GetIt Package Manager și selectați secțiunea IDE Plugins din selectorul de categorii din stânga: Marcaje este un supliment favorit de dezvoltatori care înlocuiește marcajele încorporate ale editorului, cu un număr nelimitat de marcaje, o comandă rapidă la îndemână (Ctrl+B), evită suprascrierea accidentală a marcajelor, marcaje cu cursor pentru comutarea rapidă a locației și navigarea inversă/stivă, un sistem andocat. fereastră care arată contextul marcajelor și multe altele. Navigator este un plugin asociat care vă ajută să navigați rapid oriunde în codul dvs .: apăsați Ctrl+G și tastați pentru a filtra pentru a afișa toate elementele utile din unitatea curentă. Puteți tasta, de exemplu, „prop Foo” (sau chiar mai scurt, „p f” sau chiar „f” dacă aveți suficient de puține elemente pentru a face acest lucru util: filtrează mai multe pe măsură ce tastați mai multe) pentru a găsi proprietăți cu Foo în lor nume, sau găsiți câmpuri de citire/scriere de proprietate sau metode legate de acea proprietate… sau pentru a naviga la clase, înregistrări, enumerari și alte tipuri; secțiuni de unitate precum clauzele de utilizare; metode; variabile și multe altele. Orice lucru util în unitatea dvs. este afișat în Navigator și este rapid accesibil. De asemenea, adaugă o minimahartă la editorul IDE care arată unde vă aflați în cod. RAD Studio 11 afișează pluginurile Marcaje și Navigator ambele în uz: marcajele sunt afișate în editor și fereastra andocata în colțul din dreapta jos, în timp ce pluginul Navigator oferă minimapa în partea dreaptă a editorului și fereastra de navigare plutitoare unde am caut o metoda Marcajele și Navigatorul sunt de obicei disponibile imediat odată cu lansarea, iar acest lucru nu s-a întâmplat pentru RAD Studio 11. Cu toate acestea, am configurat versiunea noastră internă astfel încât aceste plugin-uri să fie întotdeauna disponibile în viitor: adică, puteți fi sigur că avem configurați pentru a nu repeta întârzierea. Al treilea plugin Parnassus, Debugger, ar trebui să apară și el în câteva zile. Pluginurile sunt disponibile atât pentru RAD Studio 11.0, cât și pentru 11.1; de fapt, captura de ecran de mai sus este făcută cu RAD Studio 11.0. Vă mulțumim pentru răbdarea de a aștepta aceste plugin-uri și sperăm că IDE-urile Delphi și C++Builder sunt și mai productive și mai plăcute de utilizat cu aceste extensii! Nu uitați – sunt disponibile chiar acum în GetIt. Codare fericită!

Read More

Patch de depanare Windows 11 Win32 pentru RAD Studio 11.1

Există un nou patch (sau remediere rapidă) disponibil pentru RAD Studio 11.1. Patch-ul abordează o problemă specifică depanării aplicațiilor Win32 pe Windows 11, unde IDE-ul pare să înghețe uneori. Situațiile tipice în care puteți observa înghețarea includ evaluarea ceasurilor cu efecte secundare, deschiderea vizualizării Fire pentru a comuta firele, atașarea la un proces și alte acțiuni comune de depanare. Problema este cauzată de obținerea lanțului de așteptare a firului (GetThreadWaitChain()), care uneori durează până la un minut. Se rezolvă prin dezactivarea caracteristicii lanțului de așteptare a firelor din depanator. Cauza exactă a întârzierii lanțului de așteptare a firului de execuție este necunoscută, dar pare să fie legată de un fir de execuție care are un soclu deschis, eventual unde firul de execuție așteaptă să termine IO-ul rețelei. Informațiile lanțului de așteptare a firelor sunt dezactivate pentru Win32 atât pe Windows 10, cât și pe Windows 11. Există o variabilă de mediu pentru a o reactiva dacă aveți nevoie de caracteristica: setați DBK_ENABLE_WAITCHAIN=1 pe un prompt de comandă și rulați RAD Studio (alternativ, setați-l variabilă de mediu la nivel global pentru Windows.) Numai Windows 11 este afectat de problemă, așa că trebuie să instalați corecția doar pe Windows 11. Instalare Puteți descărca acest lucru în GetIt (tehnica noastră recomandată; de asemenea, se va afișa ca disponibil pe Pagina de întâmpinare când porniți IDE-ul) sau îl puteți instala manual după descărcare de pe my.embarcadero.com (fișierul zip conține un program de instalare a fișierelor batch.) Ecranul de întâmpinare RAD Studio 11.1 care arată butonul „Correcție disponibilă”. Faceți clic pe acesta pentru a instala patch-uri, inclusiv pe acesta. Depanare la distanță Deoarece acest lucru corectează depanatorul, dacă faceți depanare la distanță, va trebui, de asemenea, să actualizați PAServer pe mașina de la distanță. Programul de instalare a corecțiilor înlocuiește (locația de instalare a RAD Studio) fișierul PAServersetup_paserver.exe, dar va trebui să îl copiați pe mașina de la distanță și să îl instalați. Există detalii complete în patch-ul readme.

Read More