TMS Software. All-Access

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

În articolele anterioare din această serie, am acoperit câteva biblioteci JS mari, cum ar fi Bootstrap și FontAwesome . Dar există o altă bibliotecă JS importantă. Poate fi găsit pândind sub aproximativ 75% din toate site-urile web la nivel global. A ajuns pentru prima dată pe scenă acum mai bine de 15 ani. Și probabil că va fi cu noi în viitorul previzibil, chiar dacă utilizarea sa a început să scadă. Vorbesc desigur despre jQuery . Dar, deși puteți utiliza Bootstrap și FontAwesome în proiectele dvs. TMS WEB Core fără a fi nevoie să recurgeți la codificare JavaScript, nu același lucru se poate spune cu adevărat pentru jQuery. În esență, jQuery poate fi considerat ca un fel de extensie a limbajului JavaScript. Motto-ul lor este Write Less, Do More . Vom arunca o privire la locurile în care jQuery ar putea găsi o potrivire bună în proiectele TMS WEB Core și, de asemenea, unele dintre provocările neașteptate care ar putea apărea. JQuery bun În primul rând, cea mai scurtă dintre istorii. jQuery a apărut pentru prima dată în jurul anului 2006. A fost o perioadă în care scrierea codului JavaScript însemna că trebuia să fii foarte conștient de browser-ul țintă care ar rula codul tău. Standardele zilei erau în cel mai bun caz slabe. Și după cum se spune, lucrul grozav despre standarde este că există atât de multe dintre care să alegi. jQuery a oferit dezvoltatorilor o abordare consecventă pentru scrierea JavaScript (un API, în esență), ceea ce însemna că puteți scrie cod folosind jQuery care să funcționeze apoi în multe browsere. Deci, firesc, a crescut rapid în popularitate. De fapt, a devenit atât de popular, în special în rândul dezvoltatorilor noi, încât s-a spus că unii dezvoltatori se luptă să scrie JavaScript Vanilla real (alias JavaScript care nu folosește niciun cadru precum jQuery). Nu este surprinzător, având în vedere cât de ușor a fost să utilizați jQuery în comparație cu echivalentele Vanilla JS de acum câțiva ani. De asemenea, jQuery a evoluat de-a lungul anilor pentru a ține pasul cu tendințele web actuale și poate chiar a ajutat într-o oarecare măsură la adoptarea noilor tehnologii de browser. Chiar dacă unele dintre aceste tehnologii sfârșesc în cele din urmă prin a elimina nevoia de jQuery în primul rând. Progres, tot la fel. Și având în vedere prezența aproape omniprezentă a jQuery, multe (anterior, cele mai multe) biblioteci JS au fost construite deasupra acestuia, asigurând în continuare că are o viață lungă înaintea ei. Ultima dată, ne-am uitat la BigText , o astfel de bibliotecă JS, cu jQuery ca singură dependență. Bootstrap 4 a fost, de asemenea, dependent de jQuery, dar acest lucru a fost eliminat pentru Bootstrap 5. Eliminarea jQuery ca dependență pare să fie puțin o tendință în ultimul timp, poate în mod ironic, în același timp, că multe biblioteci JS sunt din ce în ce mai lansate cu variante care sunt special adaptate pentru alte cadre JS (concurente). Mai puțin bun jQuery Fiind în preajmă atât de mult timp și îmbunătățit activ în tot acest timp, în mod natural, o bună parte a balonării este destinată să facă parte din amestec, așa cum ar fi cazul în orice produs software. Pentru unele proiecte, aceasta va fi cea mai mare bibliotecă JS din proiect, micșorându-le pe toate celelalte […]

Read More

Preturi speciale de upgrade

