BeniBela online

Quellcodes

Auf dieser Seite sind Quellcodes, die man in eigenen Projekten benutzten kann, aufgelistet, Delphikomponenten sind jedoch auf einer eigenen Seite zu finden. Alle mit der MPL-Lizenz, GPL-Lizenz oder BSD-Lizenz versehenen Quellcodes dürfen beliebig verändert und vertrieben werden.
Bei der MPL und GPL müssen aber Änderungen veröffentlicht werden und bleiben unter der MPL lizenziert, bei der GPL gilt dies auch für Erweiterungen.
Steht eine Datei unter mehreren Lizenzen, darf man eine davon wählen.
Genauere und rechtskräftige Informationen sollten den Dateien bei liegen.
Braucht jemand unbedingt eine andere Lizenz, kann er mir eine E-Mail schicken.

Titel Beschreibung SpracheLizenz
Internet Tools Ein XPath 2/3/XQuery 1/3/JSONiq-Interpreter, ein Pattern-Matcher für HTML/XML-Templates, eine Auto­update-Klasse und einen HTTP-VerbindungswrapperFPCGPL
Farb­auswahl­dialog Ein Farb­auswahl­dialog mit RGB- und HLS-Auswahl­möglichkeitenDelphiGPL
HAMT HAMT-basierte mutable und immutable Maps und SetsFPC(LC)LGPL
TCommand­Line­Reader Eine Unit zum Lesen von Kommando­zeilen­parameternFPC, DelphiGPL
Big Decimal Math Funktionen zum Rechnen mit beliebig genauen Dezimal­zahlenFPC(LC)LGPL
Diagram-Tools Eine Diagramm­komponente, basierend auf einem Model/View-SystemFPC/LazarusGPL
BBUtils Häufig benötigte Funktionen, die einem bei FPC fehlen.FPCLGPL (+FPC)
Non-VCL Canvas Eine Konvertierung des Delphi-Canvas nach Non-Vcl.DelphiMPL, GPL
Diff­reader Eine Unit zum Lesen und Schreiben von Unified Diffs.FPCGPL
TCVirus Eine Unit/Komponente zum Entwickeln von Scherz­programmenDelphiMPL, GPL
TAuto­Updater Eine Unit für ein automatisches Progamm­updateFPCGPL
Simple­Browser Ein kleiner, IE-basierter Browser(Delphi), (EXE)GPL
Huffman­komprimierer Eine Funktions­sammlung für Huffman(de-)komprimierung.DelphiMPL, GPL

 Internet Tools

