Häppchenkarte

Go to english version

Letzte Aktualisierung: Seiteninhalt am 13.5.2010, Downloads am 21.04.2010

Neu! Noch mehr zum Downloaden: hier wird eine noch wachsende Sammlung von "Nützlichkeiten" angeboten!


CEval und CEvalTester - scripting für Visual Basic
ukCheckBox - ein komfortabler Ersatz für die VB CheckBox
VBRegTLBMod - TypeLib Spielereien
Hide - steganographische Spielereien
Sorttest - Sortieralgorithmen Tester Update!
OddEven - der Nächste bitte!
ArrayDims - dead or alive
ToDate - DateTime Strings sicher wandeln
Strings - String Helferlein
ukPopup - Forms in popup oder dropdown Forms verwandeln
Cryptography - kryptographische Helferklassen
CZoom - zoom me up, Scotty! Update!
CFileSearch - Verzeichnisse durchstöbern, Dateien suchen

CEval und CEvalTester - scripting für Visual Basic
VB6 Anwendung binär

CEval ist eine Klasse, die Ausdrücke berechnen kann. Sie benutzt eine BASIC ähnliche Syntax, die der von VB soweit möglich ähnlich ist.

CEvalTester ist eine Applikation mit der CEval getestet werden kann. Außerdem ist sie gleichzeitig ein mächtiger "Taschenrechner" und erlaubt ebenfalls tabellenkalkulationsähnliche Scripts. Objekte können ebenfalls per Script angesprochen werden. CEval ist in CEvalTester eingebettet.

Scripte können in CEValTesters Scriptfenster (der helle Bereich in obigem Bild) eingegen, geändert oder geladen werden. Dann kann das Script ausgeführt werden. CEval kompiliert zuerst das Script zu einer Art "Bytecode" und führt dann den "Bytecode" aus. Kompilierung und Ausführung geht/ist recht schnell. In der Statuszeile in obigem Bild kann abgelesen werden, wie lange CEval für die Kompilierung und Ausführung gebraucht hat.

Nachdem ein Script kompiliert wurde kann der resultiertende "Bytecode" so oft wie gewünscht ausgeführt werden. Dem Script zur Verfügung stehende Variable können von der CEval einbettenden Applikation (hier von CEvalTester) zwischen den "runs" effizient gelesen und geschrieben werden. Die Ergebnisse eines Scriptlaufes werden im Ergebnisfenster (der grüne Bereich in obigem Bild) ausgegeben.

Die Ausgabe von Berechnungsresultaten im Ausgabefenster erfolgt nach folgenden Regeln:

Die gegenwärtige Version von CEval ist "production stable". Jedoch sollen noch neue Features hinzugefügt werden und die Scriptsyntax wird sich ebenfalls noch ändern. In Zukunft wird CEval benutzerdefinierte Funktionen unterstützen, die im Scripttext selbst definiert werden können oder in der einbettenden Applikation realisiert sind und CEval zur Verfügung gestellt werden. Außerdem werden dann Programmablaufkonstrukte wie Verzweigungen und Schleifen zur Verfügung stehen. Ebenso wird die Unterstützung für Objekte verbessert werden und die Erzeugung von Objekten per Scriptcode möglich sein. CEval wird dann eine "richtige" Scriptsprache sein, in der Leistungsfähigkeit vielleicht vergleichbar mit VB Script.

Solange die endgültige Version von CEval noch nicht fertiggestellt ist, will ich die Sourcen nicht veröffentlichen. Danach ist geplant, CEval als binäre COM-Server Dll zu veröffentlichen. Über die Dll kann dann die Funktionalität von CEval in eigene Programme leicht eingebunden werden. Gleichzeitig wird dann die Testapplikation im Source veröffentlicht (momentan ist CEval noch als Source in der Testapplikation eingebettet). Die Dll wird so um die 100 kB groß werden.

Sowohl der CEval COM-Server als auch die Testapplikation werden weiterhin frei für die Benutzung zu persönlichen Zwecken sein. Für den kommerziellen Einsatz der Dll werde ich (erstmals für Produkte von dieser Webseite) eine Lizenzgebühr verlangen. Ebenso wird es möglich sein, den Sourcecode von CEval zu kaufen.

Im Archiv zum Downloaden befinden sich zwei Applikationen: CEvalTester und CEvalCalculator. CEvalCalculator ist eine 1:1 Kopie von CEvalTester und unterscheidet sich deshalb nur im Namen. Beide sind frei zur persönlichen Verwendung.

CEvalCalculator startet immer im Rechnermodus und kann nicht in den Testmodus umgeschaltet werden. Näheres dazu in der Hilfe unter "Run modes". Ansonsten gibt es keine Unterschiede zu CEvalTester.