Sunteți la curent cu cele mai recente evoluții ale noastre? Știm că este greu să ținem pasul cu ultimele noastre evoluții, merge super rapid! Cel mai bun mod de a fi la curent? Desigur, TMS ALL-ACCES! Pentru a oferi clienților noștri acces la toate cele mai recente evoluții, am creat abonamentul nostru TMS ALL-ACCESS ! Pentru că ne dorim ca clienții noștri să poată folosi toate produsele noastre fără restricții sau limitări. Și când spunem TOT, ne referim cu adevărat la TOATE produsele noastre pe care le oferim acum și, de asemenea, la toate produsele noi pe care le vom lansa în anul abonamentului . În plus, utilizatorii noștri cu acces total sunt primii care primesc previzualizările și beta-urile produselor noastre nelansate! O recapitulare rapidă În primul trimestru al anului 2022, am lansat deja 3 produse noi: Obțineți acces complet cu: Plan simplu : Toate produsele actuale și noi la un preț! Reînnoire ușoară : Reînnoire anuală doar pentru 520 EUR! Instalare ușoară : toate produsele sunt accesibile prin instrumentul TMS Subscription Manager Asistență ușoară : acces complet la centrul de asistență online în toate zonele Actualizare ușoară : acces timpuriu la beta-uri ale produselor Învățare ușoară : acces la TMS WEB Academy Experiență de utilizator plăcută Utilizați Managerul de abonamente TMS cu o singură conectare pentru a obține acces instantaneu la toate produsele din abonamentul dvs. TMS ALL-ACCESS. TMS Subscription Manager clasifică produsele pe tehnologie: VCL, WEB, FMX, BIZ, FNC, DEV, .NET, IntraWeb și LCL. Pentru fiecare produs, primiți o descriere, un link către pagina web a produsului, informații despre cea mai recentă versiune disponibilă și data de lansare, informații despre ultima versiune de descărcare și data de descărcare și informații despre ultima versiune și data de instalare a produsului. Puteți marca anumite produse TMS ca produse preferate. Vă permite să începeți mai multe descărcări. În culise, TMS Subscription Manager păstrează o copie de rezervă a oricăror versiuni de produs pe care le-ați descărcat. Faceți clic dreapta pe celula cu numărul de versiune descărcată pentru fiecare produs și din meniul contextual puteți vedea toate versiunile disponibile (dacă există) și puteți activa o altă versiune pentru instalare. Managerul de abonament TMS vă ține mereu informat cu privire la valabilitatea abonamentului și vă va ghida către ordinul de reînnoire la expirare. Din Managerul de abonament TMS există o listă cuprinzătoare de link-uri pentru a interacționa cu noi, prin e-mail, rețele sociale, forumuri, RSS, videoclipuri Youtube… Știați… … ca pretul de reinnoire dupa 1 an este la 70% reducere fata de pretul noua licenta, adica in prezent doar 520 EUR ?! Deci, odată ce sunteți abonat TMS ALL-ACCESS, sunteți acoperit în următorii ani doar pentru această fracțiune din preț. Dorim să oferim prețuri corecte TUTUROR clienților noștri în orice moment! Considerăm că clientul ar trebui să poată cumpăra la un preț atractiv și corect în ziua în care clienții doresc să facă achiziția și nu în ziua în care ne dorim acest lucru. Deci ce mai aștepți? Contactați vânzările pentru prețuri speciale de actualizare pentru clienții existenți ai altor produse. Solicitările sunt analizate de la caz la caz și se face cea mai bună ofertă posibilă.

Read More

Interacționați cu datele grafice din Delphi

Săptămâna trecută am creat un blog despre vizualizarea propriei structuri de date , care arăta capabilitățile datelor virtuale și puținul cod necesar pentru a începe și a funcționa. Blogul de astăzi demonstrează cum să interacționați cu diagrama . Când datele sunt încărcate, cum mărim, micșorăm? Cum putem obține mai multe detalii despre un anumit punct al datelor? Panorare Panarea este activată în mod implicit, puteți deplasa de la stânga la dreapta pe axa X. Pentru a activa/dezactiva panoarea, puteți utiliza proprietatea InteractionOptions.Panning. Panarea se face prin mișcarea degetului/mouse-ului de la dreapta la stânga sau de la stânga la dreapta. În mod implicit, graficul arată întreaga gamă de puncte, începând cu punctul 1. Tragerea de la stânga la dreapta va afișa punctele înainte de punctul zero pe diagramă Tragerea de la dreapta la stânga va afișa puncte după ultimul vizibil Graficul poate fi resetat folosind următorul cod TMSFNCChart1.BeginUpdate; pentru I := 0 la TMSFNCChart1.Series.Count – 1 do TMSFNCChart1.Series[I].AutoXRange := arEnabled; TMSFNCChart1.EndUpdate; Zoom Mărirea / micșorarea este, de asemenea, activată în mod implicit, pe intervalul x, ceea ce înseamnă că puteți mări/scala orizontal. Acest lucru se poate face ținând apăsată tasta CTRL de pe tastatură, trăgând mouse-ul/degetul la stânga și la dreapta sau făcând un gest de ciupire pe iOS/Android. Mai jos sunt 2 capturi de ecran ale diagramei în acțiune în timp ce măriți și micșorați Graficul poate fi resetat în același mod ca și în cazul panoării. Proprietatea care acceptă interacțiunea la scară se află în InteractionOptions.ScaleMode, care poate fi setat la smHorizontal (implicit), smVertical (scalarea valorilor y) sau smNone. Detectarea punctului Graficul expune o serie de evenimente care sunt declanșate atunci când faceți clic pe un punct, bară, felie sau un element din legendă. Pentru acest eșantion, dorim să facem clic pe o bară, să vizualizăm valoarea și să schimbăm culoarea. Codul pentru a face acest lucru este afișat mai jos. procedura TForm1.TMSFNCBarChart1SerieBarClick(Expeditor: TObject; APoint: TTMSFNCChartPoint); ÎNCEPE APoint.Color := gcOrange; ShowMessage(‘Punctul pe care s-a făcut clic are valoarea ‘ + APoint.YValue.ToString); Sfârşit; v2.0 Echipa noastră lucrează din greu la următoarea versiune, care va include o cantitate semnificativă de funcții noi și îmbunătățiri legate de importul de date, aspectul și simțul și experiența din cutie . Rămâneți pe fază pentru mai multe! Doriți să explorați capabilitățile TMS FNC Chart, mergeți mai departe și descărcați-l de pe pagina noastră de produs .