GPL
2006 - 2017
Dieses Package enthält folgende Module:

  • Einen simplen HTML Parser, der eine HTML/XML-Datei parst und für jeden gelesen Tag und Text eine entsprechende Callbackfunktion aufruft.
  • Einen HTML Tree Parser, der den einfachen Parser verwendet, um eine HTML/XML-Datei zu lesen und in einen Elementstream umzuwandeln, der sich wie ein DOM-Baum verhält. Dabei werden zudem Fehler in der HTML-Datei wie nicht geschlossene Tags korrigiert und die Zeichenkodierung ermittelt.
  • Einen XPath / XQuery Interpreter, der beliebige XPath 2.0, XPath 3.0, XQuery 1.0 und XQuery 3.0 Ausdrücke über dem DOM-ähnlichen Baum ausführen kann. Er ist vollständig in Pascal implementiert, unterstützt alle XPath/XQuery 3.0 Funktionen/Ausdrücke und ist quasi standardkompatibel (siehe die Ergebnisse der XQuery Testsuite, 100% für XPath 2 und über 99.5% für XQuery 3). Er unterstützt auch JSONiq.
  • Ein Parser für CSS 3 Selectors, der in die XQuery Klasse eingebaut ist, der CSS Selektoren in XPath-Ausdrücke umwandeln, und diese dann ausführt.
  • Eine pattern-matching HTML Templateengine, die ein HTML Template auf eine Seite anwendet. Ein solches HTML-Template ist eine vereinfachte Version der zu verarbeitenden Seite. Die Struktur des Templates wird mit der Struktur der Seite verglichen, und jedes Template-Element wird mit einem übereinstimmenden Seiten-Element verknüpft, welches dieselben Eigenschaften und ähnliche Kinder aufweist. Die in den Template-Elementen enthaltenden Annotationen können dann die Werte der entsprechenden Seiten-Elemente auslesen. Zum Beispiel ein Template wie
    <a>{@href}</a>*
    liest die Addressen aller Links auf einer HTML Seite.
    Ein Template wie
    <table id="foobar"><tr><td>abc</td><td>{.}</td>*</tr>*</table>
    liest alle Tabellenzellen nach der Zelle mit dem Text abc in der Tabelle mit ID foobar. Und schließlich ein Template wie
    <table id="foobar"><tr>{temp := 0}<td>abc</td><td>{temp := $temp + .}</td>*{result := $temp}</tr>*</table>
    berechnet die Summe aller Tabellenzellen nach der abc-Zelle für alle Zeilen.
    Diese Templates lassen sich auch online or with Xidel ausprobieren.
  • Die multi page Templateengine speichert in ihren Templates mehrere Einzelseitentemplates, die nacheinander auf die angegebenen Seiten angewandt werden. Im Gegensatz zu den Einzelseitentemplates führt diese Engine kein pattern-matching durch (außer natürlich dem pattern-matching mit den enthaltenen Einzelseitentemplates zu den heruntergeladenen Seiten), sondern führt alle Aktionen in der angegebenen Reihenfolge durch. Dabei werden auch Variablen, Bedingungen und Schleifen unterstützt, so dass sie Turing vollständig ist.
  • Der HTTP/S-Verbindungswrapper kann Seiten mit beliebigen HTTP-Methoden (z.B.: GET/POST) herunterladen und kümmert sich automatisch um Cookies und Weiterleitungen. Außerdem kann er dynamisch zwischen Wininet (auf allen Windowscomputern vorhanden), Synapse (plattform-unabhängig, muss aber installiert werden) und Apache HttpComponents (alter Standard für Android) umschalten.
  • Die Autoupdateklasse ist ein Trivialbeispiel für die anderen Klassen, und kann automatisch ein Update herunterladen und installieren.


Stichpunktübersicht der Features:

  • Parser/Interpreter:
    • für XML/HTML Webseiten, über ein sax und dom-ähnliches Interface
    • für XPath 2.0, XPath 3.0, XQuery 1.0 und XQuery 3.0 Ausdrücke
      • nahezu vollständig standardkompatibel: von den Tests in der XQuery Testsuite besteht es zwischen 100% für XPath 2.0 und 99% für XQuery 3.0
      • einige Funktionen von XPath/XQuery 3.1.
      • Plus Erweiterungen für OOP, CSS, Regexps, pattern-matching und JSONiq.
    • für JSONiq: Eine Weiterentwicklung von XQuery zur Verarbeitung von JSON-Daten
    • für CSS 3 Selektoren
      • standalone oder innerhalb eines XPath Ausdrucks: //foobar/css("p#x a.class")/@href
    • für pattern-matching HTML/XML Templates:
      • Patterns sind für HTML, was reguläre Ausdrücke für Text sind.
      • Die Sprache kann reguläre, XPath 2 / XQuery, JSONiq und CSS 3 Selektor Ausdrücke einbinden.
      • Es gibt Variablen, optionale Elemente, Schleifen und Bedingungen.
      • z.B.: <p class="test"><span>Caption:</span><a>{.}</a>*</p> liest alle Links nach einem span-Element mit Text Caption: innerhalb eines Paragraphens mit Klasse test
    • für multi-page Templates
      • Mehrere Patterns zusammen, die nacheinander auf unterschiedliche Seiten angewandt werden.
      • unterstützt Variablen, Bedingungen und Schleifen => Turing vollständig
  • HTTP/S-Wrapper:
    • Übertragungen über HTTP und HTTPS mit Fortschrittsanzeige
    • Beliebige HTTP-Methoden, z.B.: GET, POST, PUT, ...
    • Unterstützte Plattformen:
      • Windows: via WinINet
      • Android: via JNI-Aufruf von OkHttp oder den Apache HttpComponents
      • Andere (Linux, Mac): via dem plattform unabhängigen Synapse (benötigt OpenSSL for HTTPS)
      • Offline: Simulation eine Internetverbindung für Unittests
    • Unterstützung für HTTP, HTTPS und SOCKS-Proxy (abhängig von der Plattform)
  • Auto update:
    • Verwendet ein XML-Format, um auf dem Server die aktuelle Version und das Changelog zu speichern.
    • Erlaubt unterschiedliche Updates für 32/64-bit Linux/Windows und BSD-Plattformen.
    • Überprüft, ob es eine neue Version gibt, indem nur eine kleine Datei (statt dem Changelog) heruntergeladen wird.
    • Erlaubt das Ausführen des heruntergeladenen Installers mit beliebigen Kommandozeilenparametern.