Benutzen Sie CEvalCalculator, wenn Sie CEValTester als "Taschenrechner" oder als Ersatz für einfache Tabellenkalkulationen benutzen wollen. Ideal geeignet für die schnelle Berechnung zwischendurch oder auch für komplexere Berechnungen. Der "Taschenrechner" ist programmierbar und skriptfähig. Im Gegensatz zum herkömmlichen Bedienungskonzept für Taschenrechner sind Sie hier keine Zwängen ausgesetzt. Einfach einen Ausdruck eintippen und schon steht das Ergebnis da. Falls mal ein Syntaxfehler im Skript sein sollte, erhalten Sie noch beim Tippen bereits eine Fehlermeldung. Natürlich werden auch Fehler angezeigt, die beim Ausführen eines Skriptes entstehen (zum Beispiel Division durch 0). In jedem Fall können Sie der Fehlermeldung entnehmen, was der Fehler ist und wo im Skript er aufgetreten ist. Auf Wunsch wird auch gleich die entsprechende Stelle im Skript markiert angezeigt.

Alle Ergebnisse der Berechnungen erscheinen schon während des Tippens der Berechnung stets aktuell im Ausgabefenster. Von dort können die Ergebnisse in die Zwischenablage übernommen werden oder als ganzes in eine Textdatei gespeichert werden.

Im Archiv zum Downloaden befinden sich auch noch eine Hilfedatei und diverse Beispielskripte und Tutorskripte.

Für Anmerkungen, Informationen oder Wünsche zu CEval können Sie eine Mail an senden.

Abhängigkeiten: benutzt einige Windows APis, die aber auf allen 32 Bit Windows Systemen (WIN 2K und höher) vorhanden sein sollten.

Download CEvalTester (Version 1.2 vom 18.1.2009)

ukCheckBox - ein komfortabler Ersatz für die VB CheckBox
VB6 Usercontrol binär mit Tester

Einige Eigenheiten der Visual Basic eigenen Checkbox haben mich immer geärgert. Deshalb hier ein in VB6 realisierter Ersatz dafür. Benötigt nur die Visual Basic 6 Runtimes und den Font "Marlett" (dieser sollte auf jedem Windowssystem vorhanden sein). Das Usercontrol verwendet seine eigene graphische Darstellung und im Vergleich zum Original leicht unterschiedliche Methoden, Eigenschaften und Events.

Besonderheiten:

Neu: dem Archiv beigelegt ist eine Testapplikation (mit Sourcecode)

Das Usercontrol hat folgende Abhängigkeiten:

Die Testapplikation hat folgende Abhängigkeiten:

Download ukCheckBox

VBRegTLBMod - TypeLib Spielereien
VB6 Anwendung binär

Basis für dieses Tool ist VbRegTLB von SteveMcMahon. Ich habe es etwas überarbeitet und erweitert. Das Thema ist, über TypeLibraries Informationen zu gewinnen und diese gegebenfalls in der Registry zu registrieren oder zu deregistrieren. Und es geht wirklich nur um Typelibraries. Es ist damit nicht möglich, zB einen COM-Server korrekt zu registrieren oder zu deregistrieren. Allerdings können die Informationen über die zu einem COM-Server gehörenden Typelibrary angezeigt werden.

Am hilfreichsten ist diese Tool für die Verwaltung der VB-Typelibcaches (Dateien mit der Dateiendung .oca). Diese werden von VB nach Belieben erzeugt und die darin enthaltene Typelibrary wird in der Registry registriert. Um diese Dateien wieder los zu werden, reicht es leider nicht, nur die Datei zu löschen. Vorher muß die zugehörige Typelibrary deregistriert werden, sonst bleibt diese erhalten und müllt die Registry zu. Das Tool ermöglicht die Deregistrierung von VB-Typelibcaches. Allerdings muß dazu das zugehörige .oca-File noch existieren! Also erst den VB-Typelibcache deregistrieren, dann das zugehörige File löschen.

Ebenso können reine Typelibs (Dateien mit der Endung .tlb) registriert und deregistriert werden.

Des weiteren können Typelibeinträge in der Registry direkt gelöscht werden. Hilfreich ist dies für "verwaiste" Typelibs (die zum Registryeintrag gehörende Typelibdatei ist vom System gelöscht worden, ohne sie vorher zu deregistrieren). Dazu benutzen Sie den eingebauten Typelibrarymanager, der auch einen gesamten Überblick über alle Typelib-Registryeinträge bietet.

