In unserem Ersatzteilkatalog SPCat ist die Navigation in der
Hierarchie der Ersatzteile sehr wichtig. Unter anderem besteht die
Möglichkeit über graphische Links in einer Baugruppenzeichnung zu
entsprechenden Unterteilen zu springen. Diese Links in der
Zeichnung werden zur Laufzeit in die Graphik gezeichnet.
Der aktuelle SPCat 6.5 ist mit Visual Foxpro 8 programmiert. Bis zu
dieser Version ist Visual Foxpro sehr limitiert in den Möglichkeiten zur
Modifikation und Darstellung von Graphiken. Deswegen wurde die
Darstellung der verlinkten Zeichnungen über eine ActiveX Komponente
realisiert. Diese Komponente ist in Visual Basic 6 programmiert.
Mit Visual Foxpro 9 ist der Zugriff auf GDI+, der Windows Graphik
Schnittstelle, sinnvoll möglich. Damit können modernere Bildformate
geladen werden, unter anderem auch PNG Bilder. Alle grundlegenden
graphischen Funktionen stehen zur Verfügung. Es ist aber nicht einfach
möglich das Ergebnis dieser Manipulationen zusammen mit anderen Visual
Foxpro Bildschirmelement darzustellen. Zu grundlegend anders ist die
Art, wie Visual Foxpro seine Ausgabe erzeugt.
Craig Boyd hat einen sehr hilfreichen Artikel "
GDI+ on VFP 9 Forms: Solving the Paint Problem"
in FoxTalk 2.0 veröffentlicht. Die Lösung besteht im Wesentlichen
darin, die Windows Ereignisse abzufangen und mit GDI+ das erzeugte Bild
innerhalb von Visual Foxpro selbst zu zeichnen. Der Nachteil ist, daß
in häufig aufgerufenen Ereignissen die eigene Logik zusätzlich
mitläuft. Deswegen wird der zu zeichnenende Ausschnitt des Bildes mit
allen Links zwischengespeichert und nur dieses Ergebnis gezeichnet
(double buffer). Lediglich sich ändernde Teile, wie der Hovereffekt und
Tooltips werden neu erzeugt.
Der Vorteil liegt darin, daß man die volle Kontrolle über die Ausgabe
hat und Effekte möglich sind, die bisher weder Visual Foxpro noch
reines Visual Basic 6 konnte.
Das Ergebnis sieht besser als die bisherige Lösung aus und eine weitere
externe Abhängigkeit ist aus unserem elektronischen Ersatzteilkatalog verbannt. Ich bin jedesmal
froh, wenn ich VB 6 Ballast abwerfen kann.