Mercurial repository

Onlinereferenz

Quellcode auf GitHub

Download    (1673 KB)zur Übersicht

 Farb­auswahl­dialog

GPL
2005
Dieser Farbauswahl ähnelt dem Windowsstandarddialog, bietet aber mehr Möglichkeiten:
  • Es werden alle Komponenten von RGB und HLS angezeigt.
  • Man kann in einem Farbverlauf eine beliebige Komponente von RGB/HLS ändern
  • Diese Komponente wird sowohl in Abhängigkeit von den beiden anderen angezeigt wie auch unabhängig
  • Die beiden anderen Komponenten können in einem 2D-Farbverlauf ausgewählt werden
  • Dieser wird jeweils in Abhängigkeit der anderen Komponente angezeigt
  • Zusätzlich kann man eine Liste von änderbaren Farben anzeigen
screenshot: examplescreenshot: example


Quellcode auf GitHub

Download    (14 KB)zur Übersicht

 HAMT

(LC)LGPL

Ein HAMT ist eine effiziente Abbildung von Hashwerten/prefixen zu Daten als Baum/Trie, wobei die Zugriffsgeschwindigkeit ähnlich zu einer Hashmap ist, aber kein Rehashing benötigt wird und sich der ganze Baum an der Wurzel in konstanter Zeit kopieren lässt. In dieser Implementierung werden ein 32-Bit Hash und Knoten mit 32 Kindern verwendet, so dass jeweils 5 Bits vom Hash das nächste Kind auf dem Pfad von der Wurzel zum Blatt bestimmen. In der Abwesenheit von Hashkollisionen lassen sich damit maximal 2^32 Werte in einem Baum der Tiefe (log_32 2^32) = 6 speichern. Das Auslesen von Werten benötigt damit maximal 6 Speicherzugriffe und ist somit quasi O(1). Auftretende Hashkollisionen werden für jeden Hash in einem Array gespeichert.

Die Speicherverwaltung der Baumknoten läuft wie bei strings: Jeder Baumknoten hat einen Referenzzähler. Wenn der Zähler 1 ist, ist der Knoten mutable und kann verändert werden. Wenn der Zähler größer als 1 ist, ist der Knoten immutable und eine Veränderung erzeugt mittels copy-on-write einen neuen Knoten.

Der HAMT kann mit beliebigen Typen verwendet werden, da alles generic ist.

Beispiel:

type TImmutableMapStringString = specialize TImmutableMap<string, string, THAMTTypeInfo>;
var map, map2, map3: TImmutableMapStringString;
    p: TImmutableMapStringString.PPair;
begin
  map := TImmutableMapStringString.create;
  map2 := map.Insert('hello', 'world');
  map3 := map2.insert('foo', 'bar');

  writeln(map.get('hello', 'default')); // default
  writeln(map.get('foo', 'default')); // default

  writeln(map2.get('hello')); // world
  writeln(map2.get('foo', 'default')); // default

  writeln(map3['hello']); // world
  writeln(map3['foo']); // bar

  //enumerate all
  for p in map3 do
    writeln(p^.key, ': ', p^.value);

  map.free;
  map2.free;
  map3.free;