Ebenfalls sehr hilfreich ist das Tool bei der Gewinnung von Infos über COM-Server. Sie haben zB eine Datei XXX.Dll und fragen sich:

Antworten auf diese und weitere Fragen können Sie von diesem Tool erhalten.

Außerdem können aus dem Tool heraus der Typelibviewer von Oleview.exe und Regedit.exe gestartet werden, falls diese vorhanden sind. Ebenso steht ein (noch experimenteller) Registryviewer zur Verfügung, der es Ihnen erlaubt, den Zweig unter einem vorgebbaren Registry-Subkey zu laden und dann Schlüssel und Werte per flexibler Suchfunktion zu durchsuchen.

!! WARNUNG !!

Dieses Tool ist wirklich nur für erfahrene User. Es können damit erhebliche Schäden angerichtet werden. Benutzen Sie es überlegt und auf eigene Gefahr!

Das Tool steht als VB6-Exe zur Verfügung und hat folgende Abhängigkeiten:

Download VBRegTLBMod

Hide - steganographische Spielereien
VB6 Anwendung binär

Hide! ist eine Spielerei mit nutzenswertem Hintergrund. Eine schwarzweiße Bitmap (die Maske) wird mit einem Key (einer verrauschten Bitmap) verschlüsselt. Das Resultat (der Code) ist eine Bitmap, welche mit Hilfe des Keys wieder hergestellt werden kann. Das Archiv zum Downloaden enthält auch einige Testbitmaps.

Für die Maske steht ein eingebauter, einfacher Texteditor zur Verfügung, der es Ihnen erlaubt, beliebige Texte einzugeben. Sie können aber auch Schwarzweiß-Bitmaps beliebigen Inhalts als Maske laden. Dies könnte zB auch ein graphisches Abbild eines Textfiles sein. Wenn Sie diese Maske mit Hilfe von Hide! verschlüsseln, haben Sie eine sichere Version, die aller Wahrscheinlichkeit nach kein Codeknacker dieser Welt entziffern kann. Bewahren Sie Key und Code getrennt auf, damit das Code knacken nicht zu leicht wird.

Das Wiederherstellen der Maske kann "elektronisch" mittels Hide! erfolgen oder auch "materiell". Die "elektronische" Variante entschlüsselt mit Hilfe des gespeicherten Codes und Keys und stellt Ihre Maske verlustfrei wieder her.

Die "materielle" Variante ist im Prinzip ebenfalls verlustfrei, dennoch sollte man nicht zu sehr darauf zählen. Probieren Sie doch einmal, den Key und den Code abzuspeichern und dann mit einem geeignetem Programm auf transparentem Papier (für erste Versuche tuts auch ganz normales, nicht zu dickes Druckerpapier) auszudrucken. In der Maske sollte nur Text stehen. Betrachten sie jeden der beiden Ausdrucke für sich, sehen Sie nur wildes Rauschen. Legen Sie dagegen die beiden Ausdrucke paßgenau übereinander und halten sie beide gegen eine Lichtquelle, wird der verborgene Text der Maske wieder sichtbar. Es hilft beim Übereinanderlegen, wenn Sie dem Key Marker verpaßt haben. Und es sollte nicht zu klein ausgedruckt werden. Eine Druckauflösung von 50 dpi ist gut geeignet. Die Schrift für die Maske sollte recht groß sein. Benutzen Sie für erste Versuche die Voreinstellung.

Abhängigkeiten:

Download Hide

Sorttest - Sortieralgorithmen Tester Update!
VB6 Utilityklasse mit Tester und Source

Sorttest ist ein Programm zum Testen und Visualisieren von Sortieralgorithmen. Eine Reihe von Sortieralgorithmen ist bereits implementiert. Diese können auch auf einfache Weise in eigenen Programmen verwendet werden.

Das Programm kommt mit integrierter, ausführlicher Hilfe (die Hilfe ist auch als separate Datei mit dabei) und einem verbessertem Viewer. In der Versionshistorie (ebenfalls im Programm eingebettet und als separate Datei vorhanden) sind alle Änderungen und Erweiterungen der aktuellen und der früheren Versionen aufgeführt. Zusammen mit der Hilfedatei erfahren Sie hier alle Änderungen, Erweiterungen und Möglichkeiten, auch die hier auf dieser Webseite nicht erwähnten.

Die Utilityklasse CSort enthält die Implementierung einiger bekannter Sortieralgorithmen und derer Varianten:

Eine der Quicksortvarianten ist als "sichere" Version implementiert. In dieser Version ist die (äußerst unwahrscheinliche) Möglichkeit eines Stacküberlaufes beim Sortieren eliminiert, ohne daß die Routine dadurch an Geschwindigkeit verliert. Damit kann ein Laufzeitverhalten von O(n*log(n)) für alle Arten von zu sortierenden Verteilungen eingehalten werden. Ebenso wie die Basisversion hat diese Quicksortimplementierung auch keinerlei Schwierigkeiten mit bereits sortierten Zahlen oder ähnlichen Entartungen. Testen Sie selbst!

Die Utilityklasse ist so gestaltet, daß die implementierten Sortieralgorithmen unabhängig von der Testanwendung sind. Der User kann damit sehr einfach eigene Algorithmen zum Testen einbinden (weitere Infos dazu sind in den Kommentaren in CSort zu finden) oder einen der vorhandenen Algorithmen leicht in eigene Programme übernehmen und gegebenenfalls anpassen (Hilfestellung dazu findet sich ebenfalls in den Kommentaren).

Jeder Algorithmus ist auf zwei verschiedene (funktional identische) Weisen implementiert: in einem Fast-Modus, der für eigene Zwecke verwendet werden kann (einfach per Cut and Paste in die eigene Applikation übernehmen) und in einem Statistikmodus, der es erlaubt, elementare statistische Kennzahlen zu messen:

Alle Algorithmen sind implementiert für die aufsteigende Sortierung ganzzahliger Werte (Longs). Die Anpassung an andere numerische Datentypen ist durch einfachen Austausch der Typdeklarationen leicht selbst durchzuführen. Für Strings sollten für das Vergleichen und das Austauschen geeignete Methoden verwendet werden. Die Umstellung auf absteigendes Sortieren ist bei den meisten Algorithmen ebenfalls einfach durch Umkehrung der Vergleiche durchzuführen.

Jeder Algorithmus ist sorgfältig ausgewählt, verwendet die allgemein anerkannten Optimierungen, ist auf Korrektheit getestet und auf maximale Geschwindigkeit getrimmt. Einige Algorithmen haben wählbare Parametereinstellungen. Die Quicksortimplementierung ist trotz ihrer prägnanten Kürze hocheffizient und besitzt eine außergewöhnliche Robustheit gegenüber der Verteilung der zu sortierenden Werte.

Die zugehörige Testapplikation erlaubt die Durchführung der Sorts in 3 verschiedenen Modi:

Eine Hilfsklasse CSortArrayGen stellt für das Testen der Sortieralgorithmen etliche parametrisierbare Generatoren für Zahlenverteilungen zur Verfügung. Dies erlaubt es, die Eignung der Algorithmen für entartete Verteilungen (wie zB. bereits sortiert, invers sortiert, alle gleich) und andere spezielle Verteilungen (wie zB etwas sortiert) zu ermitteln. Einige der vorgestellten Sortieralgorithmen reagieren sehr allergisch auf solche Verteilungen (sprich die Ausführungszeiten erhöhen sich drastisch). CSortArrayGen ist ebenfalls so gestaltet daß der User leicht eigene Generatoren erstellen und einbinden kann.

Die vom Programm generierten Zahlenverteilungen können als Datei abgespeichert und auch wieder eingelesen werden (sowohl binär als auch im Textformat). Ebenso ist es möglich, zB. mit einem Texteditor selbst Zahlenverteilungen in einer Textdatei zu erstellen und diese ins Programm einzulesen. Im beiliegenden Ordner "TestData" sind bereits einige Zahlendateien zum Einlesen vorhanden. Das für die Textdateien zu verwendende sehr flexible Format und dessen Möglichkeiten veranschaulicht die Datei "TestData User entered.txt" im Ordner "TestData".

Für jede Verteilung können einige Kennzahlen (Minimum, Maximum und Häufigkeitsklassen) ermittelt werden. Die Häufigkeitsklassen schlüsseln die vorliegende Zahlenverteilung danach auf, wieviele Werte einfach, doppelt, dreifach usw. vorkommen.

Eine weitere Funktion überprüft das Ergebnis eines Sortierlaufes auf Korrektheit. Damit können auch vom User eingebundene neue Algorithmen oder vom User modifizierte vorhandene Algorithmen auf Korrektheit getestet werden.

Ein besonderes Schmankerl der Testapplikation ist die Visualisierung des Sortierfortschrittes durch graphische Echtzeitdarstellung mit wählbarer Punktgröße, Zeitlupenfunktion, Einzelschrittbetrieb und stufenloser Skalierbarkeit der Anzeigefläche. Breakpoints können zusätzlich zum Einzelschrittbetrieb an beliebigen Stellen der Implementierung eines Sortieralgorithmus gesetzt werden. Damit können beliebige Informationen über den inneren Zustand eines laufenden Algorithmus an der Stelle des Breakpoints inspiziert werden.

