Thomas Kramer

IT-COW | Delphi

Projekt: Emulator-Frontend/(Bilder-)Datenbank

By Administrator at Mai 06, 2010 20:16
Filed Under: Delphi, Projekte

Ein altes Projekt von mir möchte ich hier einmal vorstellen. Es geht dabei um ein Frontend für Emulatoren, mit dem Spiele aus diesem Programm über einen Emulator aufgerufen werden können.

 

Weiterhin ist das System eine frei definierbare Datenbank mit speziellem Fokus auf Bilderverwaltung. Das Programm habe ich damals in Delphi 7 Professional programmiert und kann sowohl lokal mit der Datenbank Firebird Embedded als auch als Client/Server-Anwendung und der Vollversion von Firebird verwendet werden.

 

Aussehen

 

Die Anwendung benutzt ein MDI-Interface, dies ist die Bilderansicht sofern das Programm eingerichtet und ein Spielebrowser-Fenster geöffnet wurde:

 

 

 

 

Alternativ gibt es im Spielebrowser eine tabellarische Ansicht, diese sieht so aus:

 

 

 

 

Die Bilderansicht kann natürlich konfiguriert werden, wieviele Bilder horizontal und wieviele vertikal dargestellt und in welcher Auflösung diese Bilder für die Ansicht geladen werden sollen (volle/halbe/viertel) - in voller Auflösung zu laden wäre natürlich langsam und unzweckmäßig.

 

Bedienung

 

Das Programm hat ein seitliches Panel, welches auf den zwei vorangegangenen Bildern ausgeblendet war. Man kann nun im Konfigurationsdialog einstellen, wieviele Bilder zusätzlich horizontal eingeblendet werden - für den Fall, das das Panel ausgeblendet wird. Wenn ein Spiel deselektiert wird, wird das Panel wieder automatisch weggeblendet. Bei ausgeblendetem Panel ist ein langer dünner (vertikaler) Strich ganz rechts (oder links) zu sehen - bei Klick auf diesen wird das Panel wieder eingeblendet.

 

Sobald das Panel sichtbar ist, kann es auch per Drag and Drop auf die jeweils andere Seite verschoben werden. Aber zunächst einmal ein Bild des Konfigurationsdialogs:

 

 

 

 

Das Panel kann nur eingeblendet werden, wenn ein Spiel ausgewählt wurde. Das passiert in der tabellarischen Ansicht des Spielebrowsers über einen Klick auf die Zeile im Grid oder in der Bilder-Ansicht über einen Klick auf die Titelzeile eines Bildes, welches über jedem Bild separat eingeblendet wird.

 

Sobald man auf diese Titelzeile klickt umgibt ein blauer Rahmen dieses Bild, welches signalisiert das dieses Spiel ausgewählt wurde. Dieser Rahmen kann auch mit den Cursor-Tasten auf ein anderes Bild verschoben werden, wodurch sich das aktuell ausgewählte Spiel ändert, da nur ein Bild pro Spiel in dieser Ansicht angezeigt werden kann. Das wievielte Bild eines jeden Spieles eingeblendet werden soll gehört zu den Filter-Optionen und ist ganz oben links im folgenden Fenster zu sehen. Wenn man diese Zahl verringert/erhöht wird die Bilderansicht sofort aktualisiert.

 

Außerdem ist im folgenden Bild auch endlich das Panel zu sehen:

 

 

 

 

In der Titelzeile des Panels steht der Name des aktuell ausgewählten Spieles, über diese Titelzeile kann das Panel auch per Drag and Drop auf die andere Seite verschoben werden. Das Panel stellt grundsätzlich alle Daten eines Spiels dar, zunächst einmal ein Bild - blättern möglich - und alle benutzerdefinierten Eingabefelder, die auf diesem Panel frei platziert werden können.

 

Datenbank

 

Mein Programm ist auch eine frei definierbare Datenbank, es können belieblig viele Eingabefelder angelegt und über den Konfigurationsdialog frei auf diesem Panel platziert werden - auf Wunsch mit Verankerung und auf beliebig vielen Karteikarten (vertikal angeordnet).

 

Delphi mit seinen Standard-Verankerungs-Routinen hatte mich hier damals etwas genervt, weil die Rechts-Verankerung von dynamisch generierten Steuerelementen damit nicht vernünftig funktionierte. So ragten einzelne Steuerelemente auch einmal gern über den rechten Rand hinaus. Daher hatte ich diese Standard-Verankerung umgangen und einen Workaround programmiert, mit der die Steuerelemente bei einer Größenveränderung des Fensters automatisch angepasst und positioniert werden. So funktioniert die Verankerung der Steuerelemente zuverlässig.

 

Wenn das Panel ausgeblendet ist, können die Daten zu einem Spiel auch eingesehen werden indem man auf den i-Button über einem Bild klickt - dort können die Daten aber nicht bearbeitet werden. Der i-Button wird nur eingeblendet, wenn Eingabedaten zu einem Spiel vorliegen.

 

 

 

 