end


Onlinereferenz

Quellcode auf GitHub

Download    (122 KB)zur Übersicht

 TCommand­Line­Reader

GPL
Dies ist ein Kommandozeilenparser, der sowohl mit Delphi wie auch mit Free Pascal funktioniert, sowie unter Windows und Linux.
Vor der Abfrage von Parametern, müssen alle erlaubten Parameter deklariert werden. Dadurch kann vom Parser überprüft werden, dass der Benutzer nur erlaubte Parameter und nur richtige Parameterwerte (z.B.: Int vs. String) verwendet. Außerdem kann so bei Angabe eines falschen Parameters automatisch eine Hilfsliste aller unterstützenden Parameter angezeigt werden. Dies verhindert umgekehrt, dass es geheime, undokumentiere Optionen gibt.
Es gibt drei verschiedene Versionen des Parsers, die ersten beiden lesen die Argumente von der Kommandozeile, und zeigen die Hilfe auf stdout bzw. in einer Messagebox an. Die dritte Version (nur fpc) läuft als CGI-Anwendung und nimmt die Argumente über HTTP GET/POST-Anfragen entgegen.

Zum Vergleich sind hier die Ausgaben meiner Klasse und der Standard-Kommandozeilenfunktionen bei Aufruf des Programms mit den Parameter '" a "' :
SystemTCommandLineReaderParamStrstring(cmdline)
Windows (Delphi 4)" a "' a '"executable" '" a "'
Windows (fpc 2.6)" a "' a 'executable '" a "'
Linux/bash (fpc 2.6)" a "" a "executable "" a ""