Unterschiedliche, in ihrer Abstufung wählbare Farben für aktuell während des Sortierens noch unveränderte und bereits veränderte Feldelemente erlauben eine visuelle Abschätzung der Effizienz des Sortieralgorithmus in Bezug auf die Anzahl der vorgenommenen Zuweisungen und Vertauschungen. Die gerade von Zuweisung oder Vertauschung betroffenen Elemente können farblich hervorgehoben werden.

Neben dem ästhetischen Erlebnis bietet damit die visuelle Darstellung die Möglichkeit, den jeweiligen Sortieralgorithmus besser zu begreifen.

Zur weiteren Kontrolle können die unsortierten bzw. sortierten Feldinhalte auch in 2 Listboxen angezeigt werden. Diese Anzeige schaltet sich bei Feldern mit mehr als 10000 Einträgen allerdings selbst aus, da dann das Füllen der Listboxen unerträglich lange dauern würde.

Download Sorttest (Version 1.4.3 vom 06.12.2009)

OddEven - der Nächste bitte!
VB6 Quickie mit Source

Hat Sie nicht schon immer interessiert, wie man von einer gegebenen ganzen Zahl ausgehend möglichst schnell die nächstgrößere oder nächstkleinere gerade oder ungerade Zahl ermittelt? Wenn ja, sind Sie hier richtig. Der Quickie zeigt 5 Möglichkeiten, dies zu tun.

Angeregt zu diesem Quickie hat mich ein KnowHow-Tip auf der Website von AboutVB.

Download OddEven

ArrayDims - dead or alive
VB6 Quickie mit Source

Lebende und tote Arrays? Aber ja, gibts. Und noch besser, sogar "untote" Arrays gibt es. Das Quickie erklärt und zeigt, wie man tote, "untote" und lebende Arrays unterscheiden kann. Der Code dazu geht seltsame Wege und kommt doch sicher zum Ziel.

Etwas nüchterner: es geht darum, festzustellen, ob ein Array definiert ist und, wenn ja, wieviele Dimensionen es hat (maximal 60 unter VB). Und dies mit einer Funktion für jede beliebige Art von Array. Ebenso wird detektiert, ob ein Array "untot" ist. Praktisch für ParamArrays oder Arrays, die von zB der VB Split-Funktion zurückgeliefert werden.

Download ArrayDims

ToDate - DateTime Strings sicher wandeln
VB6 Utility Klasse mit Source

Zu Zeiten will man einen String mit einer Datums- oder/und Zeitangabe sicher in den Typ Date umwandeln. Sicher soll dabei heißen, daß für Zweideutigkeiten aller Art bei der Interpretation des Strings kein Raum gelassen werden soll.

Die eingebauten VB-Funktionen (CDate, DateValue, TimeValue, IsDate) haben dabei einige Eigenheiten, die eine sichere Umwandlung verhindern. Diese VB-Funktionen veranstalten nämlich diverse Ratespielchen, um einen übergebenen String "auf Teufel komm raus" als sinnvolle Zeit/Datumsangabe zu interpretieren. Besonders schlimm treibt es dabei CDate.

Eine nicht korrekte Datumsangabe wird von CDate stillschweigend uminterpretiert: "12.21.1999" wird so als "21.12.1999" interpretiert. Hier hat der User, der länderspezifisch gewohnt ist, ein Datum im Format "DD.MM.YYYY" anzugeben, sich vielleicht nur vertippt. Auch "1999.12.21" wird so zum "21.12.1999".

Auch zB. "1000" wird ohne Beanstandung in ein Datum, den "26.09.1902", umgewandelt. Hier tippt CDate darauf, daß der User statt einem Datum in der benutzerfreundlichen Darstellung ein Datum in der internen Darstellung (nämlich als Zahl) vorgegeben hat.

In diese Ratespielchen von CDate gehen auch die aktuellen Ländereinstellungen ein, was ua. dazu führt, daß manche Trennzeichen im String nicht so interpretiert werden, wie man das gerne hätte. Der "29.2.1999" wird zB von CDate auf einem deutschen System, bei dem der Punkt als Tausendertrennzeichen angegeben ist, offensichtlich als die Zahl "2921999" interpretiert. Diese ergibt, als Datum interpretiert, den "27.2.9900". Der erste Versuch von CDate war dabei wahrscheinlich, die einzelnen Bestandteile des Datums umzustellen (wie oben beim "12.21.1999"). Da das nicht zu einer sinnvollen Datumsangabe führte, wird die Vorgabe schwupp-di-wupp einfach als Zahl interpretiert!