Read More

Extindeți TMS WEB Core cu bibliotecile JS cu Andrew: Epic JSON Primer (partea 1)

Pentru restul acestui document, vom lucra de trei ori – arătând versiunea JavaScript (JS), versiunea Wrapper TMS WEB Core (WC) și versiunea Delphi (PAS) a fiecărui scenariu, prezentată ca un bloc de cod potrivit pentru includerea (și testat!) într-un proiect TMS WEB Core, care le acceptă pe toate cele trei fără probleme. Dacă lucrați la o parte a unui proiect care a folosit doar codul Delphi VCL, ați putea folosi doar codul PAS la fel de bine acolo. Sau dacă lucrați la o parte a unui proiect care folosea JavaScript pur, atunci codul JS din blocurile asm… end ar funcționa la fel de bine în acel mediu. Vom discuta chiar și puțin despre trecerea între aceste trei medii. Pentru început, va trebui să știm cum să definim variabile pentru a face referire la obiecte JSON. De asemenea, va trebui să știm cum să le furnizăm JSON (uneori denumit serializare) și cum să vedem ce conțin (de serializare). De dragul simplității, ne vom arăta munca folosind console.log () care funcționează atât în Delphi, cât și în JavaScript în mediul nostru TMS WEB Core. Pur și simplu înlocuiți cu ShowMessage sau cu o altă ieșire de depanare echivalentă dacă lucrați în orice alt mediu. Dar de ce trebuie să definim variabile? Ei bine, una dintre diferențele cheie dintre JavaScript și Delphi este modul în care sunt gestionate tipurile de date. Delphi este un limbaj puternic tipizat, ceea ce înseamnă că, la aproape fiecare pas, tipul de date atribuit unei variabile este cunoscut, de obicei înainte de a fi utilizată. Și aceste tipuri de date tind să fie destul de specifice în natură. Un obiect JSON nu este neapărat interschimbabil cu o matrice JSON, de exemplu. JavaScript, pe de altă parte, este un limbaj slab tipizat (unii ar putea spune chiar netipizat). Tipurile de date sunt un fel de gândire ulterioară și puteți scrie tot felul de coduri fără a fi nevoie să vă gândiți la ce fel de date circulă prin ele. Există compromisuri semnificative pentru ambele abordări. JSON este, de asemenea, foarte strâns legat de limbajul JavaScript în sine, iar unele aspecte ale limbajului JavaScript care au evoluat de-a lungul anilor au condus la îmbunătățiri semnificative în utilizarea JSON în acel mediu. Rezultatul general este că codul JS pe care îl vom arăta tinde să fie foarte scurt, uneori puțin criptic, dar adesea foarte eficient. Echivalentele Delphi trebuie adesea să lucreze mai mult pentru a realiza același lucru, dar nu întotdeauna mai puțin eficient, așa cum vom vedea. Folosirea codului JS în TMS WEB Core implică doar împachetarea lui într-un bloc asm…. Nu folosim alte biblioteci sau cod de suport pentru a ne face munca aici. Variațiile WC în mod similar vor funcționa fără nimic special în ceea ce privește mediul TMS WEB Core. Clasele pe care le vom folosi sunt prezente implicit, denumite colectiv clase TJS* . Pentru Delphi, totuși, avem nevoie de un pas suplimentar mic de a adăuga WEBlib.JSON la clauza de utilizare a proiectului nostru (sau Formular etc.). Aceasta aduce clasele TJSON* pe care le vom folosi. Iată, atunci, exemplul nostru de procedură WebButtonClick pe care o vom folosi în aproape fiecare exemplu care urmează. Va începe cu orice variabile JS, WC sau PAS de care avem nevoie și apoi va conține blocuri de cod aferente fiecăreia. […]

Read More