Für die frei definierbaren Eingabefelder werden übrigens keine DDL-Befehle ausgeführt, es ist keine Änderung des Datenbankschemas nötig. Die Eingabefelder können natürlich nur in der Server-Version des Programms angelegt werden - die Unterscheidung zwischen den Programmversionen geschieht übrigens über Compiler-Direktiven. Die Standalone-Version ist als ZIP-Archiv oder auch als Installer (InnoSetup) verfügbar.

 

Es gibt folgende Arten von Eingabefeldern, die angelegt werden können:

 

  • Boolean
  • Combobox
  • Textbox
  • Link
  • eMail
  • RichEdit
  • Integer
  • Decimal
  • Float
  • Datum

 

Daten in diese Felder zu einem Spiel können im Panel eingegeben und über den Button Übernehmen gespeichert werden. Wenn ein anderes Spiel ausgewählt wird, werden automatisch dessen Eingabedaten im Panel in den Eingabefeldern angezeigt.

 

Die Felder eMail und Link haben Zusatzfunktionen, bei ersterem wird bei einem Doppelklick in das Feld ein eMail-Verfassen-Fenster zu dieser eMail-Adresse geöffnet, mit dem Standard-eMail-Programm - bei dem anderen Typ geschieht ähnliches analog zu einer Internet-Adresse.

 

Folgend der Konfigurationsdialog, über welchen die Eingabefelder festgelegt werden - aus der Server-Version über den Menüpunkt Konfiguration/Server:

 

 

 

Damit dieser Dialog aufgerufen werden kann ist nicht nur die Server-Version nötig, sondern es muss auch eine lokale Datenbankverbindung hergestellt sein. Das Programm ist wie gesagt nicht auf eine lokale Datenbankverbindung mit Firebird Embedded angewiesen, sondern - je nach Version - kann auch eine Verbindung zu einem entfernten Firebird-Datenbank-Server hergestellt werden.

 

Dazu muss natürlich die IP-Adresse oder der Servername des Servers im Konfigurationsdialog festgelegt werden. Übrigens können mit der Client-Version des Programms zwei Datenbanken separat festgelegt werden, eine lokale und eine entfernt gelegene von einem Server - im Programm kann anschließend über einen Menüpunkt zwischen beiden Datenbanken hin- und hergeschaltet werden. Es besteht auch die Möglichkeit Daten zwischen diesen beiden Datenbanken zu kopieren, aber nur als Ganzes.

 

Desweiteren kann eine Datenbank auch als ReadOnly eingebunden werden - wichtig für die Verbindung zu einem externen Server oder wenn das Programm von einer CD aufgerufen wird. Wenn die Datenbankdatei selbst als schreibgeschützt markiert ist - mit Firebird und den passenden SQL-Tools wie den EMS SQL Manager ist das möglich - wird die Datenbank automatisch als ReadOnly eingebunden.

 

Als Datenbank-Zugriffskomponenten werden die IBDAC-Komponenten von devart (ehemals Core Lab) benutzt, welche sehr schnell sind.

 

Filter/Suchen-Funktion

 

Über den Editor-Button ist der Filter-Dialog des Programms zu erreichen. Wie bereits erwähnt gibt es Standard-Eingabefelder sowie benutzerdefinierte Eingabefelder - Felder des 1. Typs sind über Kürzel mit folgendem Namens-Präfix anzusprechen:

 

FeldA


benutzerdefinierte Eingabefelder besitzen dagegen folgendes Namens-Präfix:

 

FeldB

 

- jeweils gefolgt von einer Nummer.

 

Die Bedingungen werden anschließend mit den logischen Operatoren AND oder OR verknüpft - richtige Klammernsetzung ist zu beachten. Die Abfragesyntax erinnerte mich diese Tage übrigens an die von Winamp - bei den benutzerdefinierten Ansichten, wenn man den Abfragegenerator nicht benutzt.

 

 

 

 

Anschließend einfach auf OK klicken und die Abfrage wird ausgeführt und das Fenster geschlossen.

 

Screenshot-Generator

 

Die wichtigste Funktion im Programm ist für mich folgende: Nachdem ein Spiel aus dem Programm heraus gestartet wurde kann während des Spielens automatisch (timergesteuert) oder über einen Hotkey ein Screenshot eines Spiels erstellt und on-the-fly in die Firebird-Datenbank importiert werden, die Ansicht wird darauf sofort aktualisiert. Das geschieht über einen Stream, es werden keine temporären Dateien angelegt. Die Optionen des Screenshot-Generators sehen folgendermaßen aus:

 

 

 

 

Wie man sieht kann die Auflösung dabei automatisch umgerechnet werden, dazu werden Funktionen der Windows-API benutzt. Bei der Umrechnung bleibt übrigens immer das Seitenverhältnis eines Screenshots erhalten, die Bilder können nicht verzerrt werden. Importiert werden die Bilder als JPEG-Dateien, was Platz spart.

 