CDate erlaubt die verkürzte Angabe der Jahreszahl. Zweistellige Jahreszahlen werden (nach in der Systemeinstellung vorgebbaren Regeln) in vierstellige Jahreszahlen umgewandelt. Den "1.1.20" zB. interpretiert CDate auf meinem System als den "01.01.2020". Erinnern Sie sich noch an das "Jahr 2000 Problem"? Bingo, die Ursache dafür war in der verkürzten Angabe (zweistellig) von Jahreszahlen begründet.

Zudem hat CDate Schwierigkeiten bei der Interpretation führender Nullen. So wird "0000000000000000000000000000001.1.100" zum "01.01.0100", "00000000000000000000000000000001.1.100" (eine führende Null mehr) aber zum "22.05.1930".

Probieren Sie doch mal die Datumsangaben aus, die in der Datei Info.txt aufgeführt sind, und wundern Sie sich über die Ergebnisse, die CDate liefert. Als kleiner Vorgeschmack:

In vielen Fällen ist dieses Verhalten von CDate nicht erwünscht, es wäre sogar höchst gefährlich. Denken Sie zB an Datums/Zeitangaben, die in Textfiles gespeichert werden und weltweit ausgetauscht werden. Hier muß sichergestellt werden, daß keine Zweideutigkeiten bei der Interpretation dieser Datums/Zeitangaben auftreten können, unabhängig davon, auf welchem System mit welcher Ländereinstellung die Software läuft und unabhängig davon, ob vielleicht nicht doch die Datums/Zeitangabe kein Tippfehler ist, sondern so gewollt ist, aber nur anders interpretiert werden will. Also eine Funktion muß her, die ein festes Format erwartet.

Deshalb hier eine Klasse CDateTime mit einer Funktion ToDate, die folgendes leistet (und dabei sogar, wenn zu native Code kompiliert, teilweise um ein mehrfaches schneller als CDate ist):

ToDate wandelt Strings mit Datumsangaben, Datums/Zeitangaben und Zeitangaben in den Typ Date um.

Die Funktion ToDate ist sowohl für das Überprüfen von Datums- und/oder Zeitangaben auf Korrektheit geeignet (zB bei Usereingaben in eine Textbox) als auch für das schnelle Wandeln größerer Mengen an Datums- und/oder Zeitangaben (zB aus einer Datei) von einem String in den Typ Date. Sie kann statt der VB Funktionen CDate und IsDate eingesetzt werden, wenn sichere Umwandlung von Strings mit Datums- und/oder Zeitangaben in den Typ Date nötig ist (und wo ist das nicht nötig :-)).

Mein besonderer Dank geht an den Kollegen Peter Götz, der mit seiner kritischen Würdigung der ersten Version der Beschreibung von ToDate auf dieser Website mich zu einer Überarbeitung dieser Beschreibung angeregt hat.

Das Downloadarchiv enthält neben der Klasse CDateTime und der Datei Info.txt auch ein Testprogramm, um Performance und Ergebnisse von ToDate und CDate miteinander vergleichen zu können.

Download ToDate

Strings - String Helferlein
VB6 Utility Klasse mit Source

Die aktuelle Version V1.5 der Klasse CStrings vom 29.12.2003 enthält einen Bugfix für die Methode "NormalizeWS".

White space (WS) in UNICODE Strings ist das Thema. White space sind hier alle UNICODE Zeichen kleiner Hex 21. WS trimmen, entfernen oder normalisieren (mehrere aufeinanderfolgende WS zu einem Space zusammenziehen). Und das schnell.

Als besonderes Schmankerl gibts außerdem noch einen sehr schnellen Ersatz für die VB Replace-Funktion. Das Original stammt von Olaf Schmidt und hat sämtliche Preise im VB Speed contest abgeräumt. Wer Olaf kennt und schon mal (wie immer erstklassigen) Code von ihm zu sehen bekommen hat, wird sich darüber freuen, daß ich mich bemüht habe, ihn etwas leserlicher zu gestalten und mit ausführlichen Kommentaren zu versehen :-).

Download Strings V1.5

ukPopup - Forms in popup oder dropdown Forms verwandeln
VB6 Usercontrol mit Source und Tester

Das UserControl erledigt automatisch die Positionierung, die Anzeige und das Schließen einer Form als Dropdown oder Popup Form. Einfach das UserControl auf eine Form ziehen, eine Zeile Code und das wars. Der Vorteil gegenüber anderen Lösungen, die Controls benutzen: alle Key Events und Mouse Events funktionieren wie gewohnt.