Die Features von rcmdline sind:
  • Automatische Typumwandlung in den angegeben Typen
  • Automatische Anzeige aller erlaubten Parameter
  • Linux (--xyz=bar oder -x bar) und Windows (/) -styleparameter werden erkannt
  • Verschiedene Eingabemöglichkeiten für Flags (-f, --flag, --enable-flag, --disable-flag)
  • Einfache (') und doppelte (") Anführungszeichen werden erkannt (auch unter Windows)
  • Existierende Dateien mit Leerzeichen im Namen auch ohne Verwendung von Anführungszeichen einlesbar
  • Kann als CGI-Anwendung laufen und auf GET/POST-Anfragen antworten (nur fpc)
  • Parameter können von einem String (z.B.: cmdline) oder einem Array (z.B.: indirekt ParamStr) gelesen werden


Onlinereferenz

Quellcode auf GitHub

Download    (38 KB)zur Übersicht

 Big Decimal Math

(LC)LGPL
2013, 2015
Diese Unit definiert einen BigDecimal-Typ, der beliebig genaue (BCD) Dezimalzahlen speichert und wie ein normaler numerischer Typ verwendet werden kann, z.B.:
  var bd: BigDecimal;
  
  bd := 12.34;
  bd := bd * 1000 - 42;  // bd = 12298
  bd := bd / 7.0;        // bd = 1756.85714285714286
  bd := StrToBigDecimal('123456789012345678901234567890123456789') + 1; // bd = 123456789012345678901234567890123456790
    


Features:

  • Funktioniert mit Zahlen zwischen 10-19327352814 und 1019327352814 mit bis zu 4831838208 Dezimalziffergenauigkeit
  • Implementiert alle Grundrechenarten und Vergleichsoperatoren
  • Die entsprechenden Operatoren sind überladen, so dass es wie ein normaler Zahlentyp verwendet werden kann
  • Funktionen zum Runden (auf, ab, kaufmännisch, ...)
  • Einige wenige höhere mathematische Funktionen, wie sqrt und power
  • Exakte Standard-float zu String Umwandlungsfunktionen
  • In reinem Pascal geschrieben, daher vollständig plattformunabhängig und ohne Abhängigkeiten
  • Die Hauptziele der Entwicklung sind Korrektheit und Einfachheit, nicht Geschwindigkeit.


Onlinereferenz

Quellcode auf GitHub

Download    (72 KB)zur Übersicht

 Diagram-Tools

GPL
Diese Unit zur Anzeige eines Diagrammes folgt einem ähnlichen Model/View-Konzept wie QT: Es gibt eine View-Komponente, welches die in einem Model gespeicherten Daten anzeigt und eine dazugehörige, abstrakte Modelklasse.
Dies ist sehr viel flexibler als der traditionelle Weg, bei welchem die Daten der anzeigenden Komponente direkt zugeordnet sind.
Features:
  • Model/View-Konzept mit automatische Synchronisation zwischen Views, welche identische Models zeigen
  • Füllen mit horizontalem/vertikalen Farbverlauf und unterschiedliche Linien/Punktstyles
  • Interpolation durch Geraden oder Splines möglich
  • Die Diagrammwerte können je nach Einstellung vom Benutzer verändert werden
  • Mehrere mögliche Achsen und Punktreihen mit samt einer Legende für letztere
  • Automatische Bereichswahl, Verarbeitung von Fließkommawerten
  • Standardmodels, mit Punktlisten, zyklischen Listen und einem Model zur Verknüpfung anderer Modelle
  • Es gibt eine Hilfedatei
screenshot: grid likescreenshot: filled


Onlinereferenz

Quellcode auf GitHub

Download    (64 KB)zur Übersicht

 BBUtils

LGPL (+FPC)
In diesen Units habe ich einige kleine Funktionen gesammelt, die einem bei der Programmierung mit FPC ständig fehlen. Es gibt:
  • Viele verschiedene Arrayfunktionen (hinzufügen, löschen, vergleichen, ...)
  • Viele verschiedene Stringfunktionen (pchar/ansistring, vergleichen, zerlegen, suchen, umwandeln, 1-Bit von/zu Unicode Zeichensatzkonvertierungen, UTF-8-Funktionen, HTML-Entities, Stringbuilder, ...)
  • Viele verschiedene Datum/Zeit-Funktionen, Parser/Formatierer für Zeitzonen, negative Jahre und Jahre nach 65535 (gemäß dem XML Schema 1.1 Standard, also kompatibel zur Zeitrepräsentation in ISO 8601:2004)
  • Stabile Sortierfunktion für Daten beliebiger Größe (merge+insert sort)
  • Mathematische Funktionen (ggt, Primzahlen, Bernoulli-Wahrscheinlichkeitsrechnung,...)
  • Automatische Übersetzung von mit tr['markierten String'] und Lazaruskomponenten
  • Einen Pascal-Preprocessor, der ähnlich zum C-Preprocessor, Pascalquellcode aus einer Templatedatei erzeugt
Diese Unit hat dieselbe Lizenz wie FreePascals Standardbibliotheken, kann also ohne Lizenzprobleme in jedem FPC/Lazarus-Programm verwendet werden.

Delphi-Kompatibilität: Viele dieser Funktionen wurden ursprünglich für Delphi 4 geschrieben und funktionieren auch noch mit Delphi 4. Neue Funktionen werden jedoch nicht mehr mit Delphi getestet, da es unwahrscheinlich ist, dass Leute noch immer Delphi 4 verwenden und ich nicht das neuste Delphi zum Testen besitze. Wer die Unit mit Delphi verwenden will, kann einfach die nicht kompilierenden Funktionen entfernen.

Onlinereferenz

Quellcode auf GitHub

Download    (187 KB)zur Übersicht

 Non-VCL Canvas

MPL, GPL
2003
Diese Quellcodesammlung ermöglicht es die üblichen Funktionen des Delphicanvas ohne die VCL-Codes zu benutzen, indem für jede VCL-Funktion eine Methode existiert, die direkt die entsprechende GDI-Funktion auffruft.
Ihre wichtigsten Elemente sind:
  • Funktionen zum Zeichnen von Ellipsen, Linien, Rechtecken und Polygonen.
  • Funktionen zum Kopieren von Bildausschnitten.
  • Funktionen zur Ausgabe von Text.
  • Klassen zur Einstellung von Vorder- und Hintergrundfarbe.
  • Eine Klasse zum Einstellen von Fonteigenschaften.
  • Eine Hash-klasse und ein Ressourcenmanager.
In einigen Bereichen sind sie den Delphimethoden sogar überlegen, so kann man beispielweise den Text auch gedreht ausgeben.
Es gibt eine ausführliche HTML-Doku, in der alle Funktionen beschrieben sind.

Download    (26 KB)zur Übersicht

 Diff­reader

GPL
2009
Mit dieser Unit kann man ein Unified Diff in ein strukturiertes Format einlesen, verarbeiten und wieder als gültiges Diff speichern
  • Liest Unified Diffs für eine oder mehrere Dateien
  • Erzeugt gültige Diffs
  • Besitzt Funktionen um unnötige Daten zu entfernen (siehe mein Programm Simplify Diff)


Download    (3 KB)zur Übersicht

 TCVirus

MPL, GPL
2000, 2003
TCvirus hat (unter anderem) folgende Funktionen:
  • Es liefert einen Canvas für das direkte Zeichnen auf den Bildschirm, unabhängig von geöffneten Fenstern.
  • Man kann den Bildschirm spiegeln
  • Es liefert Windowshandle für wichtige Objekte, wie dem Startbutton, der Taskleite und des Desktops, über die sie dann verändert werden können.
  • Man kann das Programm vor dem Taskmanager verstecken.
  • Man kann die CD-Schublade öffnen und schließen.
Da TCvirus ursprünglich eine Komponente war, gibt es zwei Units: Eine mit den eigentlichen Funktionen, und eine Komponente, die einen Wrapper für die erste Unit darstellt.
Will man die Komponente ohne die VCL nutzen, benötigt man meinen Non-VCL Canvas, der aber im Ziparchiv enthalten ist.

Download    (60 KB)zur Übersicht

 TAuto­Updater

GPL
Hiermit kann man in ein Programm ein automatisches Update übers Internet einbauen.
Um die Klasse benutzen zu können, braucht man eine wininet-Unit, die die Windowsinternetfunktionen enthält. (oben gibt es eine neuere Version, die ein besser konfigurierbares XML-Format verwendet) Funktionen:
  • Erkennen neuer Versionen
  • Download dieser
  • Ersetzen des eigenen Programms unter Windows NT und 9x-Schiene
  • Erkennen von Rechtemangel unter (Windows NT,...)


Download    (9 KB)zur Übersicht

 Simple­Browser

GPL
2006
Dies ist ein kleiner Browser, der auf dem Internet Explorer basiert.
Für einen Normaluser ist er vollkommen nutzlos, sein Aussehen kann aber beim Aufruf durch Kommandozeilenparameter festgelegt werden, was manchmal recht praktisch ist, wenn man nur eine bestimmte Seite anzeigen will.

Download    (188 KB)zur Übersicht

 Huffman­komprimierer

MPL, GPL
2003
Diese Unit ermöglicht die (De-)Kompression von Strings mit dem Huffmanverfahren. In dem entstehenden, komprimierten String wird jedes Zeichen nicht mehr mit 8 Bit gespeichert, sondern die Bitlänge ist variabel, so dass häufige Zeichen mit weniger Bits als seltene gespeichert werden.
Es ist auch möglich Unicodestrings, Arrays und Dateien zu komprimieren, indem sie einfach als Bytestrings interpretiert werden.
Die Unit enthält eine Kopie von TBits der 32-Bit VCL, per Define kann dies deaktiviert werden, um auch auf anderen Platformen zu kompilieren.
Geeignet ist das Verfahren für normale Texte und andere Daten, bei denen einige wenige Zeichen sehr oft wiederholt werden. In den meisten Fällen ist die Kompressionsrate aber geringer als bei modernen Komprimierungsverfahren, wie Rar oder Ace.

Download    (12 KB)zur Übersicht

www.benibela.de/sources_de.html
Datenschutz
 

Navigation