sgcWebSockets 2026.10 jest już dostępny. Przez tę wersję przewijają się trzy wątki: sgcHTML urosł o elementy, których potrzebuje biznesowa aplikacja webowa i których nie musisz już pisać ręcznie, kryptografia stała się postkwantowa bez dodania choćby jednej zewnętrznej biblioteki, a nowy zestaw komponentów uwierzytelniania Enterprise przejmuje ekran logowania.
Aplikacje webowe: nudna część, załatwiona
Sesje, logowanie i CSRF. Nowy komponent TsgcHTMLAuth i jego magazyny sesji utrzymują ciasteczko, odpowiadają na żądania logowania i wylogowania, zamykają nieaktywne sesje i ograniczają nieudane próby logowania. Token CSRF podróżuje w znaczniku meta, htmx dodaje go samodzielnie do każdego żądania, a serwer odrzuca post, który go nie niesie.
FAuth := TsgcHTMLAuth.Create(Self);
FAuth.SessionStore := TsgcHTMLSessionStore_Memory.Create(Self);
FAuth.CookieName := 'app_session';
FEngine.Auth := FAuth;
Trasy, które czyta się jak trasy. Parametry ścieżki, filtr metod oraz dostęp do nagłówków, ciasteczek i treści żądania:
with FRouter.Routes.Add do
begin
Path := '/customers/{id}/edit';
Methods := [hrmGet, hrmPost];
RequireLogin := True;
RequireRoles := 'admin,sales';
end;
Strony, które można testować. DispatchDirect odpowiada na żądanie bez żadnego gniazda za nim, a nowa jednostka odczytuje wygenerowany HTML, znajduje elementy po id, klasie, znaczniku lub atrybucie i porównuje stronę z zapisaną kopią, dzięki czemu niezamierzoną zmianę w znacznikach wychwytuje test, a nie klient.
Nawigacja, która przypomina aplikację. Strony zmieniają się bez pełnego przeładowania i zachowują pozycję przewijania oraz to, co użytkownik akurat wpisywał, z paskiem ładowania, oknem dialogowym, gdy połączenie się zrywa, i komunikatem, gdy żądanie się nie powiedzie. Wszystko to domyślnie wyłączone.
Strona zaprojektowana na formularzu, bez kodu. Umieść na formularzu VCL TsgcWebSocketHTTPServer, TsgcHTMLDesignServer, TsgcHTMLDesignSurface i kilka komponentów sgcHTML, a WSServer.Active := True to jedyna linia, którą musisz napisać. Design server buduje stronę z formularza i serwuje Bootstrap, htmx i Chart.js z pliku wykonywalnego. Akcje Surface uruchamiają kod Delphi, gdy użytkownik kliknie lub wyśle formularz: ustaw Source i Target w Inspektorze obiektów, kliknij dwukrotnie OnExecute, a cel zostanie zaktualizowany w miejscu bez przeładowania strony. Sześć dem QuickStart w Demos\60.HTML\00.QuickStart uczy tego krok po kroku, przewodnik Getting Started (PDF, po angielsku) je wyjaśnia, a szybki start sgcHTML pokazuje ścieżkę na 5 minut.
Cztery najważniejsze funkcje
Każda z nich ma osobny artykuł, podlinkowany na końcu, więc tutaj tylko czym jest:
- MCP Apps. Narzędzie MCP, które odpowiada stroną zamiast akapitem, renderowaną wewnątrz ChatGPT, Claude lub VS Code, zbudowaną z tych samych komponentów co każda inna strona sgcHTML.
- Generator stron oparty na AI. Opisz stronę albo daj projektantowi zrzut ekranu, a on zbuduje ją z twoich zarejestrowanych komponentów jako kandydata, którego akceptujesz albo odrzucasz.
- Komponent CRUD. Lista, wyszukiwanie, stronicowanie, formularz, usuwanie i ścieżka zapisu jednego zbioru danych, na TDataSet albo na twoim własnym SQL, z kreatorem w IDE i generatorem z linii poleceń.
- AI Data Pack. Zadaj pytanie w zwykłym języku siatce, tabeli danych albo tabeli przestawnej, z parserem opartym na regułach, który odpowiada nawet wtedy, gdy nie ma żadnego klucza API.
Push, na dwa sposoby
Server sent events mogą teraz przenosić aktualizacje zamiast WebSocketu, z odtworzeniem tego, co zostało pominięte podczas rozłączenia, i działa to ze zwykłym serwerem HTTP. Web Push dociera do przeglądarki, która jest zamknięta. Razem z nimi pojawiają się skrzynka powiadomień i tabela preferencji, a komponent powiadomień decyduje, który kanał otrzymuje dany użytkownik.
Klient EventSource dla Delphi
Nowy TsgcSSEClient konsumuje dowolny strumień Server-Sent Events i jest dostępny w każdej edycji. Łączy się ponownie samodzielnie i wysyła Last-Event-ID, dzięki czemu serwer wznawia strumień w miejscu, w którym się zatrzymał. Pole retry: wysyłane przez serwer jest respektowane, OnEvent przekazuje typ zdarzenia, dane i id, a ReconnectOptions dodaje backoff i jitter. TLS, proxy i uwierzytelnianie ustawia się w OnBeforeConnect, które przekazuje klienta HTTP używanego przez komponent.
FSSE := TsgcSSEClient.Create(Self);
FSSE.URL := 'https://example.com/events';
FSSE.ReconnectOptions.Backoff := True;
FSSE.ReconnectOptions.MaxInterval := 30000;
FSSE.ReconnectOptions.Jitter := 0.2;
FSSE.OnEvent := DoSSEEvent;
FSSE.Open;
procedure TForm1.DoSSEEvent(Sender: TObject; const aEvent: TsgcSSEEvent);
begin
Memo1.Lines.Add(aEvent.EventType + ': ' + aEvent.Data);
end;
Parser, na którym to bazuje, TsgcSSEParser, jest publiczny. Podawaj mu bajty dowolnego text/event-stream w fragmentach o dowolnym rozmiarze, czyli dokładnie tym, czym jest odpowiedź strumieniowa LLM lub odpowiedź MCP Streamable HTTP.
FParser := TsgcSSEParser.Create;
FParser.OnEvent := DoSSEEvent;
FParser.Feed('event: delta' + #10 + 'data: {"text":"Hel"}' + #10#10);
Nowe demo, Demos\20.HTTP_Protocol\17.SSE_Client_Component, pokazuje to od początku do końca.
AI: odpowiedzi, na których można działać
TsgcAIChat może poprosić o JSON zgodny ze schematem, który podasz, w OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok i Mistral, przez nową metodę ChatJSON, która analizuje odpowiedź i pyta ponownie, dołączając błąd analizy, gdy nie da się jej odczytać. Komponent czatu wysyła i odbiera teraz także obrazy, a BaseUrl jest teraz respektowany przez każdego dostawcę, a nie tylko przez Ollama, więc każdego z nich można skierować na proxy albo lokalną bramę.
Ekstrakcja dokumentów: od PDF do zwalidowanego JSON
Nowy TsgcAIDocumentExtractor przyjmuje PDF albo obraz oraz schemat JSON i zwraca JSON, który został sprawdzony wobec tego schematu. OpenAI, Anthropic i Gemini odczytują PDF bezpośrednio, pozostałe modele wizyjne odczytują obrazy. Wbudowane predefiniowane zestawy obejmują faktury, paragony i dokumenty tożsamości (dpInvoice, dpReceipt, dpIDCard), a każde pole otrzymuje poziom pewności, więc OnLowConfidence mówi, które wartości poniżej MinConfidence warto sprawdzić jeszcze raz. Gdy odpowiedź nie przejdzie walidacji, komponent pyta ponownie, dołączając błędy (ValidationRetries).
FExtractor := TsgcAIDocumentExtractor.Create(Self);
FExtractor.AIChat := AIChat1;
FExtractor.Preset := dpInvoice;
FExtractor.MinConfidence := 0.8;
FExtractor.OnLowConfidence := DoLowConfidence;
Memo1.Lines.Text := FExtractor.ExtractFile('invoice.pdf');
if FExtractor.LastResult.FieldConfidence('total') < 0.8 then
ShowMessage('Check the total by hand');
Podłącz TsgcAIOCRTesseract albo TsgcAIOCRWindows, który korzysta z OCR wbudowanego w Windows 10 i nowsze bez niczego do zainstalowania, i ustaw OCRMode na domFallback albo domAlways, a tekst zostanie najpierw rozpoznany lokalnie, więc nawet model działający wyłącznie na tekście na Ollama poradzi sobie z ekstrakcją. Do własnych promptów TsgcAIChat zyskuje ChatWithDocument, ChatWithDocumentBase64, ChatWithAttachments i ChatJSONWithAttachments, które wysyłają wraz z wiadomością jeden lub kilka plików przechowywanych na liście TsgcAIChatAttachments.
Agent głosowy, który słucha, odpowiada i wywołuje narzędzia
Nowy TsgcAIVoiceAgent to jeden komponent, który słucha, wykrywa, kiedy użytkownik skończył swoją turę, odpowiada własnym głosem i wywołuje Twoje narzędzia, przez OpenAI Realtime albo Gemini Live. Mówi WebSocket, albo WebRTC z OpenAI, i działa na Windows, Android i iOS. Tury są wykrywane przez VAD serwera, semantyczny VAD, VAD po stronie klienta albo ręcznie (vtdServerVAD, vtdSemanticVAD, vtdClientVAD, vtdManual). Dzięki BargeIn użytkownik może przerwać, a agent przestaje mówić i ucina swoją odpowiedź w miejscu, w którym została przerwana. OnTranscript dostarcza transkrypcje na żywo zarówno użytkownika, jak i agenta.
FAgent := TsgcAIVoiceAgent.Create(Self);
FAgent.Provider := vapOpenAI;
FAgent.OpenAIOptions.ApiKey := 'sk-...';
FAgent.Instructions := 'You are the shop assistant. Keep answers short.';
FAgent.TurnDetection.Mode := vtdSemanticVAD;
FAgent.BargeIn := True;
oTool := FAgent.Tools.Add;
oTool.Name := 'find_product';
oTool.Description := 'Looks up a product by name';
oTool.Parameters :=
'{"type":"object","properties":{"name":{"type":"string"}}}';
FAgent.OnTranscript := DoTranscript;
FAgent.OnToolCall := DoToolCall;
FAgent.Start;
procedure TForm1.DoToolCall(Sender: TObject; const aCallId, aName,
aArguments: string; var aResult: string; var aHandled: Boolean);
begin
if aName = 'find_product' then
begin
aResult := FindProduct(aArguments);
aHandled := True;
end;
end;
Narzędzia pochodzą z OnToolCall, a kiedy TsgcWSAPI_Client_MCP zostanie przypisany do MCPClient, narzędzia tego serwera MCP są automatycznie oferowane modelowi. Do telefonii Audio.Format przełącza się na G.711 mu-law albo A-law przy 8 kHz (vafG711ULaw, vafG711ALaw). Agent głosowy jest dostępny od Delphi 7 do Delphi 13 oraz dla .NET, a nowa demonstracja zamienia go w głosowego asystenta sklepowego działającego na TDataSet.
MCP: specyfikacja 2026-07-28
Serwer i klient MCP obsługują teraz wersję 2026-07-28 protokołu Model Context Protocol. Ten sam serwer odpowiada zarówno nowym klientom bezstanowym, jak i dotychczasowym klientom 2025-11-25, takim jak VS Code i Claude, więc nic się nie zmienia dla klientów, które już masz. Po stronie klienta MCPOptions.ProtocolEra ustawione na Auto najpierw próbuje nowego protokołu, wraca do starego, gdy serwer go nie obsługuje, i zapamiętuje odpowiedź dla każdego serwera.
- Wykrywanie i nagłówki.
server/discover, wersja protokołu i dane klienta wysyłane z każdym żądaniem, nagłówki żądaniaMcp-MethodiMcp-Namesprawdzane przez serwer, wskazówki dotyczące pamięci podręcznej w wynikach list oraz nowe kody błędów. Parametry narzędzi oznaczonex-mcp-headersą przesyłane jako nagłówki żądania. - Jeden strumień dla wszystkich zmian. Dzięki
subscriptions/listenklient otwiera jeden długotrwały strumień i otrzymuje zmiany list narzędzi, promptów i zasobów oraz aktualizacje zasobów. Metody wysyłania powiadomień, które już wywołujesz, docierają także do tych klientów. - Żądania wieloetapowe. Narzędzie, prompt lub zasób może poprosić klienta o dane wejściowe, formularz, stronę webową, odpowiedź AI albo katalogi główne klienta, a następnie kontynuować, gdy klient wywoła je ponownie z odpowiedziami. Stan przechowywany między wywołaniami jest podpisany i wygasa (
MCPOptions.MRTR). Po stronie klienta odpowiada na nieOnMCPInputRequired, a istniejące procedury obsługi roots, sampling i elicitation odpowiadają samodzielnie. - Zadania. Długo działające narzędzie zwraca zadanie, które klient śledzi do zakończenia, odpowiada, gdy zadanie wymaga danych, i może je anulować. Na serwerze służy do tego
MCPOptions.TaskszCreateTask, a w kliencieOnMCPTaskCreated,OnMCPTaskStatusiOnMCPTaskCompleted. - Autoryzacja klienta. Gdy włączone jest
MCPOptions.Authorization, kod 401 nie jest już końcem drogi: klient sam znajduje serwer autoryzacji, rejestruje się za pomocą dokumentu metadanych identyfikatora klienta lub rejestracji dynamicznej, loguje się z użyciem PKCE, sprawdza wystawcę i odświeża token po jego wygaśnięciu.
Kryptografia: postkwantowa, w Object Pascalu
ML-KEM (FIPS 203), ML-DSA (FIPS 204) i SLH-DSA (FIPS 205), hybrydowa enkapsulacja kluczy X-Wing, postkwantowe certyfikaty X.509 i urzędy certyfikacji oraz JWT podpisywane ML-DSA. Wszystko napisane w Object Pascalu w pakiecie sgcCrypto, bez żadnej zewnętrznej biblioteki, zweryfikowane wobec znanych wektorów odpowiedzi NIST.
Na tym opiera się natywny silnik TLS 1.3 i TLS 1.2, także w czystym Pascalu: klient albo serwer mówi w TLS bez OpenSSL i bez SChannel, negocjując hybrydowe postkwantowe grupy z RFC 10024, z ALPN, S N I, certyfikatami klienta i opcjonalnym użyciem magazynu zaufania systemu operacyjnego. TLS 1.2 jest dostępny dla partnerów, którzy nie potrafią jeszcze obsłużyć TLS 1.3, domyślnie z zestawami AES-GCM i ChaCha20-Poly1305 zapewniającymi utajnianie z wyprzedzeniem, rozszerzonym sekretem głównym i ochroną przed obniżeniem wersji, a TLSOptions.Version ustawia najniższą dopuszczalną wersję. Grupy hybrydowe pozostają wyłącznie w TLS 1.3.
Klasyczna strona została wzmocniona przy tej samej okazji: zaślepione RSA w stałym czasie, mnożenie skalarne krzywej eliptycznej w stałym czasie i Ed25519, AES i GHASH bez tabel, importowane klucze prywatne sprawdzane wobec ich publicznej połowy oraz odrzucane niezminimalizowane podpisy DER.
TLS na serwerze, po Twojemu
Zwykły ruch i TLS na tym samym porcie. SSLOptions.AllowPlainText pozwala serwerowi TLS przyjmować także zwykłe połączenia HTTP i WebSocket na tym samym porcie, rozróżniając je po pierwszym bajcie wysłanym przez klienta. SSLOptions.PlainTextPolicy obsługuje je, przekierowuje kodem 308 na https albo odrzuca kodem 400, a Server.IsTLS(AContext) mówi w OnCommandGet, którym transportem przyszło żądanie. Działa z domyślnym IOHandlerem, IOCP i EPOLL.
HSTS dla oceny A+. SecurityOptions.HSTS_Options dodaje nagłówek Strict-Transport-Security do każdej odpowiedzi wysyłanej przez TLS, czego SSL Labs potrzebuje, by przyznać ocenę A+. Nigdy nie jest wysyłany przez zwykły HTTP i nie jest dodawany dwukrotnie, gdy Twój kod już go ustawia.
Własna biblioteka TLS. Serwery IOCP i EPOLL nie są już związane z OpenSSL. Napisz dostawcę TLS dla swojej biblioteki, na przykład SecureBlackbox, a silnik sterowany zdarzeniami obsłuży go dokładnie tak jak wbudowany.
Uwierzytelnianie: logowanie, o które pytają wszyscy
Nowy zestaw komponentów uwierzytelniania odpowiada na pytania, które o ekran logowania zadaje każdy klient. Są w edycjach Enterprise i All-Access oraz w pakiecie sgcAuth, a te same komponenty są częścią sgcWebSockets .NET.
- Passkeys. Serwer WebAuthn loguje użytkownika bez wpisywania nazwy, podpowiada klucze w liście autouzupełniania przeglądarki, przechowuje kilka kluczy na użytkownika, odróżnia klucz synchronizowany od związanego z jednym urządzeniem i zgłasza zdarzenie, dzięki któremu poświadczenia leżą w Twojej własnej bazie danych.
- Jednokrotne logowanie SAML.
TsgcSAMLServiceProviderzamienia Twoją aplikację w dostawcę usługi SAML 2.0 dla Entra ID, Okta, AD FS, Google Workspace, Keycloak i każdego innego dostawcy tożsamości. - Active Directory i LDAP.
TsgcLDAPClientloguje użytkowników hasłem z katalogu przez LDAPS lub StartTLS i odczytuje ich grupy, razem z grupami zagnieżdżonymi. - Kody z aplikacji uwierzytelniającej.
TsgcTOTPAuthenticatorgeneruje i sprawdza kody Google Authenticator, Microsoft Authenticator i podobnych aplikacji, wraz z linkiem rejestracyjnym do kodu QR, ochroną przed ponownym użyciem i kodami odzyskiwania. - OpenID Connect.
TsgcHTTP_OIDC_Clientloguje użytkowników u dowolnego dostawcy OpenID na podstawie dokumentu discovery i sprawdza tokeny ID oraz tokeny bearer docierające do Twojego własnego API. - Poczta bez zapisanego hasła.
TsgcMailOAuth2pobiera i odświeża tokeny OAuth2 Microsoft 365 i Gmaila, których oczekują dziś SMTP, IMAP i POP3.
Drobiazgi, które się sumują
- Strony od prawej do lewej. Strony sgcHTML same przełączają się na układ od prawej do lewej dla arabskiego, hebrajskiego, perskiego, urdu i pozostałych języków pisanych od prawej do lewej, ładują dołączony teraz do biblioteki arkusz stylów Bootstrap dla tego kierunku i odbijają komponenty od paska bocznego po siatkę.
HtmlDiriDirwymuszają kierunek, gdy go potrzebujesz. Nowe demo 22.RTL. - Geolokalizacja.
TsgcHTMLComponent_Geolocationodczytuje pozycję GPS przeglądarki jednorazowo lub w sposób ciągły i wysyła na serwer szerokość, długość geograficzną, dokładność, wysokość, kierunek i prędkość. - Siatka, która sortuje i filtruje na serwerze.
SortMode := gsmServeriServerFilterwysyłają sortowanie i jedno pole filtra na kolumnę przez htmx, z filtrem tekstowym lub zakresowym dla każdej kolumny (gfkText,gfkRange). Paginacja i AutoComplete zyskały tę samą ścieżkę htmx przez zwykły HTTP. - Skaner z kamery na iPhonie.
PolyfillURLładuje dekoder kodów kreskowych w przeglądarkach, które go nie mają, aRedirectURLotwiera stronę z zeskanowanym kodem. - Lazarus. Dema sgcHTML działające w czasie wykonania są teraz dostępne dla Lazarusa i Free Pascala, a pakiet Lazarus zawiera jednostki CRUD i MCP Apps.
- Dlaczego mnie odrzucono? Gdy serwer odrzuca połączenie WebSocket, na przykład kodem 401, bo token wygasł, treść jego odpowiedzi jest dostępna w
OnExceptionprzezTsgcWSConnectionClient(Connection).HandshakeResponseBody. - Własne dane w wątku połączenia.
QueueOptions.DrainedMode := qdmEveryPasswywołujeOnQueueDrainedw każdym przebiegu pętli połączenia, w wątku samego połączenia, więc aplikacja może stamtąd wysłać oczekujące dane. - Keep-alive w WinHTTP. Klient WebSocket WinHTTP zyskuje
OnBeforeHeartBeat, by wysyłać własną wiadomość keep-alive co interwał HeartBeat. - AI Chat.
ImageOutputpozwala Gemini odpowiadać obrazami i edytować je dalej wiadomość po wiadomości, żądanie edycji obrazu OpenAI przyjmuje opcje gpt-image-1 i kilka obrazów wejściowych, aTLSOptionswybiera wersję OpenSSL używaną w żądaniach do dostawcy. - Klient OpenAPI.
TsgcOpenAPI_Client.UserAgentustawia nagłówek User-Agent każdego żądania albo pomija go, gdy jest pusty.
Poprawki warte wymienienia
- Podpisywanie i walidacja JWT kluczami RSA i ECDSA oraz uszkodzenie pamięci w aplikacjach 32-bitowych, gdy OpenSSL jest linkowany statycznie.
- Obsługa SChannel zostawiała kopię klucza prywatnego w magazynie kluczy Windows przy każdym połączeniu korzystającym z pliku PFX i nie wysyłała certyfikatu klienta na nowszych wersjach Windows.
- Równoczesne połączenia SChannel korzystające z certyfikatu z magazynu Windows kończyły się niepowodzeniem uzgadniania.
- Serwer OAuth2 odrzucał dowody DPoP podpisane kluczami RSA.
- Podpisane adresy URL CloudFront, których podpis nie był zakodowany w sposób bezpieczny dla URL.
.NET
Biblioteka .NET nadąża: uwierzytelnianie i sesje z mostkiem ClaimsPrincipal dla ASP.NET Core, router, narzędzia testowe, nawigacja SPA, transport SSE z natywnym punktem końcowym, ustrukturyzowane wyjście, ekstrakcja dokumentów z obydwoma silnikami OCR, agent głosowy w czasie rzeczywistym, AI Data Pack, Web Push, MCP Apps, komponent CRUD wraz z adapterami oraz nowy TsgcSSEClient, wszystko pod tymi samymi nazwami API co w Delphi.
Razor Tag Helpery dla ASP.NET Core. sgcHTML pasuje teraz do aplikacji MVC lub Razor Pages tak samo jak Telerik UI i DevExpress. Tag Helpery takie jak <sgc-grid>, <sgc-form>, <sgc-autocomplete>, <sgc-dialog> i <sgc-chart> oraz ich płynne odpowiedniki w Html.Sgc() renderują Bootstrap 5 po stronie serwera i komunikują się z Twoimi kontrolerami przez htmx, bez frameworka JavaScript. Grid stronicuje, sortuje, filtruje, przeszukuje i eksportuje do XLSX i PDF dane z IQueryable, więc EF Core wykonuje to wszystko jako SQL:
<sgc-grid name="orders" key="Id" items="Model"
asp-action="Read" asp-export-action="Export" export="xlsx,pdf"
page-size="15" sortable="true" filterable="true"
searchable="true" push-url="true">
<sgc-column field="Reference" searchable="true" />
<sgc-column field="Customer" searchable="true" />
<sgc-column field="OrderDate" title="Date" format="{0:yyyy-MM-dd}" filter="range" />
<sgc-column field="Total" format="{0:N2}" align="right" filter="range" />
</sgc-grid>
// OrdersController
public IActionResult Read(SgcDataRequest request) => this.SgcGrid(request, Rows());
Pola wiążą się przez asp-for i pokazują błędy ModelState, a this.SgcCloseDialog("edit-order", refresh: "orders") zamyka okno edycji i odświeża grid. Tym, czego nie mają inni, jest wypychanie danych z serwera: wykres z live="true" rysuje się na nowo w każdej otwartej przeglądarce, gdy usługa w tle wywołuje hub.BroadcastChartAsync(...), przez WebSocket sgcHTML i bez kodu SignalR. Jest dostarczany w pakiecie NuGet esegece.sgcHTML.AspNetCore, łącznie z edycją Community, a demo 22.RazorMvc to dobrze znany przykład zamówień zbudowany od nowa z jego użyciem.
Aktualizacja
Wszystko, co nowe, jest addytywne i domyślnie wyłączone. Dodaj nowe jednostki, przebuduj swoje pakiety, a istniejąca aplikacja będzie zachowywać się dokładnie tak jak wcześniej.
Pełne wersje
- Uruchom swoją aplikację Delphi wewnątrz ChatGPT i Claude
- Zamień zrzut ekranu w stronę webową Delphi
- Delphi TLS 1.3 bez DLL-i OpenSSL
- Strona internetowa CRUD w Delphi w pięć minut
- Zadaj pytanie swojej siatce Delphi prostym językiem angielskim
- Dotrzyj do zamkniętej przeglądarki, z Delphi
- Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA
- Jednokrotne logowanie SAML w Delphi z Entra ID, Okta i AD FS
- Passkeys w Delphi: logowanie bez hasła z WebAuthn
Zobacz wideo
Jest na ten temat krótkie wideo na kanale eSeGeCe.
Pytania, uwagi lub pomoc przy migracji? Skontaktuj się z nami — otrzymasz odpowiedź od osób, które napisały ten kod.