Download ukPopup

Cryptography - kryptographische Helferklassen
VB6 Klassen mit Source

Für einige alltägliche kryptographische Aufgaben hier ein paar Helferklassen. Die Sammlung wird in Zukunft um weitere Helferklassen ergänzt werden. Momentan realisiert sind:

Alle Klassen sind auf Korrektheit überprüft (u.a. anhand öffentlicher Testvektoren), auf maximale Geschwindigkeit getrimmt und bieten über die Basisfunktionalität hinausgehenden Zusatznutzen. So kann CBase64 auch in umgebenden Text eingebettete Base64 Kodierungen (wie zB in Emails) parsen, diese zeilenweise formatiert ausgeben (aufbereitet zur direkten Einbettung in Emails) und beim Dekodieren ungültiges Format (ungültige Zeichen, falsche Längen, falsches Padding) erkennen. Die Implementierung von CRC32 kann auch additiv aus Teilstücken den Hashwert bilden. CCipher erzeugt auf Wunsch GUIDs und verwendet diese als Schlüssel (mit vorgebbarer Länge), kann leeren Vorlauf erzeugen, kann ganzzahlige 1-8 Byte Zufallszahlen liefern und kann wahlweise zusätzlich ein OneTimePad verwenden. Vom von CCipher verwendeten ARC4 Algorithmus wird allgemein angenommen, daß er die gleichen Resultate wie der bekannte RC4 Algorithmus liefert.

Alle Klassen benutzen teilweise Funktionalität der beiden ebenfalls beiliegenden Module MCommon und MVarInfo. MCommon implementiert diverse Prüfungen, die von den Klassen verwendet werden. Diese Prüfungen prüfen, ob bestimmte Voraussetzungen erfüllt sind, die diverse Klassenmethoden von den übergebenen Parametern erwarten. Meistens wird geprüft, ob übergebene Arrayparameter den Anforderungen (wie zB. 1-dimensional, Nullbasierend, mindestens ein Element enthaltend etc) entsprechen.

MVarInfo implementiert eine einzige Funktion gGetVarInfo, die als Parameter fast jeden beliebigen Variablentyp akzeptiert (Ausnahmen sind Arrays mit Strings fester Länge als Elementtyp). gGetVarInfo analysiert den übergebenen Wert und liefert in einem UDT Informationen über den Wert zurück. Diese Informationen werden von den Funktionen in MCommon verwendet, um diverse Prüfungen durchzuführen.

Download Cryptography

CZoom - zoom me up, Scotty! Update!
VB6 Klasse mit Source und Tester

Eine Klasse CZoom, die Bildschirmausschnitte relativ zur aktuellen Mausposition auf Forms, Pictureboxen oder Usercontrols zoomed. Die beiliegende Testapplikation ist gut als Bildschirmlupe zu gebrauchen. Das damit realisierte "Vergrößerungsglas" ist sehr schnell und ermöglicht hohe Vergrößerungen und die Vergrößerung auch großer Bildschirmausschnitte. Die Parameter der Testapplikation sind per Rechtsklick über ein Kontextmenue einstellbar.

In der ersten Version 1.0 konnte unter sehr seltenen Umständen ein Speicherleck entstehen. Der Bugfix von Version 1.1 behebt das. V1.2 hat weitere Bugfixes und eine blinkende Cursoranzeige.

Download CZoom V1.2

CFileSearch - Verzeichnisse durchstöbern, Dateien suchen
VB6 Klasse mit Source und Tester

CFileSearch durchsucht Verzeichnisse, beginnend von einem Startverzeichnis (das kann auch das Wurzelverzeichnis eines Laufwerkes sein). Es liest alle Einträge in einem Verzeichnis (Dateien und Unterverzeichnisse, auch verborgene oder Systemverzeichnisse und -Dateien). Dann speichert es die Daten der Unterverzeichnisse (Name, Attribute, Zeiten und mehr). Die Daten (Name, Größe, Attribute und Zeiten) der Dateien in dem zu durchsuchenden Verzeichnis werden ebenfalls gespeichert, wenn der Dateiname zu einem vorgebbaren Filterausdruck paßt. Eine solche Datei könnte man auch als "gefunden" attributieren.

Verzeichnisse werden rekursiv durchsucht, es wird also eine rekursive Dateisuche durchgeführt. Die Suchtiefe kann begrenzt werden. So kann CFileSearch angewiesen werden, alle Unterverzeichnisse auf allen dem Startverzeichnis untergeordneten Hierarchieebenen zu durchsuchen, oder nur die unmittelbaren Unterverzeichnisse des Startverzeichnisses oder auch die Unterverzeichnisse der Unterverzeichnisse des Startverzeichnisses und so fort.