Die Bilder werden nicht in der vollen Auflösung geladen (einstellbar) - sondern erst mit einem Klick auf ein Bild wird eine vergrößerte Ansicht in einem neuen Fenster geöffnet, dieses zeigt dann das Bild in der vollen Auflösung an. Mein Programm hatte ich damals speziell für die Geschwindigkeit beim Laden von Bildern optimiert.

 

Embedded Firefox/Internet Explorer-Control

 

Das Programm besitzt wie bereits erwähnt ein MDI-Interface, über den Menüpunkt Fenster können beliebig viele neue Spiele- oder Internetbrowser-Fenster geöffnet sowie zwischen ihnen umgeschaltet werden. Dafür unterstützt mein Programm sowohl den Internet Explorer als auch das Mozilla-ActiveX-Control, welches separat installiert werden muss wenn die Firefox-Integration gewünscht ist.

 

Laut der Webseite des Projekts ist dieses Control immer noch auf dem damaligen Stand, scheint also nicht mehr weiterentwickelt zu werden. Auf meinem Entwicklungsrechner damals hatte das Mozilla-ActiveX-Control einwandfrei funktioniert, wie ich feststellen musste ist unter Vista64 dem leider nicht mehr so - aber der Internet Explorer ist auch standardmäßig eingestellt, so das das kein Problem darstellt.

 

Folgend ein Bild mit der Darstellung des integrierten Webbrowsers (übrigens mit Tab-Unterstützung!):

 

 

 

Das Programm bindet beim Start automatisch die Internet-Favoriten folgender Webbrowser ein, sofern sie auf dem System installiert sind:

 

  • Internet Explorer
  • Firefox
  • Opera

 

Die Routinen dazu habe ich damals natürlich selbst programmiert. Leider funktioniert das unter Vista64 nicht mehr - er bindet keine Favoriten mehr ein, aber es erscheint auch keine Fehlermeldung. Daneben gibt es übrigens auch Spiele-Favoriten, über diese kann man schneller zu einem bestimmten Spiel gelangen.

 

Das eingebaute Session-Management (deaktivierbar) stellt beim nächsten Start die letzte Sitzung automatisch wieder her.

 

Fazit: Leider funktionieren ein paar Routinen unter Vista64 nicht mehr hundertprozentig, aber es läuft noch weitgehend einwandfrei. Hauptsächlich benutzte ich das Programm als Bilder-Datenbank und Spiele-Starter, wobei ich den Screenshot-Generator eingebaut hatte weil ich keine Screenshot-Packs wie bei anderen Frontends herunterladen wollte.

 

In der Gesamtheit dürfte mein Programm immer noch einmalig sein, jedoch kamen die paar Benutzer denen ich das Programm geschickt hatte nicht damit klar weil es für sie zu kompliziert war - was sicher auch an einer Überfrachtung von Funktionen liegt. Heute würde ich aber nicht mehr soviel Zeit in dieses Programm investieren, sondern mich auf andere Projekte konzentrieren. Das Programm habe ich - abgesehen von den Fremdkomponenten - vollständig alleine programmiert.

 

Intern müsste sicherlich einiges überarbeitet werden - das Programm hatte ich vor über 7 Jahren angefangen, und es ist schon vor einiger Zeit eingestellt worden.

 

Die Downloads finden sich hier unten, aber eins möchte ich noch vorausschicken: wer meint das es sich hierbei um ein fertiges Paket handelt um direkt losspielen zu können, irrt sich. Das Programm kann die bereits vorhandenen Spiele einscannen, anschließend kann man Daten von Hand zu den Spielen eingeben - Ausnahme sind wie gesagt Screenshots, diese kommen automatisch hinein.

 

Anders wäre es wenn es eine öffentliche Datenbank mit Spieldaten gäbe - schließlich habe ich auch eine Client- und eine Server-Version erstellt - aber das ist nicht der Fall.

 

Verwendete Fremdkomponenten:

 

  • IBDAC und UIB
  • MozillaControl
  • HotkeyManager
  • Graphics32
  • CoolTrayIcon
  • XPMenu
  • SynEdit
  • TNTUnicodeControls
  • Toolbar2000

 

Projektstatus: eingestellt.

 

Downloads:


Standalone-Version als ZIP-Archiv:

Frontend StandAlone.zip (4,26 mb)

Standalone-Version als Installer:

setup.exe (3,22 mb)

Client-Version:

Frontend Client.exe (3,21 mb)

Server-Version:

Frontend Server.exe (3,21 mb)

 

Die Client- und Server-Versionen benötigen eine richtige Installation von Firebird, die Standalone-Version benutzt die beigefügten Dateien von Firebird Embedded.

 

Ergänzung 12.11.2011: Mittlerweile kann man auch den Chromium-Browser in Delphi-Anwendungen einbetten, man ist demnach nicht mehr unbedingt auf das Mozilla-ActiveX-Control angewiesen wenn der IE als Engine gemieden werden soll. Link.

 

Update 17.03.2011: Erklärung zur Filter-Abfragesprache sowie Gliederung hinzugefügt, Formulierungen überarbeitet, Schreibfehler beseitigt sowie Abschnitte verschoben um den Lesefluss zu verbessern.

 

Monats-Liste