Extindeți TMS WEB Core cu bibliotecile JS cu Andrew: Epic JSON Primer (partea 2)

20: Performanță relativă. Am auzit adesea că, deși este posibil să folosim varianta TJSONObject a acestor abordări (codul PAS la care am lucrat atât de sârguincios), este de preferat să folosim varianta WC, deoarece va fi mai performantă. Vom pune acest lucru la încercare aici într-un exemplu artificial. Adesea, lizibilitatea și reutilizarea codului sunt mai importante decât performanța directă, în special pentru codul dificil care nu este executat frecvent. Dar, în același timp, cu siguranță apar situații în care un pic de cod este executat frecvent într-o buclă strânsă și este important să stoarceți fiecare fragment de performanță. procedura TForm1.WebButton1Click(Expeditor: TObject); var WC_Object: TJSObject; PAS_Object: TJSONObject; ElapsedTime: TDateTime; i: întreg; Număr: întreg; ÎNCEPE ElapsedTime := Acum; // JS creează 1.000.000 de obiecte asm var JS_Object = {}; pentru (var i = 0; i

Read More

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

Până acum, în această serie de bloguri, am acoperit bibliotecile JS care au inclus Ajutor , Instrumente și Materiale . De data aceasta, vom cerceta prima dintre multe biblioteci JS care prezintă un fel de Control – o componentă sau un widget sau un element de vreun fel care vă poate extinde proiectul TMS WEB Core dincolo de ceea ce oferă componentele standard. Primul nostru control se descrie ca „un selector de date ușor și puternic” și într-adevăr este! Se numește FlatPickr și în această primă parte, vom trata cum să-l puneți în funcțiune în proiectele dvs. TMS WEB Core, cu câteva exemple pentru a-și arăta caracteristicile cheie. În partea a doua, vom adopta o abordare diferită prin crearea unei componente TFlatPickr care poate fi apoi adăugată la paleta IDE Delphi, făcându-l și mai ușor de utilizat în proiectele dvs. Motivația TMS WEB Core vine cu un selector de date și oră, desigur, componenta TWebDateTimePicker . Și dacă sunteți un fan al componentelor FNC, există componentele TTMSFNCDatePicker și TTMSFNCDateTimePicker . Și dacă căutați paleta IDE Delphi, veți întâlni și o componentă bazată pe jQuery numită TWebJQXDateTimeInput . Deci o mulțime de opțiuni de la început. Dar ar fi greu să ne gândim la o altă clasă de componente în care oamenii (ca mine!) au opinii foarte puternice despre cum ar trebui să arate și să funcționeze și ce tipuri de opțiuni trebuie să aibă absolut. Și asta chiar înainte de a ajunge la întreaga poveste epică a formatelor de dată și oră, lucru pe care îl vom acoperi foarte curând când vom ajunge la Luxon . De asemenea, selectatorii de date și oră ascund o cantitate surprinzătoare de complexitate pentru ceva care, la suprafață, pare a fi foarte simplu. Când vine vorba de alegerea unui selector de date și oră, iată câteva dintre considerentele pe care le am în minte. Aș considera că acestea sunt „cerințe minime” mai degrabă decât „drăguțe de a avea” pentru proiectele mele. Desigur, proiectele dvs. pot avea un set complet diferit de priorități. Ceea ce este probabil cel mai important este că aceeași componentă de selectare a datei și orei este utilizată pe tot parcursul unui proiect, acolo unde este posibil. Numerele săptămânii. Lucrez cu mulți clienți din industria agriculturii unde numerele săptămânii sunt folosite tot timpul, probabil mai des decât datele, de fapt. Variante. Uneori este logic să afișați un calendar lunar complet pe pagină. Poate chiar două luni. Uneori este un drop-down. Uneori există și un timp. Uneori există doar un timp. Posibilitatea de a utiliza același control în diferite variante ajută la furnizarea unei experiențe consecvente pentru utilizator și are ca rezultat mai puține dureri de cap ca dezvoltator. Restricții. Este important să existe un interval de început/sfârșit pentru datele selectabile, dar deseori este necesar să se poată furniza componentei o listă de date disponibile și ca componenta să indice utilizatorului datele disponibile pentru a fi selectate. Selecții. Flexibilitatea de a putea selecta o dată individuală, date multiple sau un interval este importantă, dar simplificarea este la fel de importantă. Teme. Componenta trebuie să se potrivească vizual cu restul proiectului. Proiectele mele folosesc în mod obișnuit CSS pentru lucrul cu tema, deci puncte bonus dacă pot fi tematice cu ușurință cu CSS. Dar chiar pe listă ar trebui să ofere câteva opțiuni […]

Read More

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