sgcWebSockets 2026.10 ist da. Drei rote Fäden ziehen sich durch diese Version: sgcHTML hat die Teile bekommen, die eine geschäftliche Webanwendung braucht und die Sie nicht mehr von Hand schreiben müssen, die Kryptografie ist postquantensicher geworden, ohne eine einzige externe Bibliothek hinzuzufügen, und eine neue Reihe von Enterprise-Authentifizierungskomponenten übernimmt den Anmeldebildschirm.
Webanwendungen: die lästigen Teile, erledigt
Sessions, Login und CSRF. Die neue Komponente TsgcHTMLAuth und ihre Session-Stores verwalten das Cookie, beantworten die Login- und Logout-Anfragen, schließen inaktive Sessions und drosseln fehlgeschlagene Anmeldungen. Das CSRF-Token reist in einem Meta-Tag mit, htmx fügt es von selbst zu jeder Anfrage hinzu, und der Server weist einen Post zurück, der es nicht mitführt.
FAuth := TsgcHTMLAuth.Create(Self);
FAuth.SessionStore := TsgcHTMLSessionStore_Memory.Create(Self);
FAuth.CookieName := 'app_session';
FEngine.Auth := FAuth;
Routen, die wie Routen aussehen. Pfadparameter, ein Methodenfilter und Zugriff auf die Header, die Cookies und den Body:
with FRouter.Routes.Add do
begin
Path := '/customers/{id}/edit';
Methods := [hrmGet, hrmPost];
RequireLogin := True;
RequireRoles := 'admin,sales';
end;
Seiten, die Sie testen können. DispatchDirect beantwortet eine Anfrage, ohne dass ein Socket dahintersteckt, und eine neue Unit liest das erzeugte HTML, findet Elemente über id, Klasse, Tag oder Attribut und vergleicht eine Seite mit einer gespeicherten Kopie, sodass eine ungewollte Änderung im Markup von einem Test bemerkt wird und nicht von einem Kunden.
Navigation, die sich wie eine Anwendung anfühlt. Seiten wechseln ohne vollständigen Neuladevorgang und behalten die Scrollposition und das, was der Benutzer gerade eingegeben hat, mit einem Ladebalken, einem Dialog, wenn die Verbindung abbricht, und einer Meldung, wenn eine Anfrage fehlschlägt. All das standardmäßig deaktiviert.
Eine auf einem Formular entworfene Seite, ganz ohne Code. Platzieren Sie ein TsgcWebSocketHTTPServer, ein TsgcHTMLDesignServer, ein TsgcHTMLDesignSurface und einige sgcHTML-Komponenten auf einem VCL-Formular, und WSServer.Active := True ist die einzige Zeile, die Sie schreiben müssen. Der Design-Server erzeugt die Seite aus dem Formular und liefert Bootstrap, htmx und Chart.js aus der ausführbaren Datei aus. Surface-Aktionen führen Delphi-Code aus, wenn der Benutzer klickt oder ein Formular absendet: Setzen Sie Source und Target im Object Inspector, doppelklicken Sie auf OnExecute, und das Ziel wird an Ort und Stelle aktualisiert, ohne die Seite neu zu laden. Sechs QuickStart-Demos in Demos\60.HTML\00.QuickStart vermitteln es Schritt für Schritt, der Getting-Started-Leitfaden (PDF, Englisch) erklärt sie, und der sgcHTML-Schnellstart zeigt den 5-Minuten-Weg.
Die vier zentralen Funktionen
Jede davon hat einen eigenen Artikel, der am Ende verlinkt ist, deshalb hier nur, was sie ist:
- MCP Apps. Ein MCP-Tool, das mit einer Seite statt mit einem Absatz antwortet, gerendert in ChatGPT, Claude oder VS Code, aufgebaut aus denselben Komponenten wie jede andere sgcHTML-Seite.
- Der KI-Seitengenerator. Beschreiben Sie eine Seite, oder geben Sie dem Designer einen Screenshot, und er baut sie aus Ihren registrierten Komponenten als Kandidaten, den Sie annehmen oder verwerfen.
- Die CRUD-Komponente. Liste, Suche, Paging, Formular, Löschen und der Schreibpfad eines Datasets, über ein TDataSet oder über Ihr eigenes SQL, mit einem IDE-Assistenten und einem Kommandozeilen-Generator.
- Das AI Data Pack. Stellen Sie einem Grid, einer Data Table oder einer Pivot-Tabelle eine Frage in einfacher Sprache, mit einem regelbasierten Parser, der auch dann antwortet, wenn überhaupt kein API-Schlüssel vorhanden ist.
Push, auf zwei Wegen
Server sent events können jetzt die Aktualisierungen übertragen statt eines WebSocket, mit erneuter Zustellung dessen, was während der Trennung verpasst wurde, und das funktioniert mit dem einfachen HTTP-Server. Web Push erreicht einen Browser, der geschlossen ist. Ein Benachrichtigungs-Posteingang und eine Einstellungstabelle kommen dazu, und die Benachrichtigungskomponente entscheidet, welchen Kanal ein bestimmter Benutzer bekommt.
Ein EventSource-Client für Delphi
Der neue TsgcSSEClient konsumiert jeden Server-Sent-Events-Stream und ist in jeder Edition enthalten. Er verbindet sich von selbst neu und sendet Last-Event-ID, sodass der Server dort fortsetzt, wo der Stream gestoppt hat. Das vom Server gesendete retry:-Feld wird berücksichtigt, OnEvent liefert Ihnen den Event-Typ, die Daten und die ID, und ReconnectOptions fügt Backoff und Jitter hinzu. TLS, Proxy und Authentifizierung werden in OnBeforeConnect festgelegt, das Ihnen den von der Komponente verwendeten HTTP-Client übergibt.
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;
Der Parser dahinter, TsgcSSEParser, ist öffentlich zugänglich. Füttern Sie ihn mit den Bytes eines beliebigen text/event-stream in Chunks beliebiger Größe, genau das, was eine LLM-Streaming-Antwort oder eine MCP-Streamable-HTTP-Antwort ist.
FParser := TsgcSSEParser.Create;
FParser.OnEvent := DoSSEEvent;
FParser.Feed('event: delta' + #10 + 'data: {"text":"Hel"}' + #10#10);
Eine neue Demo, Demos\20.HTTP_Protocol\17.SSE_Client_Component, zeigt ihn von Anfang bis Ende.
KI: Antworten, auf die man handeln kann
TsgcAIChat kann jetzt über die neue Methode ChatJSON nach JSON fragen, das einem von Ihnen vorgegebenen Schema folgt, bei OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok und Mistral; die Methode wertet die Antwort aus und fragt bei einem Parsing-Fehler noch einmal nach, diesmal mit dem Fehler im Anhang. Die Chat-Komponente sendet und empfängt jetzt auch Bilder, und BaseUrl wird jetzt von jedem Anbieter berücksichtigt und nicht mehr nur von Ollama, sodass sich jeder von ihnen auf einen Proxy oder ein lokales Gateway richten lässt.
Dokumentenextraktion: Von PDF zu validiertem JSON
Der neue TsgcAIDocumentExtractor nimmt ein PDF oder ein Bild sowie ein JSON-Schema entgegen und liefert JSON zurück, das gegen dieses Schema geprüft wurde. OpenAI, Anthropic und Gemini lesen das PDF direkt, die anderen Vision-Modelle lesen Bilder. Die integrierten Voreinstellungen decken Rechnungen, Quittungen und Ausweisdokumente ab (dpInvoice, dpReceipt, dpIDCard), und jedes Feld erhält eine Konfidenz, sodass OnLowConfidence Ihnen mitteilt, welche Werte unterhalb von MinConfidence eine zweite Prüfung verdienen. Validiert die Antwort nicht, fragt die Komponente noch einmal nach, diesmal mit den Fehlern im Anhang (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');
Verbinden Sie eine TsgcAIOCRTesseract, oder eine TsgcAIOCRWindows, die die in Windows 10 und höher eingebaute OCR ohne Installation nutzt, und setzen Sie OCRMode auf domFallback oder domAlways, dann wird der Text zuerst lokal erkannt, sodass sogar ein reines Textmodell unter Ollama die Extraktion durchführen kann. Für eigene Prompts erhält TsgcAIChat die neuen Methoden ChatWithDocument, ChatWithDocumentBase64, ChatWithAttachments und ChatJSONWithAttachments, die eine oder mehrere Dateien, gehalten in einer TsgcAIChatAttachments-Liste, mit der Nachricht senden.
Ein Sprachagent, der zuhört, antwortet und Tools aufruft
Der neue TsgcAIVoiceAgent ist eine einzige Komponente, die zuhört, erkennt, wann der Nutzer seinen Redebeitrag beendet hat, mit ihrer eigenen Stimme antwortet und Ihre Tools aufruft, über OpenAI Realtime oder Gemini Live. Sie spricht WebSocket oder WebRTC mit OpenAI und läuft unter Windows, Android und iOS. Redebeiträge werden per Server-VAD, semantischem VAD, einem clientseitigen VAD oder von Hand erkannt (vtdServerVAD, vtdSemanticVAD, vtdClientVAD, vtdManual). Mit BargeIn kann der Nutzer unterbrechen, und der Agent hört auf zu sprechen und kürzt seine Antwort an der Stelle, an der sie abgeschnitten wurde. OnTranscript liefert Live-Transkripte sowohl des Nutzers als auch des Agenten.
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;
Tools stammen aus OnToolCall, und wenn ein TsgcWSAPI_Client_MCP an MCPClient zugewiesen wird, werden die Tools dieses MCP-Servers dem Modell automatisch angeboten. Für Telefonie wechselt Audio.Format zu G.711 mu-law oder A-law bei 8 kHz (vafG711ULaw, vafG711ALaw). Der Sprachagent ist für Delphi 7 bis Delphi 13 und für .NET verfügbar, und eine neue Demo macht daraus einen sprachgesteuerten Shop-Assistenten über ein TDataSet.
MCP: die Spezifikation 2026-07-28
Der MCP-Server und der MCP-Client sprechen jetzt die Revision 2026-07-28 des Model Context Protocol. Derselbe Server bedient die neuen zustandslosen Clients und die bestehenden 2025-11-25-Clients wie VS Code und Claude, sodass sich für Ihre vorhandenen Clients nichts ändert. Auf der Client-Seite versucht MCPOptions.ProtocolEra mit dem Wert Auto zuerst das neue Protokoll, fällt zurück, wenn der Server es nicht unterstützt, und merkt sich die Antwort pro Server.
- Discovery und Header.
server/discover, die Protokollversion und die Client-Angaben, die mit jeder Anfrage gesendet werden, die vom Server geprüften Request-HeaderMcp-MethodundMcp-Name, Cache-Hinweise bei Listenergebnissen und die neuen Fehlercodes. Mitx-mcp-headermarkierte Tool-Parameter werden als Request-Header übertragen. - Ein Stream für jede Änderung. Mit
subscriptions/listenöffnet ein Client einen langlebigen Stream und erhält Änderungen der Listen von Tools, Prompts und Ressourcen sowie Ressourcenaktualisierungen. Die Methoden zum Senden von Benachrichtigungen, die Sie bereits aufrufen, erreichen diese Clients ebenfalls. - Anfragen mit mehreren Runden. Ein Tool, ein Prompt oder eine Ressource kann vom Client eine Eingabe anfordern, ein Formular, eine Webseite, eine KI-Antwort oder die Client-Roots, und macht weiter, wenn der Client erneut mit den Antworten aufruft. Der zwischen den Aufrufen gehaltene Zustand ist signiert und läuft ab (
MCPOptions.MRTR). Auf der Client-Seite beantwortetOnMCPInputRequireddiese Anfragen, und die vorhandenen Handler für Roots, Sampling und Elicitation antworten von selbst. - Tasks. Ein lang laufendes Tool liefert einen Task zurück, den der Client bis zum Ende verfolgt, bei Bedarf mit Eingaben beantwortet und abbrechen kann. Auf dem Server ist das
MCPOptions.TasksmitCreateTask, auf dem ClientOnMCPTaskCreated,OnMCPTaskStatusundOnMCPTaskCompleted. - Client-Autorisierung. Ist
MCPOptions.Authorizationaktiviert, ist ein 401 nicht mehr das Ende: Der Client findet den Autorisierungsserver selbst, registriert sich mit einem Client-ID-Metadatendokument oder per dynamischer Registrierung, meldet sich mit PKCE an, prüft den Issuer und erneuert das Token, wenn es abläuft.
Kryptografie: postquantensicher, in Object Pascal
ML-KEM (FIPS 203), ML-DSA (FIPS 204) und SLH-DSA (FIPS 205), hybride Schlüsseleinkapselung mit X-Wing, postquantensichere X.509-Zertifikate und Zertifizierungsstellen sowie mit ML-DSA signierte JWTs. All das in Object Pascal geschrieben, im sgcCrypto-Paket, ohne externe Bibliothek, geprüft gegen die bekannten NIST-Testvektoren.
Darauf setzt eine native TLS-1.3- und TLS-1.2-Engine auf, ebenfalls in reinem Pascal: ein Client oder ein Server spricht TLS ohne OpenSSL und ohne SChannel, handelt dabei die hybriden postquantensicheren Gruppen aus RFC 10024 aus, mit ALPN, S N I, Client-Zertifikaten und optionaler Nutzung des Vertrauensspeichers des Betriebssystems. TLS 1.2 ist für Peers da, die noch kein TLS 1.3 können, standardmäßig mit Forward-Secrecy-Suiten aus AES-GCM und ChaCha20-Poly1305, Extended Master Secret und Downgrade-Schutz, und TLSOptions.Version legt die niedrigste zulässige Version fest. Die Hybridgruppen bleiben TLS 1.3 vorbehalten.
Die klassische Seite wurde im selben Zug gehärtet: geblindetes RSA in konstanter Zeit, Skalarmultiplikation auf elliptischen Kurven in konstanter Zeit und Ed25519, tabellenfreies AES und GHASH, importierte private Schlüssel, die gegen ihre öffentliche Hälfte geprüft werden, und nicht minimale DER-Signaturen, die zurückgewiesen werden.
TLS auf dem Server, ganz nach Ihren Wünschen
Klartext und TLS auf demselben Port. Mit SSLOptions.AllowPlainText akzeptiert ein TLS-Server auf demselben Port auch unverschlüsselte HTTP- und WebSocket-Verbindungen und unterscheidet sie am ersten Byte, das der Client sendet. SSLOptions.PlainTextPolicy bedient sie, leitet sie mit einem 308 auf https um oder weist sie mit einem 400 ab, und Server.IsTLS(AContext) sagt Ihnen in OnCommandGet, über welchen Transport eine Anfrage kam. Das funktioniert mit den IOHandlern Default, IOCP und EPOLL.
HSTS für ein A+. SecurityOptions.HSTS_Options fügt jeder über TLS gesendeten Antwort den Header Strict-Transport-Security hinzu, was SSL Labs für die Note A+ verlangt. Er wird nie über unverschlüsseltes HTTP gesendet und nicht doppelt hinzugefügt, wenn Ihr Code ihn bereits setzt.
Ihre eigene TLS-Bibliothek. Die IOCP- und EPOLL-Server sind nicht mehr an OpenSSL gebunden. Schreiben Sie einen TLS-Provider für Ihre Bibliothek, zum Beispiel SecureBlackbox, und die ereignisgesteuerte Engine steuert ihn genauso wie die integrierte.
Authentifizierung: die Anmeldung, nach der alle fragen
Eine neue Reihe von Authentifizierungskomponenten beantwortet die Fragen, die jeder Kunde zum Anmeldebildschirm stellt. Sie sind in den Editionen Enterprise und All-Access und im sgcAuth-Paket enthalten, und dieselben Komponenten gehören zu sgcWebSockets .NET.
- Passkeys. Der WebAuthn-Server meldet einen Benutzer an, ohne dass ein Benutzername getippt wird, bietet die Passkeys in der Autofill-Liste des Browsers an, verwaltet mehrere Passkeys pro Benutzer, unterscheidet einen synchronisierten Passkey von einem gerätegebundenen und löst ein Ereignis aus, damit die Anmeldedaten in Ihrer eigenen Datenbank liegen.
- SAML Single Sign-On.
TsgcSAMLServiceProvidermacht Ihre Anwendung zu einem SAML-2.0-Service-Provider für Entra ID, Okta, AD FS, Google Workspace, Keycloak oder jeden anderen Identitätsanbieter. - Active Directory und LDAP.
TsgcLDAPClientmeldet Benutzer mit ihrem Verzeichniskennwort über LDAPS oder StartTLS an und liest ihre Gruppenmitgliedschaft, verschachtelte Gruppen eingeschlossen. - Codes aus einer Authenticator-App.
TsgcTOTPAuthenticatorerzeugt und prüft die Codes von Google Authenticator, Microsoft Authenticator und ähnlichen Apps, mit dem Registrierungslink für den QR-Code, Schutz vor Wiederverwendung und Wiederherstellungscodes. - OpenID Connect.
TsgcHTTP_OIDC_Clientmeldet Benutzer über das Discovery-Dokument bei jedem OpenID-Anbieter an und prüft die ID-Token sowie die Bearer-Token, die Ihre eigene API erreichen. - E-Mail ohne gespeichertes Kennwort.
TsgcMailOAuth2holt und erneuert die OAuth2-Token von Microsoft 365 und Gmail, die SMTP, IMAP und POP3 heute erwarten.
Kleinigkeiten, die sich summieren
- Seiten von rechts nach links. sgcHTML-Seiten wechseln für Arabisch, Hebräisch, Persisch, Urdu und die anderen Sprachen mit Schreibrichtung von rechts nach links von selbst auf ein entsprechendes Layout, laden das nun in der Bibliothek enthaltene Bootstrap-Stylesheet für diese Schreibrichtung und spiegeln die Komponenten von der Seitenleiste bis zum Grid.
HtmlDirundDirerzwingen eine Richtung, wenn Sie eine brauchen. Neue Demo 22.RTL. - Geolokalisierung.
TsgcHTMLComponent_Geolocationliest die GPS-Position des Browsers einmalig oder fortlaufend und sendet Breitengrad, Längengrad, Genauigkeit, Höhe, Richtung und Geschwindigkeit an den Server. - Ein Grid, das auf dem Server sortiert und filtert.
SortMode := gsmServerundServerFiltersenden die Sortierung und ein Filterfeld pro Spalte über htmx, mit einem Text- oder Bereichsfilter pro Spalte (gfkText,gfkRange). Pagination und AutoComplete erhielten denselben htmx-Weg über einfaches HTTP. - Kamerascanner auf dem iPhone.
PolyfillURLlädt einen Barcode-Decoder in Browsern, die keinen eingebauten haben, undRedirectURLöffnet eine Seite mit dem gescannten Code. - Lazarus. Die sgcHTML-Laufzeitdemos sind jetzt für Lazarus und Free Pascal verfügbar, und das Lazarus-Paket enthält die Units für CRUD und MCP Apps.
- Warum wurde ich abgewiesen? Wenn ein Server eine WebSocket-Verbindung ablehnt, zum Beispiel mit einem 401, weil das Token abgelaufen ist, steht der Body seiner Antwort in
OnExceptionüberTsgcWSConnectionClient(Connection).HandshakeResponseBodyzur Verfügung. - Ihre eigenen Daten im Verbindungs-Thread.
QueueOptions.DrainedMode := qdmEveryPasslöstOnQueueDrainedbei jedem Durchlauf der Verbindungsschleife aus, im eigenen Thread der Verbindung, sodass die Anwendung von dort ihre ausstehenden Daten senden kann. - Keep-alive bei WinHTTP. Der WinHTTP-WebSocket-Client erhält
OnBeforeHeartBeat, um in jedem HeartBeat-Intervall eine eigene Keep-alive-Nachricht zu senden. - AI Chat. Mit
ImageOutputantwortet Gemini mit Bildern und bearbeitet sie Nachricht für Nachricht weiter, die OpenAI-Anfrage zur Bildbearbeitung akzeptiert die Optionen von gpt-image-1 und mehrere Eingabebilder, undTLSOptionswählt die OpenSSL-Version für die Anfragen des Providers. - OpenAPI-Client.
TsgcOpenAPI_Client.UserAgentsetzt den User-Agent-Header jeder Anfrage oder lässt ihn weg, wenn er leer ist.
Korrekturen, die eine Erwähnung wert sind
- Die Signierung und Validierung von JWT mit RSA- und ECDSA-Schlüsseln sowie eine Speicherbeschädigung in 32-Bit-Anwendungen, wenn OpenSSL statisch eingebunden ist.
- Der SChannel-Handler hinterließ bei jeder Verbindung mit einer PFX-Datei eine Kopie des privaten Schlüssels im Windows-Zertifikatspeicher und sendete auf aktuellen Windows-Versionen kein Client-Zertifikat.
- Gleichzeitige SChannel-Verbindungen mit einem Zertifikat aus dem Windows-Speicher scheiterten am Handshake.
- Der OAuth2-Server wies DPoP-Proofs zurück, die mit RSA-Schlüsseln signiert waren.
- Signierte CloudFront-URLs, deren Signatur nicht URL-sicher kodiert war.
.NET
Die .NET-Bibliothek hält Schritt: Auth und Sessions mit einer ClaimsPrincipal-Brücke für ASP.NET Core, der Router, die Test-Hilfsmittel, die SPA-Navigation, der SSE-Transport mit einem nativen Endpunkt, strukturierte Ausgabe, die Dokumentenextraktion mit beiden OCR-Engines, der Echtzeit-Sprachagent, das AI Data Pack, Web Push, MCP Apps, die CRUD-Komponente mit ihren Adaptern und der neue TsgcSSEClient, alles mit denselben API-Namen wie in Delphi.
Razor Tag Helpers für ASP.NET Core. sgcHTML passt jetzt so in eine MVC- oder Razor-Pages-Anwendung wie Telerik UI und DevExpress. Tag Helper wie <sgc-grid>, <sgc-form>, <sgc-autocomplete>, <sgc-dialog> und <sgc-chart> sowie ihre fluenten Gegenstücke unter Html.Sgc() rendern Bootstrap 5 auf dem Server und sprechen über htmx mit deinen Controllern, ohne JavaScript-Framework. Das Grid paginiert, sortiert, filtert, durchsucht und exportiert nach XLSX und PDF über ein IQueryable, sodass EF Core alles als SQL ausführt:
<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());
Eingaben werden mit asp-for gebunden und zeigen die ModelState-Fehler an, und this.SgcCloseDialog("edit-order", refresh: "orders") schließt einen Bearbeitungsdialog und lädt das Grid neu. Was die anderen nicht haben, ist Server-Push: Ein Diagramm mit live="true" wird in jedem geöffneten Browser neu gezeichnet, wenn ein Hintergrunddienst hub.BroadcastChartAsync(...) aufruft, über den sgcHTML-WebSocket und ohne SignalR-Code. Es steckt im NuGet-Paket esegece.sgcHTML.AspNetCore, inklusive Community-Edition, und die Demo 22.RazorMvc ist das bekannte Bestellungsbeispiel, damit neu aufgebaut.
Aktualisierung
Alles Neue ist additiv und standardmäßig deaktiviert. Legen Sie die neuen Units hinzu, bauen Sie Ihre Pakete neu, und eine bestehende Anwendung verhält sich exakt wie zuvor.
Die ausführlichen Versionen
- Führen Sie Ihre Delphi-Anwendung in ChatGPT und Claude aus
- Verwandeln Sie einen Screenshot in eine Delphi-Webseite
- Delphi TLS 1.3 ohne OpenSSL-DLLs
- Eine Delphi-Web-CRUD-Seite in fünf Minuten
- Stellen Sie Ihrem Delphi-Grid eine Frage in einfachem Englisch
- Einen geschlossenen Browser von Delphi aus erreichen
- Delphi-Login mit Passkeys, SAML SSO, LDAP und TOTP 2FA
- SAML Single Sign-On in Delphi mit Entra ID, Okta und AD FS
- Passkeys in Delphi: passwortlose Anmeldung mit WebAuthn
Video ansehen
Dazu gibt es ein kurzes Video auf dem eSeGeCe-Kanal.
Fragen, Feedback oder Hilfe bei der Migration? Kontaktieren Sie uns — Sie erhalten eine Antwort von den Leuten, die den Code geschrieben haben.
