Zeus64'ün Alcinoe Bileşen Kitaplığı, Delphi için açık kaynaklı bir görsel ve görsel olmayan bileşen kitaplığıdır.
Tam OpenGL video oynatıcı, WebRTC Delphi sarmalayıcı, yerel ios/android TEdit, Geliştirilmiş firemonkey kontrolleri, Firebase bulut mesajlaşma, Android/ios facebook SDK girişi, Json/Bson Ayrıştırıcı, ImageMagick sarmalayıcı, MongoDB istemcisi.
Alcinoe, Delphi Rio 10.3.3 ve Delphi Sydney 10.4.2 ile uyumludur
https://github.com/Zeus64/alcinoe
MOD indirmeyi destekleyen Delphi Alexandria 11.1 ile (kaldırıldı):
Alsin artık tamamen uyumlu Delphi Atina 12.3.
Alcinoe'yi yükleyin
Tasarım sırasında herhangi bir Alcinoe görsel bileşenini kullanmayı planlamıyorsanız, herhangi bir şey yüklemenize gerek yoktur, projenizin arama yoluna {alcinoe_rootdir}\source eklemeniz yeterlidir.
Tasarım sırasında görsel bileşenleri kullanmayı planlıyorsanız BPL'yi yüklemeniz gerekir. Delphi'yi başlatın ve bileşen > Paketleri Yükle… > seçeneğine gidin ve {alcinoe_rootdir}\lib\bpl\alcinoe\Win32\sydney\Alcinoe_sydney.bpl konumunda bulunan BPL'yi seçin (delphi Sidney'deyseniz Delphi sürümünüze karşılık gelen dizini seçin). Yine de arama yolunuza {alcinoe_rootdir}\source'u eklemeniz gerekiyor
Alcinoe ayrıca orijinal Delphi kaynak kodlarını da biraz geliştiriyor. Bu şekilde orijinal Delphi kaynak kodunu almak ve yama yapmak için {alcinoe_rootdir}\embarcadero\sydney\10_4_2 dizinine gitmeniz ve update.bat komutunu çalıştırmanız gerekecektir. Toplu iş dosyası, orijinal kaynak kodunun “c:\Program Files (x86)\Embarcadero\Studio\21.0\source” konumunda bulunduğunu ve yolunuzda GIT'in bulunduğunu varsayar. Toplu iş kopyalanıp yamalandıktan sonra Delphi kaynak kodunun bu kaynak kodunu proje arama yolunuza dahil etmesi gerekecektir.
Giderek daha fazla kitaplığı tamamlamak için Java 1.8 özelliklerini kullanın (webRTC, exoplayer vb. gibi). Bu şekilde şeker giderme işlemi yapmalıyız (Şeker giderme işlemi, derleme işlemi sırasında yeni bayt kodlarını ve dil API'lerini eskileriyle değiştirerek bu özellikleri eski cihazlarda kullanmanıza olanak tanır). D8.bat (dx.bat'ın yerine) ile şeker giderme varsayılan olarak açıktır. Böylece artık eski cihazları hedeflerken en son dil değişikliklerinin çoğunu kullanabilirsiniz. Embarcadero'nun D8.bat'a geçmesini beklerken, DX.bat'ı D8.bat'a "proxy" yapmalıyız. Bunun için orijinal DX.bat dosyanızı (benimki c:\SDKs\android\build-tools\30.0.3\d8.bat konumunda) {alcinoe_rootdir}\tools\D8Proxy\dx.bat konumunda bulunan dosyayla değiştirin. daha fazla ayrıntı burada: https://quality.embarcadero.com/browse/RSP-24155
FireMonkey için tam OpenGL video oynatıcı
ALVideoPlayer bir videoyu DOKU'ya dönüştürecek. Bu gerçekten önemli çünkü videoyu tamamen Delphi formuna entegre edebiliyorsunuz ve Z-ORDER desteği olduğundan istediğiniz kontrolleri bunun üzerine yerleştirebiliyorsunuz. Resmi Delphi video oynatıcısı, formun üst kısmındaki yerel video oynatıcı penceresidir ve bu nedenle Z-ORDER'ı desteklemez.
Android altında ExoPlayer kullanıyorum. ExoPlayer, MediaPlayer tarafından desteklenmeyen HTTP üzerinden Dinamik uyarlamalı akış (DASH), HLS, SmoothStreaming ve Ortak Şifreleme gibi özellikleri destekler. Özelleştirilmesi ve genişletilmesi kolay olacak şekilde tasarlanmıştır. İOS altında AVPlayer'ı ExoPlayer'ın yaptığı gibi HLS desteğiyle kullanıyorum
FireMonkey için video oynatıcı FireMonkey için video oynatıcı FireMonkey için video oynatıcı
WebRTC Delphi sarmalayıcı
WebRTC (Web Gerçek Zamanlı İletişim), Web uygulamalarının ve sitelerinin ses ve/veya video ortamını yakalamasına ve isteğe bağlı olarak yayınlamasına, ayrıca tarayıcılar ve mobil uygulamalar arasında herhangi bir aracı gerektirmeden isteğe bağlı veri alışverişi yapmasına olanak tanıyan bir teknolojidir. WebRTC'yi içeren standartlar seti, kullanıcının eklentileri veya başka herhangi bir üçüncü taraf yazılımını yüklemesine gerek kalmadan veri paylaşmayı ve eşler arası telekonferans gerçekleştirmeyi mümkün kılar.
TALWebRTC bileşeni, uygulamalarınıza görüntülü ve sesli sohbet eklemeyi kolaylaştırır, bu da yepyeni bir etkileşim dünyasının kapılarını açar
Delphi WebRTC sarıcı
Firemonkey yerel iOS/Android TEdit ve TMemo
Bu tür bir kontroldeki işlevselliğin uygulanması çok zor olmaya başladığında (web tarayıcısı, düzenleme, not, tarih seçici vb. gibi) FireMonkey kontrolünü yerel platform kontrolüyle karıştırmanın ruhudur. Ancak bu, örneğin http://www.turbococoa.com/ gibi çeşitli platformlar için birkaç farklı form oluşturmak değildir (ancak bu seçenek de bir bakıma iyi bir alternatiftir, karar vermek size kalmıştır)
Delphi'de (berlin) zaten oldukça iyi uygulanmış ancak hiçbir android platform kontrolüne yakın olmayan IOS platform kontrolü var ve bu yüzden TEdit/TMemo gibi yerel Android/iOS kontrolleri oluşturmaya başlıyorum. Bu kontroller çoğunlukla formun üstüne yerleştirilen bazı pencereler gibi çalışır (bu nedenle elbette FireMonkey kontrolünde z sırası yoktur)
Çizim Çizim
Çizim
Yerel çizim özelliğine sahip hızlı/çift arabellekli FireMonkey kontrolleri
Dikdörtgen
Çevre
Metin (iOS/android/win/macOS'ta da html metni çizilebilir)
Glif
vb.
TALR Dikdörtgen
TALR Dikdörtgen
Gerçek
FireMonkey kontrollerinin boyanması bazen yavaş olabilir veya başka bir deyişle akıcı bir kaydırma için yeterince hızlı olmayabilir. Örneğin, köşeleri yuvarlak olan temel Üçgen'e bakarsanız, boyama işlemi yaklaşık 3 ms sürebilir! Yani, ekranınızda yaklaşık 20 görünür Üçgen varsa, tam ekranı yeniden boyamak size yaklaşık 60 ms'ye mal olur (ve normalde yalnızca TRectangle'ınız yoktur, ayrıca TLabel, TCheckbox vb.'niz de vardır). Sadece matematikten sonra, ekranı yeniden boyamak 100 ms sürer, böylece saniyede yalnızca 10 kare yapabilirsiniz (gerçekte çok daha az kareye sahip olursunuz), böylece kaydırma akıcı olamaz 🙁
Çözüm
FireMonkey kontrollerini yeniden oluşturmak istemedim, bu benim için çok büyük bir iş ve bunun yerine ara bir çözüm bulmaya çalışıyorum. FireMonkey kontrollerine "çift arabellekli" özelliği ekleyerek bulduğum şey bu. Dolayısıyla, kaydırma kutusunun her bir piksel hareketi için kontrolleri yeniden boyamak (ve yeniden boyamak) yerine, ilk önce kontrolü doğrudan GPU belleğinde (TTexture aracılığıyla) sakladığım bir "arabellek" üzerine boyuyorum ve sistem benden, boyama algoritmasını tekrar çağırmak yerine kontrolleri yeniden boyamamı istediğinde, sadece TTexture arabelleğini yeniden çiziyorum.
Sonuçlar
Daha önce de söylediğim gibi köşeleri yuvarlak olan basit bir Üçgeni boyamak 3 ms sürdü. Çift tamponlu özelliğim sayesinde bu işlem artık 0,1 ms civarında sürüyor! Artık kaydırma çok daha akıcı görünüyor!
OpenGL çizimi => Yerel iOS/android çizimiyle değiştirildi
Temel şekillerin çoğu (TRectangle, TCircle, vb. gibi) çizim için openGL'yi kullanır. pek verimli değil, örneğin openGL'de bir daire çizdiğinizde aslında 50 adet üçgen çizeceksiniz. Bu sonuç genellikle düşük kalitededir: https://quality.embarcadero.com/browse/RSP-15206 Roundrect için durum daha da kötüdür çünkü önce yolu hesaplamanız ve sonra onu çizmeniz gerekir (TCircle'dan çok daha yavaş)
Diğer sorun ise tüm bu çizimlerin Form kalitesine bağlı olmasıdır. form.quality'yi yüksek kaliteye ayarlarsanız, tuval üzerinde yapacağınız her şey, örneğin bir resim çizmek gibi, çok örnekli olacaktır ve bu, resim kenar yumuşatılacağından sorunlu olabilir. form.quality'yi yüksek performansa ayarlarsanız çizim çok kaba olacaktır (kenar yumuşatma yok).
Bunu çözmek için NATIVE ANDROID/IOS API'yi kullanarak kontrolümün arabelleğini oluşturuyorum. Bu sayede forma bağlı kalmadan, aynı zamanda yüksek hızda, kaliteli bir çekiş elde etmiş olacağız.
TALÇember
Geliştirilmiş FireMonkey kontrolleri
Kaydırma Kutusu
SekmeKontrol
RangeTrackBar
RangeTrackBar
FireMonkey için video oynatıcı FireMonkey için video oynatıcı FireMonkey için video oynatıcı
Konfeti Düşme Animasyonu
ALConfetti, yapılandırılabilir, yüksek performanslı konfeti düşme animasyonu oluşturmaya yönelik bir vanilya Delphi kitaplığıdır.
konfeti
Firebase bulut mesajlaşma
Anlık bildirimleri almak için Firebase Cloud Messaging'i (FCM) kullanmanın platformlar arası bir yöntemi FCM'yi kullanarak, bir istemci uygulamasına yeni e-postanın veya diğer verilerin senkronize edilmeye hazır olduğunu bildirebilirsiniz. Kullanıcının yeniden etkileşimini ve kullanıcıyı elde tutmasını artırmak için bildirim mesajları gönderebilirsiniz. Anlık mesajlaşma gibi kullanım durumları için bir mesaj, 4 KB'ye kadar bir veri yükünü bir istemci uygulamasına aktarabilir.
Android/iOS VKontakte/Facebook SDK girişi
Android için VKontakte/Facebook SDK'sı, kişilerin VKontakte/Facebook Girişi ile uygulamanızda oturum açmasına olanak tanır. İnsanlar VKontakte/Facebook ile uygulamanıza giriş yaptıklarında uygulamanıza izin verebilirler, böylece onlar adına VKontakte/Facebook'ta bilgi alabilir veya eylemler gerçekleştirebilirsiniz.
Android/iOS için Fotoğraf Düzenleyici Filtreleri
TALColorAdjustEffect ile tek dokunuşla otomatik iyileştirme özelliğine sahip muhteşem fotoğraf filtreleri, fotoğraflarınızı birkaç dakika içinde güzel ve etkileyici hale getirir!
FireMonkey için video oynatıcı FireMonkey için video oynatıcı
Json Ayrıştırıcı
TALJsonDocument, JSON / BSON veri formatı için bir Delphi ayrıştırıcı/yazıcıdır. DOM ve SAX ayrıştırıcısını destekler (XML için Basit API için SAX yerine JSON için Basit API için SAJ olabileceğini unutmayın, ancak SAX kavramı iyi bildiğim için bu adı saklıyorum), BSON formatını destekliyor ve TALXMLDocument / TXMLDocument'e benzer bir sözdizimi kullanıyor. TALJsonDocument ayrıca Json / Bson verilerini TALStringList'e aktarabilir.
Bazı (metinsel) içeriğin ayrıştırılmasıyla ilgilenildiğinde, genellikle iki yön tasavvur edilir. JSON dünyasında genellikle aşağıdakiler arasında bir seçim yapmanız gerekir:
JSON içeriğini eşleyen nesnelerin bellek içi ağaç yapısını oluşturan bir DOM ayrıştırıcısı;
JSON içeriğini okuyan ve ardından her JSON içerik öğesi için önceden tanımlanmış olayları çağıran bir SAX ayrıştırıcısı.
Aslında DOM ayrıştırıcıları, JSON içeriğini okumak için dahili olarak bir SAX ayrıştırıcısını kullanır. Bu nedenle, nesne oluşturma ve bunların özellik başlatma yükü nedeniyle DOM ayrıştırıcıları genellikle SAX'tan üç ila beş kat daha yavaştır (ve tüm düğümleri depolamak için çok daha fazla bellek kullanır). Ancak DOM ayrıştırıcıları veriyi işlemek açısından çok daha güçlüdür: yerel nesnelerde eşlendiğinde kod herhangi bir düğüme zaman kaybetmeden erişebilir, oysa SAX tabanlı erişimin tüm JSON içeriğini yeniden okuması gerekecektir.
Delphi'de bulunan çoğu JSON ayrıştırıcısı DOM benzeri bir yaklaşım kullanır. Örneğin, Delphi 2010'dan beri dahil edilen DBXJSON birimi veya SuperObject kütüphanesi, her JSON düğümünü eşleyen bir sınıf örneği oluşturur. En iyi hızı elde etmek için TALJsonDocument, DOM ayrıştırıcısını ve ayrıca bir SAX ayrıştırıcısını uygular.
TALJsonDocument ayrıca JSON spesifikasyonlarının bir uzantısı olan JSON kaynağı içindeki yorumları da destekleyebilir
TALJsonDocument sözdizimi TALXMLdocument / TXMLDocument'e çok benzer
TALJsonDocument'in 2 çeşidi mevcuttur: ansiString'in üstünde yapılan TALJsonDocument (yani UTF-8) ve unicode dizenin üstünde yapılan TALJsonDocumentU (yani UTF-16)
Örnek:
{
_id: 1, // yorumlar
adı: { ilk: “John”, son: “Backus” },
doğum: yeni Tarih('1999-10-21T21:04:54.234Z'),
katkıları: [ “Fortran”, “ALGOL”, “Backus-Naur Form”, “FP” ],
ödüller: [
{ ödül: “Ulusal Bilim Madalyası”,
yıl: 1975,
yazan: “Ulusal Bilim Vakfı” },
{ ödül: “Turing Ödülü”,
yıl: 1977,
yazan: “ACM” }
],
eş: “”,
adresi: {},
telefonlar: []
}
Belge düğümlerine erişmek için:
MyJsonDoc.loadFromJson(AJsonStr, False);
MyJsonDoc.ParseOptions := [poAllowComments]; // JSON kaynağı içindeki yorumlara izin vermek için
MyJsonDoc.childnodes['_id'].int32;
MyJsonDoc.childnodes['ad'].childnodes['ilk'].metin;
MyJsonDoc.childnodes['ad'].childnodes['son'].metin;
MyJsonDoc.childnodes['doğum'].tarihsaat;
for i := 0 to MyJsonDoc.childnodes['contribs'].ChildNodes.count – 1 do
MyJsonDoc.childnodes['katkılar'].childnodes[i].text;
for i := 0 to MyJsonDoc.childnodes['awards'].ChildNodes.count – 1 başlıyor
MyJsonDoc.childnodes['ödüller'].childnodes[i].childnodes['ödül'].metin;
MyJsonDoc.childnodes['ödüller'].childnodes[i].childnodes['yıl'].metin;
MyJsonDoc.childnodes['ödüller'].childnodes[i].childnodes['by'].text;
sonu;
Veya erişmeden önce düğümlerin varlığından emin değilseniz veya kontrol etmek istemiyorsanız şunları da yapabilirsiniz:
MyJsonDoc.GetChildNodeValueInt32('_id', 0{düğüm mevcut değilse varsayılan});
MyJsonDoc.GetChildNodeValueText(['name','first'], ”{düğüm mevcut değilse varsayılan});
MyJsonDoc.GetChildNodeValueDateTime('birth', Now{düğüm yoksa varsayılan});
Belge düğümlerini oluşturmak için:
MyJsonDoc.addchild('_id').int32 := 1;
MyJsonDoc.addchild('name', ntObject) ile başlar
addchild('ilk').text := 'John';
addchild('son').text := 'Backus';
sonu;
MyJsonDoc.addchild('doğum').dateTime := Şimdi;
MyJsonDoc.addchild('katkılar', ntArray) ile başlar
addchild.text := 'Fortran';
addchild.text := 'ALGOL';
addchild.text := 'Backus-Naur Formu';
addchild.text := 'FP';
sonu;
MyJsonDoc.addchild('awards', ntArray) ile başlar
addchild(ntObject) ile başlar
addchild('ödül').text := 'Ulusal Bilim Madalyası';
addchild('yıl').int32 := 1975;
addchild('by').text := 'Ulusal Bilim Vakfı';
sonu;
addchild(ntObject) ile başlar
addchild('ödül').text := 'Turing Ödülü';
addchild('yıl').int32 := 1977;
addchild('by').text := 'ACM';
sonu;
sonu;
MyJsonDoc.addchild('eş');
MyJsonDoc.addchild('adres', ntObject);
MyJsonDoc.addchild('telefonlar', ntArray);
Ayrıca şu şekilde düğümler oluşturabilir/güncelleyebilirsiniz:
MyJsonDoc.SetChildNodeValueInt32('_id', 0);
MyJsonDoc.SetChildNodeValueText(['name','first'], 'John');
MyJsonDoc.SetChildNodeValueDateTime('doğum', Şimdi);
BSON'dan yüklemek ve kaydetmek için:
MyJsonDoc.LoadFromFile(aBSONFileName, False{saxMode}, True{BSON});
MyJsonDoc.SaveToFile(aBSONFileName, False{saxMode}, True{BSON});
Bir JSON belgesini Sax Modunda ayrıştırmak için:
MyJsonDoc.onParseText := prosedür (Gönderen: TObject;
const Yol: AnsiString;
sabit adı: AnsiString;
const Args: const dizisi;
DüğümAltTürü: TALJSONNodeSubType)
başla
vaka NodeSubType /
nstFloat: Writeln(Path + '=' + ALFloatToStr(Args[0].VExtished^, 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(“”yyyy”-”mm”-”dd”T”hh”:”nn”:”ss”.”zzz”Z”)””, Args[0].VExtished^, ALDefaultFormatSettings));
nstNull: Writeln(Yol + '=' + '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(Yol + '=' + 'NumberInt('+inttostr(Args[0].VInteger)+')');
nstTimestamp: Writeln(Yol + '=' + 'Timestamp('+inttostr(int64(cardinal(Args[0).VInteger)))+', '+inttostr(int64(cardinal(Args[1].VInteger)))+')');
nstInt64: Writeln(Yol + '=' + 'NumberLong('+inttostr(Args[0].VInt64^)+')');
sonu;
sonu;
MyJsonDoc.LoadFromJSON(AJsonStr, true{saxMode});
Delphi için ImageMagick sarmalayıcı
Bitmap görüntüleri oluşturmak, düzenlemek, oluşturmak veya dönüştürmek için ImageMagick®'i kullanın. PNG, JPEG, GIF, HEIC, TIFF, DPX, EXR, WebP, Postscript, PDF ve SVG dahil olmak üzere çeşitli formatlardaki (200'ün üzerinde) görüntüleri okuyabilir ve yazabilir. Görüntüleri yeniden boyutlandırmak, çevirmek, yansıtmak, döndürmek, deforme etmek, kesmek ve dönüştürmek, görüntü renklerini ayarlamak, çeşitli özel efektler uygulamak veya metin, çizgiler, çokgenler, elipsler ve Bézier eğrileri çizmek için ImageMagick'i kullanın.
Örnek:
var aWand: PMagickWand;
başla
//ImageMagick Kütüphanesini oluşturun
alCreateImageMagickLibrary({alcinoe_rootdir} + '\lib\dll\imagemagick\win32\imagemagick', min(2, System.CPUCount){aThreadLimit});
dene
//değnek işaretçisini oluştur
aWand := ALImageMagickLib.NewMagickWand;
dene
//görüntüyü yükle
if ALImageMagickLib.MagickReadImage(aWand, pansiChar(aInputFilename)) <> MagickTrue ardından RaiseLastMagickWandError(aWand);
//Sıkıştırma kalitesini ayarlayın
if ALImageMagickLib.MagickSetImageCompressionQuality(aWand,80) <> MagickTrue ardından RaiseLastMagickWandError(aWand);
//görüntüyü otomatikleştir
if ALImageMagickLib.MagickAutoOrientImage(aWand) <> MagickTrue ardından RaiseLastMagickWandError(aWand);
//Lanczos filtresini kullanarak görüntüyü yeniden boyutlandırın
if ALImageMagickLib.MagickResizeImage(aWand, 640, 480, LanczosFilter) <> MagickTrue ardından RaiseLastMagickWandError(aWand);
//görüntüyü kaydet
ALImageMagickLib.MagickWriteImage(aWand, pansiChar(aOutputFilename));
sonunda
ALImageMagickLib.DestroyMagickWand(aWand);
sonu;
sonunda
alFreeImageMagickLibrary;
sonu;
sonu;
MongoDb istemcisi
MongoDB veritabanı için Delphi İstemcisi. MongoDB sunucusuna erişmek için bir Delphi sürücüsü (bağlantı havuzlu). Bağlantı havuzu, gelecekte veritabanına istekler gerektiğinde bağlantıların yeniden kullanılabilmesi için tutulan veritabanı bağlantılarının önbelleğidir. Bağlantı havuzu oluşturmada, bağlantı oluşturulduktan sonra havuza yerleştirilir ve tekrar kullanılır, böylece yeni bir bağlantı kurulmasına gerek kalmaz. Tüm bağlantılar kullanılıyorsa yeni bir bağlantı yapılarak havuza eklenir. Bağlantı havuzu oluşturma aynı zamanda kullanıcının veritabanıyla bağlantı kurmak için beklemesi gereken süreyi de azaltır.
Örnek:
aJSONDoc := TALJSONDocument.create;
aMongoDBClient := TAlMongoDBClient.create;
dene
aMongoDBClient.Connect(”, 0);
aMongoDBClient.SelectData('test.exemple',
'{fieldA:123}', // sorgu
'{fieldA:1, fieldB:1}', // dönüş alanları seçici
aJSONDoc.node);
aMongoDBClient.disconnect;
for i := 0 - aJSONDoc.node.childnodes.count – 1 do
aJSONDoc.node.childnodes[i] ile
yapın
writeln(aJSONDoc.node.childnodes[i].nodename + '=' + aJSONDoc.node.childnodes[i].text)
sonunda
aMongoDBClient.free;
aJSONDoc.free;
sonu;
Bağlantı havuzuna örnek:
aMongoDBConnectionPoolClient := TAlMongoDBConnectionPoolClient.create(aDBHost, aDBPort);
dene
::Konu1::
aMongoDBConnectionPoolClient.SelectData('test.example',
'{fieldA:123}', // sorgu
'{fieldA:1, fieldB:1}', // dönüş alanları seçici
aLocalVarJSONDOC.node);
::Konu2::
aMongoDBConnectionPoolClient.SelectData('test.example',
'{fieldA:999}', // sorgu
'{fieldA:1, fieldB:1}', // dönüş alanları seçici
aLocalVarJSONDOC.node);
sonunda
aMongoDBClient.free;
sonu;
Örnek kuyruk izleme:
aMongoDBTailMonitoringThread := TAlMongoDBTailMonitoringThread.Create(
aDBHost,
aDBPort'u,
'test.cappedCollectionExemple'
'{}', // sorgu
'{fieldA:1, fieldB:1}', // dönüş alanları seçici
Prosedür (Gönderen: TObject; JSONRowData: TALJSONNode)
başla
writeln('cappedCollectionExemple'a yeni öğe eklendi: ' + JSONRowData.childnodes['fieldA'].text);
sonu,
prosedürü (Gönderen: TObject; Hata: İstisna)
başla
writeln(Hata.mesaj);
sonu);
….
aMongoDBTailMonitoringThread.free;
WebSocket istemcisi
WinHTTP'nin üstünde uygulanan Delphi için WebSocket İstemcisi. WebSocket, kullanıcının tarayıcısı ile sunucu arasında iki yönlü etkileşimli bir iletişim oturumu açmayı mümkün kılan bir iletişim protokolüdür. Bununla, bir sunucuya mesaj gönderebilir ve sunucuyu yanıt için yoklamanıza gerek kalmadan olaya dayalı yanıtlar alabilirsiniz.
Hızlı TStringList
TALStringList Delphi TStringList ile aynı şekilde çalışır, ancak liste sıralandığında hızlı sıralama algoritması kullanılarak bir ad=değer aranmasına izin verilir. Ayrıca TALStringList, Delphi TStringList tarafından kullanılan AnsiCompareText ve AnsiCompareStr yerine yerel ayardan bağımsız bir algoritma (her karakterin 8 bitlik sıra değerine dayalı) kullanır. sonunda TALStringList'teki sıralama Delphi TStringList'e göre 10 kata kadar daha hızlıdır. Ayrıca TALStringList bir Unicode TStringList değil, %100 Ansi StringList'tir
TALNVStringList (NameValue için NV), TALStringList ile aynıdır (ayrıca bir hızlı sıralama algoritması kullanın), ancak burada optimizasyon dize listesi yerine ad/değer listesine yöneliktir.
TALHashedStringList TALHashedStringList, hızlı sıralama algoritması yerine dahili bir karma tablosu kullanması dışında TALStringList ile aynıdır. TALStringList yerine TALHashedStringList kullanarak, liste çok sayıda dize içerdiğinde performansı artırabilirsiniz (aksi takdirde, listeniz çok fazla dize içermiyorsa, karma hesaplama maliyeti nedeniyle performans TALStringList'ten daha düşüktür)
PHP çalıştırıcısı
ALPHPRunnerEngine, Delphi uygulamalarında php'yi (herhangi bir sürüm) komut dosyası dili olarak kolayca kullanmak için basit ama kullanışlı bir bileşendir. ALPhpRunnerEngine, PHP betiklerinin Delphi programı içinde Web Sunucusu olmadan çalıştırılmasına izin verir. ALPHPRunnerEngine, PHP motoruyla iletişim kurmak için PHP'nin CGI/FastCGI arayüzünü (php-cgi.exe) kullanır.
Memcached İstemcisi
Memcached veritabanı için Delphi İstemcisi.
Memcached nedir? Ücretsiz ve açık kaynak, yüksek performanslı, dağıtılmış bellek nesnesi önbelleğe alma sistemi, doğası gereği geneldir ancak veritabanı yükünü hafifleterek dinamik web uygulamalarını hızlandırmak için tasarlanmıştır.
Memcached, veritabanı çağrıları, API çağrıları veya sayfa oluşturma sonuçlarından elde edilen küçük rastgele veri parçaları (dizeler, nesneler) için bir bellek içi anahtar/değer deposudur.
Memcached basit ama güçlüdür. Basit tasarımı, hızlı dağıtımı, geliştirme kolaylığını destekler ve büyük veri önbelleklerinin karşılaştığı birçok sorunu çözer.
GSM bileşeni
TAlGSMComm bileşeni, Aralık 1996 tarihli GSM Teknik Şartnamesi 07.05, sürüm 5.1.0'da tanımlanan metin modu arayüzü aracılığıyla SMS metin mesajlaşmasını uygular. Nokia, Siemens, Ericsson, vb. modellerde kullanılan bu spesifikasyonun çeşitli varyasyonları vardır. Nokia 6230'u kendi bünyemizde test ettik ancak Nokia 7190, 8890, 6210 ve 9110 modelleri de çalışmalıdır. Diğer üreticilerin telefonları da metin modu arayüzünü uyguladıkları sürece çalışacaktır. Mevcut telefonların yaklaşık 1/4'ü bir PC'ye (IR veya seri kablo aracılığıyla) bağlanma kapasitesine sahiptir; bunların yaklaşık 1/3'ü yalnızca metin modundadır, 1/3'ü yalnızca PDU modundadır ve diğer 1/3'ü hem metin hem de PDU modunu destekler. Bazı telefonlar (Nokia 5190 gibi) SMS'i destekler, ancak TALGSMComm'un desteklemediği özel bir protokol kullanırlar.
Telefonunuzu test etmek için seri kablo veya IR cihazı aracılığıyla telefonunuzu PC'nize bağlayın (nasıl bağlanılacağına ilişkin ayrıntılar için telefonunuzun belgelerine bakın). Bağlantının kurulduğunu doğrulamak için terminal penceresine "AT" yazın (telefondan "OK" almanız gerekir), ardından "AT+CMGF=?" girin. Yanıt, metin modunu desteklediğini belirten bir “1” içermelidir. Bu testlerin her ikisi de başarılıysa, telefonunuz temel gereksinimleri karşılıyor demektir.
SQLite3 İstemcisi
Sqlite3 veritabanını sorgulayın ve sonucu Xml formatında veya Json/Bson formatında alın.
Ve çok daha fazlası
CGI koşucusu
Http İstemcisi (WinInet/WinHTTP)
MySQL İstemcisi
NNTP İstemcisi
POP3 İstemcisi
SMTP İstemcisi
Xml Ayrıştırıcı
WIN64
Maalesef win64'te tüm FastCode mirasını kaybettik. (bu çoğunlukla ASM'ye dayanıyordu). Bu, çoğu işlevin yaklaşık 2 ila 10 kat daha yavaş olacağı anlamına gelir. hız farkını görmek için win64 ve Win32'de /demo/ALStringBenchMark/ başlatmayı deneyebilirsiniz.