Nach einer Suche stehen die Daten der Verzeichnisse und der gefundenen Dateien im Speicher zur weiteren Bearbeitung zur Verfügung. Zusätzlich können diese Daten gespeichert und wieder zurückgelesen werden. Datei- und Verzeichnisnamen können nach mehreren vorgebbaren Kriterien sortiert werden. Ebenso können die Verzeichnisse hierarchisch sortiert werden.

CFileSearch benutzt die einschlägigen Windows File Apis (FindFirstFile, FindNextFile und FindClose). Stehen auf dem System, auf dem CFileSearch abläuft, die Unicode-Versionen zur Verfügung, können diese verwendet werden. Das beschleunigt den Suchvorgang und ermöglicht die Verwendung von langen (bis zu rund 32000 Zeichen) Pfaden und Namen. Ansonsten können immer die ANSI-Versionen verwendet werden (hier sind Namen und Pfadlängen auf weniger als 260 Zeichen beschränkt). Auf Wunsch kann die Klasse während einer Suche Events auslösen. Diese Events werden ausgelöst, bevor ein Verzeichnis durchsucht wird und auch nachdem eine Datei gefunden wurde. In der Eventprozedur stehen dem User alle Daten über das Verzeichnis oder die gefundene Datei zur Verfügung. Der User kann dann entscheiden, das Durchsuchen des Verzeichnisses zu unterbinden oder die gefundene Datei aus der Auflistung der gefundenen Dateien zu löschen.

Für die Suche nach Dateien kann ein Dateinamenfilter gesetzt werden. Die Daten derjenigen Dateien, deren Name das Filterkriterium erfüllt, werden gesammelt, die Daten der anderen Dateien werden nicht gesammelt. Zwei spezielle Filter sind verfügbar. Der eine bewirkt, daß jede Datei gefunden wird, der andere bewirkt, daß keine Datei gefunden wird. Es können gleichzeitig mehrere Filterkriterien verwendet werden. Dann wird eine Datei aufgenommen, wenn sie mindestens eines der Filterkriterien erfüllt. Ebenso kann der ganze Filtervorgang umgekehrt werden. Dann werden nur Dateien aufgenommen, die den Filterkriterien nicht entsprechen. Der Filtervorgang beruht auf dem Vergleich des Dateinamens mit dem Filterkriterium unter Verwendung des Like Operators von Visual Basic. Damit ist bei der Erstellung eines Filterkriteriums die Like Syntax einzuhalten. Diese ermöglicht ausdrucksstarke Filterausdrücke.

CFileSearch ist geschwindigkeitsoptimiert und deshalb sehr schnell, egal ob es in der IDE oder kompiliert läuft. Die kompilierte Version kann weiter beschleunigt werden, wenn man zu "native code" kompiliert und dabei alle Geschwindigkeitsoptionen des Compilers nutzt. Sehen Sie sich dazu die Optionen im Kompilieren-Tab der Projekteigenschaften der Testapplikation an. CFileSearch ist wesentlich schneller als alle vergleichbaren Lösungen, die zum Durchsuchen der Verzeichnisse die VB Dir Funktion oder das FileSystemObjekt benutzen.

Zum Beispiel dauert eine Komplettsuche des Laufwerks C auf meinem alten System (WIN2K, PIII mit 550 MHz, 256 MB Ram) ca. 1.5 sec (im zweiten Durchlauf, nachdem im ersten Durchlauf Windows die Suche im Cache hat). Der Screenshot oben zeigt die Ergebnisse dieser Suche. C hat 2001 Verzeichnisse, alle wurden durchsucht. Bei einem Verzeichnis ("System Volume Information", ein Systemverzeichnis) wurde der Zugriff verweigert. 18240 Dateien wurden in 1293 Verzeichnissen gefunden. Da nach allen Dateien gesucht wurde, ist die Anzahl der gefundenen Dateien gleich groß der Anzahl der existierenden Dateien.

Im Downloadarchiv finden sich neben der Klasse auch eine Applikation zum Testen der Klasse und eine Verzeichnishierarchie zum Testen. Diese enthält Unterordner und Dateien. Alle Dateien sind leer und beanspruchen somit nur minimalen Platz auf dem Speichermedium.

Einige denkbare Anwendungsmöglichkeiten dieser Klasse wären:

Abhängigkeiten: CFileSearch benutzt einige Windows APis, die aber auf allen 32 Bit Windows Systemen (WIN NT und höher bzw. WIN95 und höher) vorhanden sein sollten.

Download CFileSearch V1.1