Alcinoe Component Library av Zeus64 är en öppen källa för visuella och icke-visuella komponentbibliotek för Delphi.
Fullständig OpenGL-videospelare, WebRTC Delphi-omslag, inbyggt ios/android TEdit, Förbättrade firemonkey-kontroller, Firebase-molnmeddelanden, Android/ios Facebook SDK-inloggning, Json/Bson Parser, ImageMagick-wrapper, MongoDB-klient.
Alcinoe är kompatibel med Delphi Rio 10.3.3 och Delphi Sydney 10.4.2
https://github.com/Zeus64/alcinoe
Med Delphi Alexandria 11.1 som stöder MOD-nedladdning (borttagen):
Alcinoe är nu helt kompatibel med Delphi Aten 12.3.
Installera Alcinoe
Om du inte planerar att använda några Alcinoe visuella komponenter vid designtillfället behöver du inte installera någonting, lägg bara till {alcinoe_rootdir}\source i sökvägen för ditt projekt.
Om du planerar att använda visuella komponenter vid designtillfället måste du installera BPL. Starta Delphi och gå in i komponent > Installera paket... > och välj BPL som finns i {alcinoe_rootdir}\lib\bpl\alcinoe\Win32\sydney\Alcinoe_sydney.bpl (om du är i delphi Sydney, välj annars katalogen som motsvarar din Delphi-version). Du måste fortfarande lägga till i sökvägen {alcinoe_rootdir}\source
Alcinoe förbättrar också lite de ursprungliga Delphi-källkoderna. På detta sätt måste du gå in i {alcinoe_rootdir}\embarcadero\sydney\10_4_2 och köra update.bat för att hämta och korrigera den ursprungliga Delphi-källkoden. Batchfilen förutsätter att den ursprungliga källkoden finns i "c:\Program Files (x86)\Embarcadero\Studio\21.0\source" och att du har GIT i din väg. Efter att partiet har kopierats och lappats måste Delphi-källkoden inkludera denna källkod i din projektsökväg.
För att avsluta fler och fler bibliotek, använd Java 1.8-funktioner (som webRTC, exoplayer, etc.). På detta sätt måste vi göra avsockring (Desugaring låter dig använda dessa funktioner på äldre enheter genom att ersätta nya bytekoder och språk-API:er med äldre under byggprocessen). Med d8.bat (ersättning av dx.bat) är desugaring aktiverad som standard. Så du kan nu använda de flesta av de senaste språkändringarna samtidigt som du riktar in dig på äldre enheter. I väntan på Embarcadero-byte till D8.bat måste vi göra DX.bat till en "proxy" till D8.bat. För detta är det bara att byta ut din ursprungliga DX.bat (min finns i c:\SDKs\android\build-tools\30.0.3\d8.bat) med den som finns i {alcinoe_rootdir}\tools\D8Proxy\dx.bat. mer information här: https://quality.embarcadero.com/browse/RSP-24155
Fullständig OpenGL-videospelare för FireMonkey
ALVideoPlayer renderar en video till en TEXTURE. Detta är verkligen viktigt eftersom du helt kan integrera videon i Delphi-formuläret och du kan placera vilka kontroller du vill på toppen av den eftersom den stöder Z-ORDER. Officiell Delphi-videospelare är bara ett inbyggt videospelarfönster överst i formuläret och stöder därför inte Z-ORDER.
Under android använder jag ExoPlayer. ExoPlayer stöder funktioner som dynamisk adaptiv streaming över HTTP (DASH), HLS, SmoothStreaming och Common Encryption, som inte stöds av MediaPlayer. Den är designad för att vara lätt att anpassa och utöka. Under iOS använder jag AVPlayer med stöd även HLS som ExoPlayer gör
videospelare för FireMonkey videospelare för FireMonkey videospelare för FireMonkey
WebRTC Delphi-omslag
WebRTC (Web Real-Time Communications) är en teknik som gör det möjligt för webbapplikationer och webbplatser att fånga och valfritt strömma ljud- och/eller videomedia, samt att utbyta godtycklig data mellan webbläsare och mobilapplikationer utan att behöva en mellanhand. Uppsättningen standarder som omfattar WebRTC gör det möjligt att dela data och utföra telekonferenser peer-to-peer, utan att användaren kräver att användaren installerar plug-ins eller någon annan programvara från tredje part.
TALWebRTC-komponenten gör det enkelt att lägga till video- och ljudchatt i dina applikationer, vilket öppnar upp en helt ny värld av interaktivitet
Delphi WebRTC-omslag
Firemonkey inbyggt iOS/Android TEdit och TMemo
Andan är att blanda FireMonkey-kontroll med inbyggd plattformskontroll när funktionaliteten på en sådan kontroll börjar bli mycket svår att implementera (som webbläsare, redigera, memo, datepicker, etc.). Men det är inte att göra flera distinkta former för flera plattformar som att erbjuda till exempel http://www.turbococoa.com/ (men det här alternativet är också ett bra alternativ på något sätt, det är upp till dig att bestämma)
I Delphi (berlin) finns det redan IOS-plattformskontroll som var ganska väl implementerad men nära ingen android-plattformskontroll och så jag börjar bygga inbyggda android/iOS-kontroller som TEdit/TMemo. Dessa kontroller fungerar mest som vissa fönster som är placerade på toppen av formuläret (så naturligtvis ingen z-order med FireMonkey-kontroll)
Ritning Ritning
Ritning
Snabb/dubbelbuffrad FireMonkey-kontroller med inbyggt drag
Rektangel
Cirkel
Text (Kan även rita html-text på iOS/android/win/macOS)
Glyph
osv.
TALRektangel
TALRektangel
Faktum
Målning av FireMonkey-kontroller kan ibland vara långsam, eller säg annorlunda, inte tillräckligt snabbt för en flytande rullning. Om du till exempel bara ser den grundläggande TRrektangeln med runda hörn, kan målningsproceduren ta cirka 3ms! Så om du har cirka 20 synliga TRectangles på din skärm, så kommer det att kosta dig cirka 60ms att måla om hela skärmen (och normalt har du inte bara TRectangle, du har också TLabel, TCheckbox, etc..). När det bara är matematik, ta 100 ms för att måla om skärmen, så du kan bara göra cirka 10 bilder per sekund (i verkligheten kommer du att ha mycket mindre jämn) så att rullningen inte kan vara flytande 🙁
Lösningen
Jag ville inte bygga om FireMonkey-kontrollerna, det är ett för stort jobb för mig, och istället försöker jag hitta en mellanlösning. Det här hittar jag genom att lägga till "dubbelbuffrad" egenskap till FireMonkey-kontrollerna. Så istället för att måla om och måla om (och måla om) kontrollerna för varje enskild pixelrörelse i scrollboxen, målar jag först kontrollen på en "buffert" som jag lagrar direkt i GPU-minnet (genom TTexture), och när systemet ber mig att måla om kontrollerna istället för att åter anropa färgalgoritmen ritar jag helt enkelt om bufferttexturen.
Resultaten
Som jag sa innan det tog 3ms bara att måla en enkel TREktangel med runda hörn. Med min dubbelbuffrade egenskap tar det nu cirka 0,1 ms! Så nu ser rullen mycket mer flytande ut!
OpenGL draw => Ersatt av native iOS/android draw
De flesta av grundformen (som TRectangle, TCircle, etc.) använder openGL för att rita. det är inte särskilt effektivt, till exempel för att rita en cirkel under openGL kommer du faktiskt att rita 50 trianglar. Detta resulterar ofta i dålig kvalitet : https://quality.embarcadero.com/browse/RSP-15206 För roundrect är det ännu värre eftersom du först måste beräkna banan och sedan rita den (mycket långsammare än TCircle)
Ett annat problem är att alla dessa drag beror på Form.quality. om du ställer in form.quality till hög kvalitet kommer allt du gör på duken att vara multisample som att rita en bild till exempel och det kan vara problematiskt eftersom bilden kommer att kantutjämnas. om du ställer in form.quality till highperformance blir dragningen väldigt grov (ingen kantutjämning).
För att lösa detta bygger jag bufferten för min kontroll med NATIVE ANDROID/IOS API. På så sätt kommer vi att få en dragning av hög kvalitet även i hög hastighet utan att vara beroende av form.kvalitet
TALCirkel
Förbättrade FireMonkey-kontroller
ScrollBox
TabControl
RangeTrackBar
RangeTrackBar
videospelare för FireMonkey videospelare för FireMonkey videospelare för FireMonkey
Konfetti fallande animation
ALConfetti är ett vanilj Delphi-bibliotek för att skapa en konfigurerbar, högpresterande konfetti-fallande animation.
konfetti
Firebase molnmeddelanden
En plattformsoberoende metod för att använda Firebase Cloud Messaging (FCM) för att ta emot push-meddelanden Med FCM kan du meddela en klientapp att ny e-post eller annan data är tillgänglig att synkronisera. Du kan skicka aviseringsmeddelanden för att få användarna att engagera sig och behålla dem igen. För användningsfall som snabbmeddelanden kan ett meddelande överföra en nyttolast på upp till 4KB till en klientapp.
Android/iOS VKontakte/Facebook SDK-inloggning
VKontakte/Facebook SDK för Android gör det möjligt för människor att logga in på din app med VKontakte/Facebook Login. När människor loggar in på din app med VKontakte/Facebook kan de ge behörigheter till din app så att du kan hämta information eller utföra åtgärder på VKontakte/Facebook för deras räkning.
Fotoredigeringsfilter för Android/iOS
Med TALColorAdjustEffect, ursnygga fotofilter med entrycks automatisk förbättring, gör dina bilder vackra och uttrycksfulla på bara några minuter!
videospelare för FireMonkey videospelare för FireMonkey
Json Parser
TALJsonDocument är en Delphi-parser/skrivare för JSON/BSON-dataformat. det stöder DOM och SAX-parser (Observera att ett bättre namn kan vara SAJ för Simple API för JSON istället för SAX för Simple API för XML, men eftersom begreppet SAX är välkänt behåller jag detta namn), stöder BSON-format och använder en liknande syntax än TALXMLDocument / TXMLDocument. TALJsonDocument kan också exportera Json / Bson-data i TALStringList.
När det handlar om att analysera visst (textuellt) innehåll, tänker man sig vanligtvis två riktningar. I JSON-världen måste du vanligtvis göra ett val mellan:
En DOM-parser, som skapar en trädstruktur i minnet av objekt som kartlägger JSON-innehållet;
En SAX-parser, som läser JSON-innehållet, anropar sedan fördefinierade händelser för varje JSON-innehållselement.
Faktum är att DOM-parsers internt använder en SAX-parser för att läsa JSON-innehållet. Därför är DOM-parsrar typiskt tre till fem gånger långsammare än SAX (och använder mycket mycket mer minne för att lagra alla noder), med överkostnaderna för att skapa objekt och deras egenskapsinitiering. Men DOM-parsers är mycket kraftfullare för att hantera data: så fort den är mappad i inbyggda objekt kan kod komma åt utan tid till någon given nod, medan en SAX-baserad åtkomst måste läsa hela JSON-innehållet igen.
De flesta JSON-parser som finns tillgängliga i Delphi använder en DOM-liknande metod. Till exempel skapar DBXJSON-enheten som ingår sedan Delphi 2010 eller SuperObject-biblioteket en klassinstans som mappar varje JSON-nod. För att uppnå bästa hastighet implementerar TALJsonDocument DOM-parser och även en SAX-parser.
TALJsonDocument kan också stödja kommentarer i JSON-källan som är en förlängning av JSON-specifikationerna
TALJsonDocument-syntax är mycket lik TALXMLdocument / TXMLDocument
TALJsonDocument finns i 2 varianter: TALJsonDocument som är gjort på toppen av ansiString (alltså UTF-8) och TALJsonDocumentU som är gjort på toppen av unicode-strängen (alltså UTF-16)
Exempel:
{
_id: 1, // kommentarer
namn: { first: "John", sist: "Backus" },
födelse: nytt datum(‘1999-10-21T21:04:54.234Z’),
bidrag: [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
utmärkelser: [
{ utmärkelse: "National Medal of Science",
år: 1975,
av: "National Science Foundation" },
{ award: "Turing Award",
år: 1977,
av: "ACM" }
],
make: "",
adress: {},
telefoner: []
}
För att komma åt dokumentnoderna:
MyJsonDoc.loadFromJson(AJsonStr, False);
MyJsonDoc.ParseOptions := [poAllowComments]; // för att tillåta kommentarer i JSON-källan
MyJsonDoc.childnodes[‘_id’].int32;
MyJsonDoc.childnodes['namn'].childnodes['first'].text;
MyJsonDoc.childnodes['namn'].childnodes['last'].text;
MyJsonDoc.childnodes['födelse'].datetime;
för i := 0 till MyJsonDoc.childnodes[‘contribs’].ChildNodes.count – 1 do
MyJsonDoc.childnodes['bidrag'].childnodes[i].text;
för i := 0 till MyJsonDoc.childnodes[‘awards’].ChildNodes.count – 1 börjar
MyJsonDoc.childnodes['awards'].childnodes[i].childnodes['award'].text;
MyJsonDoc.childnodes['awards'].childnodes[i].childnodes['år'].text;
MyJsonDoc.childnodes['awards'].childnodes[i].childnodes['by'].text;
slut;
Eller om du inte är säker på existensen av noderna tidigare för att komma åt dem eller om du inte vill kontrollera det kan du också göra:
MyJsonDoc.GetChildNodeValueInt32(‘_id’, 0{default if node not exists});
MyJsonDoc.GetChildNodeValueText(['namn','första'], ”{standard om noden inte finns});
MyJsonDoc.GetChildNodeValueDateTime(‘födelse’, nu{standard om noden inte finns});
Så här skapar du dokumentnoderna:
MyJsonDoc.addchild(‘_id’).int32 := 1;
med MyJsonDoc.addchild('namn', ntObject) börjar
addchild(‘först’).text := ‘John’;
addchild('last').text := 'Backus';
slut;
MyJsonDoc.addchild(‘födelse’).dateTime := Nu;
med MyJsonDoc.addchild('contribs', ntArray) börjar
addchild.text := ‘Fortran’;
addchild.text := 'ALGOL';
addchild.text := ‘Backus-Naur Form’;
addchild.text := 'FP';
slut;
med MyJsonDoc.addchild('awards', ntArray) börjar
med addchild(ntObject) börjar
addchild(‘award’).text := ‘National Medal of Science’;
addchild(‘år’).int32 := 1975;
addchild('by').text := 'National Science Foundation';
slut;
med addchild(ntObject) börjar
addchild(‘award’).text := ‘Turing Award’;
addchild(‘år’).int32 := 1977;
addchild('by').text := 'ACM';
slut;
slut;
MyJsonDoc.addchild('make');
MyJsonDoc.addchild('adress', ntObject);
MyJsonDoc.addchild('telefoner', ntArray);
Du kan också skapa/uppdatera noder så här:
MyJsonDoc.SetChildNodeValueInt32(‘_id’, 0);
MyJsonDoc.SetChildNodeValueText(['namn','först'], 'John');
MyJsonDoc.SetChildNodeValueDateTime(‘födelse’, nu);
För att ladda och spara från BSON:
MyJsonDoc.LoadFromFile(aBSONFileName, False{saxMode}, True{BSON});
MyJsonDoc.SaveToFile(aBSONFileName, False{saxMode}, True{BSON});
Så här tolkar du ett JSON-dokument i Sax-läge:
MyJsonDoc.onParseText := procedur (Avsändare: TObject;
const Sökväg: AnsiString;
const namn: AnsiString;
const Args: array av const;
NodeSubType: TALJSONNodeSubType)
börja
case NodeSubType av
nstFloat: Writeln(Path + ‘=’ + ALFloatToStr(Args[0].VExtended^, ALDefaultFormatSettings));
nstText: Writeln(Path + ‘=’ + ansiString(Args[0].VAnsiString));
nstObjectID: Writeln(Path + ‘=’ + ‘ObjectId(“‘+ALBinToHex(ansiString(Args[0].VAnsiString))+'”)’);
nstBoolean: Writeln(Path + ‘=’ + ALBoolToStr(Args[0].VBoolean,’true’,’false’));
nstDateTime: Writeln(Path + ‘=’ + ALFormatDateTime(”’ISODate(“”åååå”-”mm”-”dd”T”hh”:”nn”:”ss”.”zzz”Z”)”’, Args[0].VExtended^, ALDEfaultFormatSettings));
nstNull: Writeln(Path + '=' + 'null');
nstRegEx: Writeln(Path + ‘=’ + ansiString(Args[0].VAnsiString));
nstBinary: Writeln(Path + ‘=’ + ‘BinData(‘+inttostr(Args[1].VInteger)+’, “‘+ansiString(ALBase64EncodeStringNoCRLF(ansiString(Args[0].VAnsiString)))+'”)’);
nstJavascript: Writeln(Path + ‘=’ + ansiString(Args[0].VAnsiString));
nstInt32: Writeln(Path + ‘=’ + ‘NumberInt(‘+inttostr(Args[0].VInteger)+’)’);
nstTimestamp: Writeln(Path + ‘=’ + ‘Timestamp(‘+inttostr(int64(cardinal(Args[0].VInteger)))+’, ‘+inttostr(int64(cardinal(Args[1].VInteger)))+’)’);
nstInt64: Writeln(Path + ‘=’ + ‘NumberLong(‘+inttostr(Args[0].VInt64^)+’)’);
slut;
slut;
MyJsonDoc.LoadFromJSON(AJsonStr, true{saxMode});
ImageMagick-omslag för Delphi
Använd ImageMagick® för att skapa, redigera, komponera eller konvertera bitmappsbilder. Den kan läsa och skriva bilder i en mängd olika format (över 200) inklusive PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript, PDF och SVG. Använd ImageMagick för att ändra storlek, vända, spegelvända, rotera, förvränga, klippa och transformera bilder, justera bildfärger, tillämpa olika specialeffekter eller rita text, linjer, polygoner, ellipser och Bézier-kurvor.
Exempel:
var aWand: PMagickWand;
börja
//Skapa ImageMagick-biblioteket
alCreateImageMagickLibrary({alcinoe_rootdir} + '\lib\dll\imagemagick\win32\imagemagick', min(2, System.CPUCount){aThreadLimit});
försök
//skapa trollstavspekaren
aWand := ALImageMagickLib.NewMagickWand;
försök
//ladda in bilden
om ALImageMagickLib.MagickReadImage(aWand, pansiChar(aInputFilename)) <> MagickTrue then RaiseLastMagickWandError(aWand);
//Ställ in komprimeringskvaliteten
om ALImageMagickLib.MagickSetImageCompressionQuality(aWand,80) <> MagickTrue then RaiseLastMagickWandError(aWand);
//autorisera bilden
om ALImageMagickLib.MagickAutoOrientImage(aWand) <> MagickTrue sedan RaiseLastMagickWandError(aWand);
//Ändra storlek på bilden med Lanczos-filtret
om ALImageMagickLib.MagickResizeImage(aWand, 640, 480, LanczosFilter) <> MagickTrue then RaiseLastMagickWandError(aWand);
//spara bilden
ALImageMagickLib.MagickWriteImage(aWand, pansiChar(aOutputFilename));
slutligen
ALImageMagickLib.DestroyMagickWand(aWand);
slut;
slutligen
alFreeImageMagickLibrary;
slut;
slut;
MongoDb klient
Delphi Client för MongoDB-databas. En Delphi-drivrutin (med anslutningspool) för att komma åt en mongoDB-server. en anslutningspool är en cache med databasanslutningar som underhålls så att anslutningarna kan återanvändas när framtida förfrågningar till databasen krävs. Vid anslutningspooling, efter att en anslutning skapats, placeras den i poolen och den används om igen så att en ny anslutning inte behöver upprättas. Om alla anslutningar används görs en ny anslutning och läggs till poolen. Anslutningspooling minskar också den tid en användare måste vänta på att upprätta en anslutning till databasen.
Exempel:
aJSONDoc := TALJSONDocument.create;
aMongoDBClient := TAlMongoDBClient.create;
försök
aMongoDBClient.Connect(", 0);
aMongoDBClient.SelectData(‘test.exempel’,
'{fieldA:123}', // frågan
'{fieldA:1, fieldB:1}', // returfältsväljaren
aJSONDoc.node);
aMongoDBClient.disconnect;
för i := 0 till aJSONDoc.node.childnodes.count – 1 do
med aJSONDoc.node.childnodes[i] do
writeln(aJSONDoc.node.childnodes[i].nodename + ‘=’ + aJSONDoc.node.childnodes[i].text)
slutligen
aMongoDBClient.free;
aJSONDoc.free;
slut;
Exempel med anslutningspool:
aMongoDBConnectionPoolClient := TAlMongoDBConnectionPoolClient.create(aDBHost, aDBPort);
försök
::Tråd 1::
aMongoDBConnectionPoolClient.SelectData(‘test.example’,
'{fieldA:123}', // frågan
'{fieldA:1, fieldB:1}', // returfältsväljaren
aLocalVarJSONDOC.node);
::Tråd 2::
aMongoDBConnectionPoolClient.SelectData(‘test.example’,
'{fieldA:999}', // frågan
'{fieldA:1, fieldB:1}', // returfältsväljaren
aLocalVarJSONDOC.node);
slutligen
aMongoDBClient.free;
slut;
Exempel på svansövervakning:
aMongoDBTailMonitoringThread := TAlMongoDBTailMonitoringThread.Create(
aDBHost,
aDBPort,
'test.cappedCollectionExemple'
'{}', // frågan
'{fieldA:1, fieldB:1}', // returfältsväljaren
Procedur (Avsändare: TObject; JSONRowData: TALJSONNode)
börja
writeln(‘Nytt objekt lagt till i cappedCollectionExemple: ‘ + JSONRowData.childnodes[‘fieldA’].text);
slut,
procedur (Avsändare: TObject; Fel: Undantag)
börja
writeln(Error.message);
slut);
….
aMongoDBtailMonitoringThread.free;
WebSocket klient
WebSocket Client för Delphi implementerad på toppen av WinHTTP. WebSocket är ett kommunikationsprotokoll som gör det möjligt att öppna en tvåvägs interaktiv kommunikationssession mellan användarens webbläsare och en server. Med detta kan du skicka meddelanden till en server och ta emot händelsedrivna svar utan att behöva fråga servern för ett svar.
Snabb TStringList
TALStringList Fungerar på samma sätt som Delphi TStringList förutom att det är tillåtet att söka efter ett namn=värde med hjälp av en snabbsorteringsalgoritm när listan är sorterad. TALStringList använder också en lokaloberoende algoritm (baserad på 8-bitars ordningsvärde för varje tecken) istället för AnsiCompareText och AnsiCompareStr som används av Delphi TStringList. i slutet är sorteringen i TALStringList upp till 10 gånger snabbare än i Delphi TStringList. TALStringList är inte heller en Unicode TStringList utan en 100% Ansi StringList
TALNVStringList (NV för NameValue) är samma som TALStringList (använd även en quicksort-algoritm) förutom att här är optimering orienterad för namn/värdelista istället för stränglista.
TALHashedStringList TALHashedStringList är samma som TALStringList förutom att den använder en intern hashtabell istället för en snabbsorteringsalgoritm. Genom att använda TALHashedStringList istället för TALStringList kan du förbättra prestandan när listan innehåller ett stort antal strängar (annars om du listan inte innehåller många strängar är prestandan lägre än TALStringList på grund av kostnaden för att beräkna hashen)
PHP löpare
ALPHPRunnerEngine är en enkel men användbar komponent för att enkelt använda php (valfri version) som ett skriptspråk i Delphi-applikationer. ALPhpRunnerEngine gör det möjligt att exekvera PHP-skripten i Delphi-programmet utan en webbserver. ALPHPRunnerEngine använder CGI/FastCGI-gränssnittet (php-cgi.exe) i PHP för att kommunicera med PHP-motorn.
Memcachad klient
Delphi Client för memcachad databas.
Vad är Memcached? Gratis och öppen källkod, högpresterande, distribuerat minnesobjektcachesystem, generiskt till sin natur, men avsett för användning för att påskynda dynamiska webbapplikationer genom att minska databasbelastningen.
Memcached är ett nyckel-värdelager i minnet för små bitar av godtyckliga data (strängar, objekt) från resultat av databasanrop, API-anrop eller sidrendering.
Memcached är enkelt men ändå kraftfullt. Dess enkla design främjar snabb distribution, enkel utveckling och löser många problem med stora datacchar.
GSM-komponent
TAlGSMComm-komponenten implementerar SMS-textmeddelanden via text-lägesgränssnittet som definieras i GSM Technical Specification 07.05, version 5.1.0, daterad december 1996. Det finns flera varianter av denna specifikation, som används på alla modeller av Nokia, Siemens, Ericsson, etc. Vi har testat Nokia 6230 internt, men modellerna Nokia 7190, 8890, 6210 och 9110 borde fungera också. Telefoner från andra tillverkare kommer också att fungera, så länge de implementerar text-mode-gränssnittet. Ungefär 1/4 av de nuvarande telefonerna kan anslutas till en PC (via IR eller seriell kabel), ungefär 1/3 av dessa är endast textläge, 1/3 är endast PDU-läge, och den andra 1/3 stöder både text- och PDU-läge. Vissa telefoner (som Nokia 5190) stöder SMS, men de använder ett proprietärt protokoll som TALGSMComm inte stöder.
För att testa din telefon, anslut telefonen till din dator via seriekabeln eller IR-enheten (se telefonens dokumentation för information om hur du ansluter). Skriv "AT" i ett terminalfönster för att verifiera att anslutningen är upprättad (du bör få "OK" från telefonen), skriv sedan in "AT+CMGF=?". Svaret ska innehålla en "1", vilket indikerar att det stöder textläge. Om båda dessa tester blir godkända uppfyller din telefon de grundläggande kraven.
SQLite3 klient
Fråga Sqlite3-databas och få resultatet i Xml-format eller i Json/Bson-format.
Och mycket mer
CGI löpare
Http-klient (WinInet/WinHTTP)
MySQL-klient
NNTP-klient
POP3-klient
SMTP-klient
Xml Parser
WIN64
Tyvärr, i win64 förlorade vi hela FastCode-arvet. (som mestadels baserades på ASM). Det betyder att de flesta av funktionerna kommer att vara cirka 2x till 10x långsammare. du kan försöka starta /demo/ALStringBenchMark/ i win64 och Win32 för att se skillnaden i hastighet.