04.08.2013 Aufrufe

Integration der DBI Controls aus Sedna in VFP am ... - dFPUG-Portal

Integration der DBI Controls aus Sedna in VFP am ... - dFPUG-Portal

Integration der DBI Controls aus Sedna in VFP am ... - dFPUG-Portal

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Session D-<strong>DBI</strong><br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong><br />

<strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> <strong>am</strong> Beispiel von<br />

VFX<br />

Uwe Habermann<br />

E<strong>in</strong>führung<br />

Mit <strong>Sedna</strong> werden acht ActiveX Steuerelemente von <strong>DBI</strong> geliefert. Hiermit lassen sich gut <strong>aus</strong>sehende und<br />

leistungsfähige Elemente <strong>der</strong> Benutzeroberfläche aufbauen. Microsoft Outlook empf<strong>in</strong>den viele Benutzer als<br />

angenehm zu bedienen. Wie schön wäre es, e<strong>in</strong>e „Office Bar“ <strong>in</strong> eigene Anwendungen <strong>in</strong>tegrieren zu können?<br />

Dazu e<strong>in</strong> Menü und e<strong>in</strong>e Symbolleiste wie <strong>in</strong> Office 2003 und perfekte E<strong>in</strong>gabe von Datums- und Zeitwerten. In<br />

dieser Session wird gezeigt wie es geht. So bekommt jede <strong>VFP</strong> Anwendung e<strong>in</strong> neues und mo<strong>der</strong>nes Look &<br />

Feel.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 1


Übersicht <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong><br />

Schon seit e<strong>in</strong>iger Zeit s<strong>in</strong>d von <strong>DBI</strong> Technologies die „Studio <strong>Controls</strong> R3“ erhältlich. Bei den Studio <strong>Controls</strong><br />

handelt es sich um e<strong>in</strong> umfangreiches Paket von ActiveX Steuerelementen, die <strong>in</strong> Projekte verschiedener<br />

Progr<strong>am</strong>miersprachen e<strong>in</strong>gebunden werden können.<br />

Für <strong>Sedna</strong> stehen acht <strong>der</strong> ActiveX Steuerelemente <strong>aus</strong> den Studio <strong>Controls</strong> kostenlos zur Verfügung. Diese<br />

ActiveX Steuerelemente mit dem N<strong>am</strong>en „<strong>DBI</strong> <strong>Sedna</strong> Components“ heruntergeladen werden und dürfen mit<br />

<strong>VFP</strong> 9 SP 2 Anwendungen an Endkunden weitergegeben werden. Hier <strong>der</strong> Download-L<strong>in</strong>k:<br />

http://www.dbi-tech.com/Special_Offers_<strong>Sedna</strong>Components.asp<br />

Nach <strong>der</strong> Installation müssen die <strong>DBI</strong> <strong>Sedna</strong> Components mit dem <strong>DBI</strong> License Manager lizensiert werden. Zur<br />

Lizensierung muss e<strong>in</strong>e E-Mailadresse angegeben werden. Der Aktivierungsschlüssel wird sofort per E-Mail<br />

zugestellt.<br />

Ohne Aktivierung ist e<strong>in</strong>e Verwendung <strong>der</strong> <strong>DBI</strong> <strong>Sedna</strong> Components <strong>in</strong> <strong>der</strong> Entwicklungsumgebung von <strong>VFP</strong><br />

nicht möglich.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

2 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Mit diesen acht ActiveX Steuerelementen werden die Wünsche <strong>der</strong> <strong>VFP</strong> Progr<strong>am</strong>mierer wahr. Endlich können<br />

<strong>VFP</strong> Anwendungen mit e<strong>in</strong>er mo<strong>der</strong>nen Benutzeroberfläche versehen werden.<br />

ctContact<br />

Mit diesem ActiveX Steuerelement wird e<strong>in</strong>e Art mehrspaltiges Grid mit e<strong>in</strong>er dyn<strong>am</strong>ischen Zeilenhöhe<br />

bereitgestellt. Es besteht die Möglichkeit die E<strong>in</strong>träge zu bearbeiten. E<strong>in</strong>e Kontaktliste im Stil von Microsoft<br />

Outlook ist e<strong>in</strong>e Anwendungsmöglichkeit.<br />

ctDays<br />

Mit diesem ActiveX Steuerelement steht uns e<strong>in</strong> leistungsfähiger Kalen<strong>der</strong> <strong>in</strong> e<strong>in</strong>er Tagesansicht und vielen<br />

Darstellungsmöglichkeiten zur Verfügung.<br />

ctDEdit<br />

Dieses ActiveX Steuerelement ermöglicht die E<strong>in</strong>gabe von Datums- und Zeitwerten.<br />

ctDropMenu<br />

E<strong>in</strong> kontextsensitives Menü mit dem Aussehen von Microsoft Office 2003 Anwendungen wird durch dieses<br />

ActiveX Steuerelement bereitgestellt. Jedem Menüe<strong>in</strong>trag kann e<strong>in</strong> Icon zugeordnet werden.<br />

ctFr<strong>am</strong>e<br />

Dieses ActiveX Steuerelement ist e<strong>in</strong> Conta<strong>in</strong>er Steuerelement. Mit ctFr<strong>am</strong>e können sehr schöne H<strong>in</strong>tergründe<br />

gestaltet werden.<br />

ctListBar<br />

Dieses ActiveX Steuerelement er<strong>in</strong>nert an Microsoft Outlook o<strong>der</strong> an die <strong>aus</strong> <strong>VFP</strong> bekannte Toolbox. In e<strong>in</strong>em<br />

Conta<strong>in</strong>er können Gruppen geöffnet und geschlossen werden. Jede Gruppe kann E<strong>in</strong>träge enthalten. Beim Klick<br />

auf e<strong>in</strong>en E<strong>in</strong>trag wird e<strong>in</strong>e Aktion <strong>aus</strong>gelöst. Dieses Steuerelement bietet sich zum Öffnen von Formularen an.<br />

Es besteht die Möglichkeit mit mehreren Spalten zu arbeiten.<br />

ctToolBar<br />

Dieses ActiveX Steuerelement ist universell für die Anzeige von Menüs und Symbolleisten e<strong>in</strong>setzbar. Das<br />

Aussehen kann auf e<strong>in</strong>fache Weise so e<strong>in</strong>gestellt werden, dass Menü und Symbolleiste den Anwendungen <strong>aus</strong><br />

Microsoft Office 2003 ähneln.<br />

ctTray<br />

Dieses ActiveX Steuerelement bietet dem Entwickler die Möglichkeit e<strong>in</strong>e Anwendung mit e<strong>in</strong>em Icon im<br />

W<strong>in</strong>dows System Tray zu verstecken.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 3


Die ActiveX Steuerelemente im E<strong>in</strong>zelnen<br />

ctContact – Kontaktverwaltung<br />

Das Steuerelement ctContact wurde speziell für die Verwaltung von Kontaktdaten entwickelt. In diesem<br />

Steuerelement kann e<strong>in</strong>e Liste von Datensätzen <strong>in</strong> e<strong>in</strong>em Kartenformat angezeigt werden. Jede Karte hat dabei<br />

e<strong>in</strong>e variable Größe. Der Anwen<strong>der</strong> kann die Daten <strong>in</strong> diesem Steuerelement bearbeiten.<br />

Es kann e<strong>in</strong>gestellt werden, dass nur Fel<strong>der</strong> mit Inhalt auf e<strong>in</strong>er Karte angezeigt werden. Dadurch erhalten die<br />

Karten e<strong>in</strong>e dyn<strong>am</strong>ische Länge.<br />

Mit e<strong>in</strong>er Suchmethode kann e<strong>in</strong> Datensatz gefunden werden, <strong>der</strong> e<strong>in</strong>en bestimmten Text enthält. Die Methode<br />

positioniert die Ansicht so, dass <strong>der</strong> gefundene Datensatz <strong>in</strong> den sichtbaren Bereich kommt.<br />

Mit e<strong>in</strong>em M<strong>aus</strong>klick auf e<strong>in</strong>en E<strong>in</strong>trag kann <strong>der</strong> Anwen<strong>der</strong> mit <strong>der</strong> Bearbeitung beg<strong>in</strong>nen. Bei <strong>der</strong> Bearbeitung<br />

wird e<strong>in</strong> Ereignis <strong>aus</strong>gelöst.<br />

Für die Darstellung <strong>der</strong> Kontaktansicht gibt es vielfältige E<strong>in</strong>stellmöglichkeiten. Es können verschiedene Farben<br />

und Füllstile gewählt werden. Diese E<strong>in</strong>stellungen können für Überschriften und den Kartenbereich unabhängig<br />

vone<strong>in</strong>an<strong>der</strong> gemacht werden. Als Füllstil s<strong>in</strong>d auch Farbverläufe <strong>in</strong> allen Richtungen möglich.<br />

Um das Steuerelement progr<strong>am</strong>matisch mit Daten zu füllen, müssen e<strong>in</strong>ige Schritte durchgeführt werden.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

4 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Zunächst müssen mit <strong>der</strong> Methode AddTitle die anzuzeigenden Fel<strong>der</strong> def<strong>in</strong>iert werden. Diese Methode<br />

bekommt als Par<strong>am</strong>eter die anzuzeigende Bezeichnung für das Feld. Die folgenden Code Zeilen entsprechen den<br />

E<strong>in</strong>stellungen für den Screesnhot von oben.<br />

ctContact1.AddTitle "Bus<strong>in</strong>ess :"<br />

ctContact1.AddTitle "Home :"<br />

ctContact1.AddTitle "Mobile :"<br />

ctContact1.AddTitle "E-Mail :"<br />

Mit <strong>der</strong> Methode AddHea<strong>der</strong> wird e<strong>in</strong> neuer Datensatz h<strong>in</strong>zugefügt und für diesen Datensatz wird die<br />

Überschrift e<strong>in</strong>getragen. Rückgabewert ist die ID für diesen neuen Datensatz<br />

nIndex = ctContact1.AddHea<strong>der</strong>("Gluck, Craig")<br />

Mit <strong>der</strong> Methode ItemText werden die Daten für e<strong>in</strong>en Datensatz h<strong>in</strong>zugefügt. Als Par<strong>am</strong>eter muss <strong>der</strong> Index für<br />

den Datensatz sowie die Nummer des Feldes übergeben werden.<br />

ctContact1.ItemText(nIndex, 1) = "736-1174"<br />

ctContact1.ItemText(nIndex, 2) = "553-2217"<br />

ctContact1.ItemText(nIndex, 3) = "465-4756"<br />

Gen<strong>aus</strong>o werden Daten für weitere Datensätze h<strong>in</strong>zugefügt. Es muss nicht jedes Feld mit Daten gefüllt werden.<br />

Dadurch wird e<strong>in</strong>e dyn<strong>am</strong>ische Zellhöhe erreicht.<br />

nIndex = ctContact1.AddHea<strong>der</strong>("Shead, Alan")<br />

ctContact1.ItemText(nIndex, 2) = "365-1174"<br />

ctDays – Kalen<strong>der</strong> Tagesansicht<br />

Das ActiveX Steuerelement ctDays stellt e<strong>in</strong>en grafischen Kalen<strong>der</strong> dar. Die Anzeige ist ähnlich zur Anzeige <strong>in</strong><br />

Microsoft Outlook. Es ist die Anzeige von Term<strong>in</strong> für e<strong>in</strong>en Tag möglich. Dies entspricht <strong>der</strong> Tagesansicht von<br />

Outlook. E<strong>in</strong>e Wochen- o<strong>der</strong> Monatsansicht ist mit an<strong>der</strong>en ActiveX Steuerelementen von <strong>DBI</strong> möglich, die<br />

jedoch nicht mit <strong>Sedna</strong> geliefert werden. Es kann e<strong>in</strong>e Zeitachse angezeigt werden, die grafisch die Term<strong>in</strong>e<br />

e<strong>in</strong>es Tages symbolisiert.<br />

Neue Term<strong>in</strong>e können durch e<strong>in</strong>en M<strong>aus</strong>klick auf die gewünschte Zeit angelegt werden. Zu jedem Term<strong>in</strong> kann<br />

e<strong>in</strong> Beschreibungstext e<strong>in</strong>gegeben werden.<br />

Bei e<strong>in</strong>em M<strong>aus</strong>klick auf e<strong>in</strong>en Term<strong>in</strong>e<strong>in</strong>trag, kann dieser direkt im ActiveX Steuerelement bearbeitet werden.<br />

Term<strong>in</strong>e können auch progr<strong>am</strong>matisch angelegt, geän<strong>der</strong>t o<strong>der</strong> gelöscht werden.<br />

Standardmäßig wird dieses Steuerelement im W<strong>in</strong>dows XP Stil angezeigt.<br />

Die Zeite<strong>in</strong>teilung kann <strong>in</strong> Schritten zu 5, 10, 15, 30 o<strong>der</strong> 60 M<strong>in</strong>uten erfolgen. Unabhängig von <strong>der</strong> Anzeige<br />

können Term<strong>in</strong>e m<strong>in</strong>utengenau erfasst werden. Die Start- und Endzeit <strong>in</strong> <strong>der</strong> Tagesansicht können frei gewählt<br />

werden.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 5


Es gibt Methoden und Eigenschaften die es ermöglichen sich überschneidende Term<strong>in</strong>e zu erkennen.<br />

Überschneidungen können im Kalen<strong>der</strong> auch angezeigt werden.<br />

Diese Abbildung zeigt e<strong>in</strong>en privaten Term<strong>in</strong> mit e<strong>in</strong>er Er<strong>in</strong>nerung und e<strong>in</strong>em Bild sowie e<strong>in</strong>er Ortsangabe und<br />

e<strong>in</strong>em Beschreibungstext.<br />

Jedem Term<strong>in</strong> können bis zu vier Bil<strong>der</strong> zugeordnet werden, die <strong>in</strong> dem Steuerelement enthalten s<strong>in</strong>d. Dies s<strong>in</strong>d<br />

die Bil<strong>der</strong> Er<strong>in</strong>nerung, vorläufig, privat und Ortsangabe. Zusätzlich können bis zu drei weitere eigene Bil<strong>der</strong><br />

h<strong>in</strong>zugefügt werden. Dem Steuerelement können <strong>in</strong>sges<strong>am</strong>t bis zu 100 Bil<strong>der</strong> h<strong>in</strong>zugefügt werden, von denen <strong>in</strong><br />

e<strong>in</strong>em Term<strong>in</strong> drei <strong>in</strong>dividuelle Bil<strong>der</strong> angezeigt werden können.<br />

Mit e<strong>in</strong>er e<strong>in</strong>zigen Code Zeile kann die Ansicht des Steuerelements gedruckt werden. Mit <strong>der</strong> Methode<br />

Pr<strong>in</strong>tInW<strong>in</strong>dow kann die Ansicht des Steuerelements <strong>in</strong> e<strong>in</strong>em anzugebenden Seitenbereich gedruckt werden.<br />

Die Start- und Endzeit e<strong>in</strong>es Term<strong>in</strong>s können durch Ziehen mit <strong>der</strong> M<strong>aus</strong> <strong>in</strong> <strong>der</strong> Tagesansicht verschoben<br />

werden.<br />

Zu jedem Term<strong>in</strong> kann automatisch e<strong>in</strong>e ID generiert werden. Dadurch können die Term<strong>in</strong>e e<strong>in</strong>fach <strong>in</strong> e<strong>in</strong>er<br />

Tabelle gespeichert werden.<br />

Es können mehrere Zeiten für verschiedene Zeitzonen angezeigt werden.<br />

In dieser Abbildung werden zwei Zeitzonen angezeigt.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

6 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Hier Beispiele für weitere mögliche Ansichten des Kalen<strong>der</strong>s:<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 7


ctDEdit – Datum- und Zeitbearbeitung<br />

Dieses Steuerelement ermöglicht die E<strong>in</strong>gabe und Anzeige von Datum- und Zeitwerten. Mit e<strong>in</strong>er Eigenschaft<br />

kann e<strong>in</strong>gestellt werden, ob Datum- o<strong>der</strong> Zeitwerte e<strong>in</strong>gegeben werden sollen. Viele weitere Eigenschaften<br />

ermöglichen die Steuerung e<strong>in</strong>er formatierten E<strong>in</strong>gabe.<br />

Bei <strong>der</strong> Verwendung für die Zeite<strong>in</strong>gabe kann zwischen 12 Stunden und 24 Stunden Format gewählt werden.<br />

Die Datume<strong>in</strong>gabe wird <strong>in</strong> vielen <strong>in</strong>ternationalen Formaten unterstützt. Es werden alle Formate unterstützt, die<br />

auch <strong>in</strong> <strong>VFP</strong> unterstützt werden.<br />

Die Anzeige ist <strong>in</strong> verschiedenen Präsentationsstilen möglich. Mit e<strong>in</strong>fachen E<strong>in</strong>stellungen, kann e<strong>in</strong> typischer<br />

W<strong>in</strong>dows XP Stil e<strong>in</strong>gestellt werden. Es kann auch e<strong>in</strong>e Darstellung gewählt werden, bei <strong>der</strong> das Steuerelement<br />

flach ersche<strong>in</strong>t und se<strong>in</strong> Aussehen wechselt, wenn es den Fokus erhält.<br />

Am rechten Rand des Steuerelements kann e<strong>in</strong> Pfeil nach unten o<strong>der</strong> e<strong>in</strong> Sp<strong>in</strong>ner angezeigt werden. Beim Klick<br />

auf diese Elemente wird e<strong>in</strong> Ereignis <strong>aus</strong>gelöst, aber es wird standardmäßig ke<strong>in</strong>e Aktion <strong>aus</strong>geführt. Es ist<br />

jedoch e<strong>in</strong>fach <strong>in</strong> diese Ereignisse Code unterzubr<strong>in</strong>gen, <strong>der</strong> e<strong>in</strong>en Kalen<strong>der</strong> startet o<strong>der</strong> das Datum tageweise<br />

vor- o<strong>der</strong> zurückzählt. Die Farbe und das Aussehen <strong>der</strong> Schaltflächen kann e<strong>in</strong>gestellt werden.<br />

Das Steuerelement kann so e<strong>in</strong>gestellt werden, dass beim anhaltenden Klick auf e<strong>in</strong>e <strong>der</strong> Schaltflächen das<br />

entsprechende Ereignis <strong>in</strong> e<strong>in</strong>em e<strong>in</strong>stellbaren Intervall wie<strong>der</strong>holt gefeuert wird. D<strong>am</strong>it ist zum Beispiel e<strong>in</strong><br />

fortlaufendes hochzählen des Datums bei gedrückter M<strong>aus</strong>taste möglich.<br />

Alle E<strong>in</strong>stellungen <strong>am</strong> ctDEdit Steuerelement können <strong>in</strong> e<strong>in</strong>er XML Datei gespeichert werden. Gen<strong>aus</strong>o können<br />

auch alle E<strong>in</strong>stellungen <strong>aus</strong> e<strong>in</strong>er XML Datei gelesen werden. Dies ist e<strong>in</strong>e Alternative zur progr<strong>am</strong>matischen<br />

E<strong>in</strong>stellung aller Eigenschaften.<br />

Das Steuerelement ctDEdit unterstützt e<strong>in</strong>e <strong>in</strong>telligente Datume<strong>in</strong>gabe. Unvollständige Datume<strong>in</strong>gaben werden<br />

beim Verlassen des Steuerelements vervollständigt.<br />

Bei <strong>der</strong> Verwendung für die Zeite<strong>in</strong>gabe kann e<strong>in</strong> gültiger Zeitraum vorgegeben werden.<br />

Ähnlich wie <strong>in</strong> <strong>VFP</strong> wird e<strong>in</strong> Century Rollover unterstützt.<br />

Wesentlich besser als <strong>in</strong> <strong>VFP</strong>, ist die Fehlerbehandlung gelöst. Wenn <strong>in</strong> <strong>VFP</strong> e<strong>in</strong>e Textbox e<strong>in</strong>e <strong>Controls</strong>ource<br />

vom Typ Datum hat und <strong>der</strong> Anwen<strong>der</strong> e<strong>in</strong> ungültiges Datum e<strong>in</strong>gibt, kann er die Textbox nicht verlassen, bis er<br />

se<strong>in</strong>e E<strong>in</strong>gabe korrigiert und e<strong>in</strong> gültiges Datum e<strong>in</strong>gegeben hat. In ctDEdit wird e<strong>in</strong> Ereignis gefeuert, wenn <strong>der</strong><br />

Anwen<strong>der</strong> versucht das Steuerelement mit e<strong>in</strong>er ungültigen E<strong>in</strong>gabe zu verlassen. Standardmäßig wird e<strong>in</strong>e<br />

ungültige E<strong>in</strong>gabe beim Verlassen des Steuerelements gelöscht.<br />

ctDropMenu – Rechtsklickmenü<br />

Dieses ActiveX Steuerelement erstellt Rechtsklickmenüs. Es s<strong>in</strong>d viele Darstellungsmöglichkeiten e<strong>in</strong>stellbar.<br />

Neben <strong>der</strong> Darstellung im W<strong>in</strong>dows XP Stil können <strong>in</strong>sbeson<strong>der</strong>e Bil<strong>der</strong>, Texte, H<strong>in</strong>tergrund und Farben<br />

e<strong>in</strong>gestellt werden.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

8 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Jedem Menüe<strong>in</strong>trag kann e<strong>in</strong> <strong>in</strong>dividuelles Bild zugeordnet werden. Jedem Menüe<strong>in</strong>trag kann e<strong>in</strong> zusätzlicher<br />

H<strong>in</strong>weistext zugeordnet werden.<br />

Dem Menü können Farben für alle Menüe<strong>in</strong>träge, für den <strong>aus</strong>gewählten Menüe<strong>in</strong>trag und für den l<strong>in</strong>ken<br />

Randbereich zugeordnet werden. Es können auch Füllmuster verwendet werden.<br />

Rechtklickmenüs können kaskadierend <strong>in</strong> bis zu vier Ebenen erstellt werden.<br />

<strong>Integration</strong> <strong>in</strong> VFX<br />

In <strong>der</strong> Klassenbibliothek Vfxformbase.vcx bef<strong>in</strong>det sich die Formularklasse c<strong>DBI</strong>DropMenuVfxBase. Auf dieser<br />

Formularklasse bef<strong>in</strong>det sich das ActiveX Steuerelement ctDropMenu. In <strong>der</strong> Klassenbibliothek Vfxform.vcx<br />

bef<strong>in</strong>det sich die Ableitung c<strong>DBI</strong>DropMenu.<br />

Wenn die Eigenschaft goProgr<strong>am</strong>.nMenuandToolbarBehaviour den Wert 1 hat, wird automatisch das<br />

ctDropMenu verwendet.<br />

ctFr<strong>am</strong>e<br />

Das ActiveX Steuerelement ctFr<strong>am</strong>e verhält sich <strong>in</strong> <strong>VFP</strong> wie e<strong>in</strong>e Conta<strong>in</strong>er Klasse. Innerhalb des<br />

Steuerelements können <strong>VFP</strong> Steuerelemente platziert werden.<br />

Der ctFr<strong>am</strong>e Conta<strong>in</strong>er hat e<strong>in</strong>en e<strong>in</strong>stellbaren H<strong>in</strong>tergrund mit unterschiedlichen Farbverläufen. Bei e<strong>in</strong>em<br />

Resize des Formulars, wird <strong>der</strong> Farbverlauf für die neue Größe des Formulars neu berechnet. Der H<strong>in</strong>tergrund<br />

sieht also auch während o<strong>der</strong> nach e<strong>in</strong>er Än<strong>der</strong>ung <strong>der</strong> Größe gut <strong>aus</strong>.<br />

Neben <strong>der</strong> Darstellung e<strong>in</strong>es H<strong>in</strong>tergrunds ist die E<strong>in</strong>stellung von verschiedenen Rän<strong>der</strong>n, wahlweise an allen<br />

Seiten des Steuerelements möglich. Diese Möglichkeit stellt für <strong>VFP</strong> Entwickler aber nichts beson<strong>der</strong>s dar.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 9


ctListBar – Öffnen-Dialog<br />

In e<strong>in</strong>em ctListBar Steuerelement werden mehrspaltige Listen angezeigt, <strong>in</strong> denen <strong>der</strong> Anwen<strong>der</strong> durch auf- und<br />

zuklappen von Gruppen navigieren kann. Jede Gruppe kann <strong>in</strong>dividuell an<strong>der</strong>sartige E<strong>in</strong>träge enthalten.<br />

E<strong>in</strong> Listene<strong>in</strong>trag <strong>in</strong>nerhalb e<strong>in</strong>er Gruppe kann e<strong>in</strong> Text o<strong>der</strong> e<strong>in</strong> Bild o<strong>der</strong> e<strong>in</strong>e Komb<strong>in</strong>ation <strong>aus</strong> beidem se<strong>in</strong>.<br />

Wenn auf e<strong>in</strong>e Gruppenüberschrift geklickt wird, wird die dazugehörige Gruppe geöffnet. Das Steuerelement<br />

führt dabei e<strong>in</strong>e kle<strong>in</strong>e Animation (smooth scroll<strong>in</strong>g) <strong>aus</strong>, die dem Anwen<strong>der</strong> den Vorgang verdeutlicht. Wenn<br />

mehr Gruppen vorhanden s<strong>in</strong>d, als im anzeigbaren Bereich dargestellt werden können, werden automatisch<br />

Pfeile angezeigt, die e<strong>in</strong> Scrollen <strong>in</strong>nerhalb <strong>der</strong> Gruppen ermöglichen.<br />

Alle E<strong>in</strong>stellungen <strong>in</strong> e<strong>in</strong>em ctToolbar Steuerelement können <strong>in</strong> e<strong>in</strong>er XML Datei gespeichert werden. Alle<br />

E<strong>in</strong>stellungen können auch wie<strong>der</strong> <strong>aus</strong> e<strong>in</strong>er XML Datei gelesen werden.<br />

Die Elemente <strong>in</strong>nerhalb e<strong>in</strong>er ctToolbar können horizontal, vertikal o<strong>der</strong> mehrspaltig angezeigt werden. Es ist<br />

möglich mehrspaltige Listen aufzubauen.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

10 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Außer <strong>der</strong> Darstellung im W<strong>in</strong>dows XP Stil ist es möglich den H<strong>in</strong>tergrund <strong>der</strong> Listen, <strong>der</strong><br />

Gruppenüberschriften und <strong>der</strong> Navigationsschaltflächen mit verschiedenen Mustern o<strong>der</strong> Farbverläufen zu<br />

füllen. Als H<strong>in</strong>tergrund für die Liste kann auch e<strong>in</strong> Bild verwendet werden.<br />

Das Element, über dem sich gerade die M<strong>aus</strong> bef<strong>in</strong>det, kann durch e<strong>in</strong>e an<strong>der</strong>e H<strong>in</strong>tergrundfarbe, e<strong>in</strong>en an<strong>der</strong>en<br />

Zeichensatz o<strong>der</strong> Schriftstil o<strong>der</strong> auch durch e<strong>in</strong>e an<strong>der</strong>e Schriftfarbe deutlich gemacht werden.<br />

Ähnlich wie <strong>in</strong> <strong>der</strong> Toolbox von <strong>VFP</strong> wird auch <strong>in</strong> ctToolbar Drag & Drop unterstützt. Über Eigenschaften kann<br />

e<strong>in</strong>gestellt werden, ob e<strong>in</strong>e geschlossen Gruppe automatisch geöffnet werden soll, wenn mit <strong>der</strong> M<strong>aus</strong> e<strong>in</strong><br />

Objekt über die Gruppe bewegt wird.<br />

Listene<strong>in</strong>trägen können Tooltips zugewiesen werden. Die Bezeichnung e<strong>in</strong>es Listene<strong>in</strong>trags kann umgebrochen<br />

werden. Es können bis zu 100 Bil<strong>der</strong> verwaltet werden.<br />

Wenn die M<strong>aus</strong> über e<strong>in</strong> Element bewegt wird, können die Zeichensatze<strong>in</strong>stellungen geän<strong>der</strong>t werden und es<br />

kann auch e<strong>in</strong> an<strong>der</strong>es Bild angezeigt werden.<br />

Die Schaltflächen zur Navigation können <strong>in</strong>nerhalb <strong>der</strong> Liste an e<strong>in</strong>er Seite o<strong>der</strong> an e<strong>in</strong>er Seite e<strong>in</strong>er<br />

Gruppenüberschrift platziert werden.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 11


<strong>Integration</strong> des Öffnen-Dialogs <strong>in</strong> VFX<br />

Die Klasse für den Öffnen-Dialog basierend auf <strong>der</strong> Klasse ctListBar heißt cdbiopenformvfxbase. Von allen<br />

Öffnen-Dialogen geme<strong>in</strong>s<strong>am</strong> verwendeter Code bef<strong>in</strong>det such <strong>in</strong> <strong>der</strong> Klasse copenformvfxbase.<br />

Die Klasse cdbiopenformvfxbase ist e<strong>in</strong>e Formularklasse, auf <strong>der</strong> das ActiveX Steuerelement ctListBar platziert<br />

ist.<br />

Methoden<br />

Makegroup() – Mit dieser Methode wird e<strong>in</strong>e neue Gruppe angelegt. Dafür wird die Methode addList des<br />

ctListBar Objekts aufgerufen. Rückgabewert ist <strong>der</strong> Index des e<strong>in</strong>gefügten Elements.<br />

Makeitem() – Mit dieser Methode wird e<strong>in</strong> neuer E<strong>in</strong>trag e<strong>in</strong>er Gruppe h<strong>in</strong>zugefügt. Hierfür wird die Methode<br />

addItem des ctListBar Objekts aufgerufen. Rückgabewert ist <strong>der</strong> Index des e<strong>in</strong>gefügten Elements.<br />

Eigenschaften<br />

ControlStyle – Diese Eigenschaft steuert das Aussehen des Steuerelements. Mögliche Werte s<strong>in</strong>d:<br />

0 – Standardwert.<br />

1 – Listenansicht wie <strong>in</strong> Outlook 97.<br />

2 – Symbolleiste wie <strong>in</strong> Visual Studio.<br />

3 – Listenansicht wie <strong>in</strong> Outlook XP mit blauem Farbverlauf.<br />

4 - Listenansicht wie <strong>in</strong> Outlook XP mit olivfarbenem Farbverlauf.<br />

TipsDisplay – Mit dieser Eigenschaft können Tooltips e<strong>in</strong>geschaltet werden.<br />

ctToolBar – Menüs und Symbolleisten<br />

ctToolBar ist e<strong>in</strong>e Komponente zur horizontalen Darstellung von Menüs und Symbolleisten. Diese<br />

Beschreibung lässt schon e<strong>in</strong>e E<strong>in</strong>schränkung erkennen. Im Gegensatz zu Symbolleisten, die mit <strong>VFP</strong> erstellt<br />

werden, kann e<strong>in</strong>e ctToolbar nicht an <strong>der</strong> rechten o<strong>der</strong> l<strong>in</strong>ken Seite des Bildschirms gedockt werden.<br />

Symbolleiste und Menü werden <strong>in</strong> diesem Steuerelement gleich behandelt. In beiden Fällen s<strong>in</strong>d Schaltflächen<br />

vorhanden, die auf e<strong>in</strong>en M<strong>aus</strong>klick reagieren. Beim Menü enthalten diese Schaltflächen e<strong>in</strong>en Text als<br />

Beschriftung. In <strong>der</strong> Symbolleiste werden üblicherweise Symbole statt e<strong>in</strong>er Beschriftung verwendet.<br />

Die Schaltflächen e<strong>in</strong>er Symbolleiste reagieren <strong>in</strong> <strong>der</strong> Regel direkt auf e<strong>in</strong>en M<strong>aus</strong>klick und führen e<strong>in</strong>e Aktion<br />

<strong>aus</strong>.<br />

Beim Klick auf e<strong>in</strong>e Schaltfläche <strong>in</strong> e<strong>in</strong>em Menü wird <strong>in</strong> <strong>der</strong> Regel e<strong>in</strong> Menü-Pad geöffnet. Der Klick auf e<strong>in</strong>en<br />

E<strong>in</strong>trag <strong>in</strong> diesem Menü-Pad führt dann e<strong>in</strong>e Aktion <strong>aus</strong> o<strong>der</strong> öffnet sogar e<strong>in</strong> weiteres Menü-Pad.<br />

In Menü-Pads können verschiedene Elemente dargestellt werden, zum Beispiel markierbare E<strong>in</strong>träge o<strong>der</strong><br />

Separatoren. In Menüe<strong>in</strong>trägen kann neben Text e<strong>in</strong> Bild angezeigt werden,<br />

Alle E<strong>in</strong>stellungen e<strong>in</strong>er Symbolleiste o<strong>der</strong> e<strong>in</strong>es Menüs können <strong>in</strong> e<strong>in</strong>e XML Datei exportiert werden. Alle<br />

E<strong>in</strong>stellungen können auch <strong>aus</strong> e<strong>in</strong>er XML Datei e<strong>in</strong>gelesen werden. So ist es e<strong>in</strong>fach e<strong>in</strong> ganzes Menü o<strong>der</strong><br />

e<strong>in</strong>e Symbolleiste durch das Lesen e<strong>in</strong>er Datei zu konfigurieren.<br />

Durch e<strong>in</strong>fache E<strong>in</strong>stellung von Eigenschaften kann das Aussehen so e<strong>in</strong>gestellt werden, wie es typisch für<br />

W<strong>in</strong>dows XP Anwendungen ist.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

12 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Es s<strong>in</strong>d Ereignisse vorhanden, die <strong>aus</strong>gelöst werden, wenn <strong>der</strong> Anwen<strong>der</strong> die M<strong>aus</strong> über e<strong>in</strong> Element bewegt<br />

o<strong>der</strong> den Status e<strong>in</strong>es Elements än<strong>der</strong>t. Dadurch können dyn<strong>am</strong>ische Anzeigeeffekte erreicht werden. Zum<br />

Beispiel kann e<strong>in</strong> Menüe<strong>in</strong>trag, <strong>der</strong> während er von <strong>der</strong> M<strong>aus</strong> überfahren wird, mit fetter Schrift dargestellt<br />

werden.<br />

Alle Elemente im ctToolbar Steuerelement s<strong>in</strong>d <strong>in</strong> Collections beschrieben. Auf e<strong>in</strong>zelne Elemente kann nur<br />

über e<strong>in</strong>en Index referenziert werden. Der Index für e<strong>in</strong> Element wird beim H<strong>in</strong>zufügen des Elements von <strong>der</strong><br />

Methode Additem zurückgegeben. Dieser Index muss verwendet werden, um die Prozedur zu f<strong>in</strong>den, die beim<br />

Klick auf e<strong>in</strong>en E<strong>in</strong>trag <strong>aus</strong>geführt werden soll.<br />

Zu beachten ist, dass wenn e<strong>in</strong> Element mit <strong>der</strong> Methode RemoveItem entfernt wird, alle Elemente <strong>der</strong> ctToolbar<br />

neu <strong>in</strong>diziert werden. Bei Entfernung e<strong>in</strong>es Elements muss die selbst geführte Liste mit Indexen also auch selbst<br />

aktualisiert werden. E<strong>in</strong>e Alternative ist, nicht benutzte Elemente als unsichtbar e<strong>in</strong>zustellen.<br />

Ähnlich verhält es sich, wenn <strong>in</strong> e<strong>in</strong> bestehendes Menü neue E<strong>in</strong>träge e<strong>in</strong>gefügt werden. Die ctToolbar<br />

aktualisiert alle Indexe und wir müssen die von uns geführte Liste mit Indexen ebenfalls aktualisieren, d<strong>am</strong>it zu<br />

den Menüe<strong>in</strong>trägen die richtigen Aktionen <strong>aus</strong>geführt werden. Die Indexe <strong>der</strong> ctToolbar können also nicht als<br />

konstante Werte verwendet werden.<br />

Schaltflächen <strong>in</strong> Symbolleisten können e<strong>in</strong>e Bezeichnung o<strong>der</strong> e<strong>in</strong> Bild o<strong>der</strong> beides haben. E<strong>in</strong>e gesunkene<br />

Darstellung ist möglich. Separatoren können verwendet werden.<br />

Die Abbildung zeigt e<strong>in</strong>ige <strong>der</strong> Darstellungsmöglichkeiten <strong>in</strong> e<strong>in</strong>er Symbolleiste.<br />

Symbolleisten und Menüs können mit Farbverläufen angezeigt werden. Auch e<strong>in</strong>zelne E<strong>in</strong>träge können mit<br />

e<strong>in</strong>em Farbverlauf angezeigt werden. Farbverläufe können e<strong>in</strong>zelnen Elementen <strong>in</strong> Menüs o<strong>der</strong> Symbolleisten<br />

o<strong>der</strong> auch zu e<strong>in</strong>er ganzen Symbolleiste o<strong>der</strong> e<strong>in</strong>em ganzen Menü zugewiesen werden.<br />

E<strong>in</strong> Menü kann bis zu vier Ebenen von Menüe<strong>in</strong>trägen enthalten.<br />

In e<strong>in</strong>em Menü o<strong>der</strong> e<strong>in</strong>er Symbolleiste können bis zu 100 Bil<strong>der</strong> verwaltet werden. Zu jedem Bild kann e<strong>in</strong>e<br />

Maskendatei verwendet werden, die Teile des Bildes transparent ersche<strong>in</strong>en lässt.<br />

Das Steuerelement selbst enthält Bil<strong>der</strong> für häufig verwendete Anwendungszwecke, wie zum Beispiel für die<br />

Funktionen <strong>der</strong> Zwischenablage kopieren, <strong>aus</strong>schneiden und e<strong>in</strong>fügen.<br />

Es werden Bil<strong>der</strong> mit e<strong>in</strong>er Größe von 16 x 16 Pixel angezeigt, wenn <strong>der</strong> Wert <strong>der</strong> Eigenschaft SmallIcons auf<br />

.T. e<strong>in</strong>gestellt ist. Wenn <strong>der</strong> Wert dieser Eigenschaft .F. ist, werden Bil<strong>der</strong> <strong>in</strong> <strong>der</strong> Größe 32 x 32 Pixel angezeigt.<br />

E<strong>in</strong>e Symbolleiste kann auf e<strong>in</strong>em <strong>in</strong>dividuellen H<strong>in</strong>tergrundbild angezeigt werden.<br />

Zu jedem Element <strong>in</strong> e<strong>in</strong>er Symbolleiste kann e<strong>in</strong> Tooltip angezeigt werden. Am l<strong>in</strong>ken Rand e<strong>in</strong>er Symbolleiste<br />

kann zusätzlich e<strong>in</strong> Bild angezeigt werden.<br />

Ähnlich wie <strong>in</strong> Symbolleisten und Menüs von Office 2003Anwendungen, kann e<strong>in</strong> kle<strong>in</strong>er Pfeil <strong>am</strong> rechten<br />

Rand <strong>der</strong> Symbolleiste o<strong>der</strong> des Menüs anzeigen, dass nicht genug Platz zur Anzeige aller Elemente vorhanden<br />

ist. Wenn <strong>der</strong> Anwen<strong>der</strong> auf diesen Pfeil klickt, werden die nicht dargestellten Elemente <strong>in</strong> e<strong>in</strong>em Popup<br />

angezeigt. Menüe<strong>in</strong>träge, können auch so e<strong>in</strong>gestellt werden, dass sie <strong>aus</strong>schließlich über dieses Popup erreicht<br />

werden und nie im normalen Menü angezeigt werden.<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 13


Diese Abbildung zeigt e<strong>in</strong>e ctToolBar mit e<strong>in</strong>em Bild <strong>am</strong> l<strong>in</strong>ken Rand und e<strong>in</strong>em Pfeil zur Anzeige weiterer<br />

Elemente.<br />

Beispiele für die Darstellungsmöglichkeiten von Menüs mit unterschiedlichem H<strong>in</strong>tergrund und Icons.<br />

Zum Steuerelement ctToolbar gibt es e<strong>in</strong>en Buil<strong>der</strong>, <strong>der</strong> es ermöglicht viele Gestaltungse<strong>in</strong>stellungen zu<br />

machen.<br />

<strong>Integration</strong> von Menü und Symbolleiste <strong>in</strong> VFX<br />

In <strong>der</strong> Klassenbibliothek Vfxappl.vcx bef<strong>in</strong>den sich die neuen Klassen cDBiAppMenuBar und<br />

cDBiAppNavigatorBar.<br />

Symbolleiste<br />

Den Schaltflächen <strong>in</strong> e<strong>in</strong>er Symbolleiste können ke<strong>in</strong>e N<strong>am</strong>en zugeordnet werden. Es wird daher e<strong>in</strong> Array<br />

angelegt, <strong>in</strong> dem zu je<strong>der</strong> Schaltfläche <strong>in</strong> <strong>der</strong> Symbolleiste neben dem N<strong>am</strong>en die Indexnummer gespeichert<br />

wird. Dieses Array wird vom Manager für Symbolleisten verwendet. Der Manager für Symbolleisten kapselt<br />

den Code, <strong>der</strong> geme<strong>in</strong>s<strong>am</strong> <strong>in</strong> allen Symbolleisten verwendet wird, zum Beispiel für die Ereignisse Click und<br />

Refresh. Der Manager für Symbolleisten wird von den Symbolleisten cOfficeBar, cNavigatorBar,<br />

cDBiAppMenuBar und cDBiAppNavigatorBar verwendet.<br />

Klasse cToolbarManager <strong>in</strong> vfxAppl.vcx<br />

Diese Klasse wird von den bisherigen Symbolleistenklassen cOfficeBar und cAppNavBar sowie von <strong>der</strong> neuen<br />

Symbolleiste basierend auf ctToolbar verwendet.<br />

Methoden<br />

onRefresh(toItemsEnabled) – Hier ist <strong>der</strong> für alle Symbolleisten geme<strong>in</strong>s<strong>am</strong>e Refresh Code untergebracht. In<br />

dieser Methode wird zu allen Elementen <strong>der</strong> Symbolleiste <strong>der</strong> Status enabled bzw. disabled geschaltet.<br />

onItemClick(tcItemN<strong>am</strong>e) – Hier ist <strong>der</strong> für alle Symbolleisten geme<strong>in</strong>s<strong>am</strong>e Click Code untergebracht. In e<strong>in</strong>er<br />

Case Konstruktion, wird abhängig vom Wert des übergebenen Par<strong>am</strong>eters <strong>der</strong> Code für die gewünschte<br />

Schaltfläche <strong>aus</strong>geführt.<br />

DO CASE<br />

CASE tcItemN<strong>am</strong>e = “CMDNEW”<br />

* Code für das Click Ereignis <strong>der</strong> Schaltfläche “neu”<br />

CASE tcItemN<strong>am</strong>e = “CMDSAVE”<br />

* ….<br />

ENDCASE<br />

Die leere Ableitung cAppToolbarManager von dieser Klasse bef<strong>in</strong>det sich <strong>in</strong> <strong>der</strong> Klassenbibliothek Appl.vcx.<br />

Hier kann <strong>der</strong> Entwickler <strong>in</strong>dividuelle Anpassungen vornehmen, ohne den Code von VFX zu verän<strong>der</strong>n.<br />

Zur Laufzeit wird e<strong>in</strong>e Referenz auf e<strong>in</strong> Objekt dieser Klasse <strong>in</strong> <strong>der</strong> Eigenschaft oToolbarManager des<br />

Anwendungsobjekts gespeichert. Bei <strong>der</strong> Initialisierung des Anwendungsobjekts wird dieses Objekt <strong>in</strong>stanziiert.<br />

Die Klassen cOfficeBar, cNavigatorBar und cDbiNavigatorBar verwenden die Klasse cToolbarManager.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

14 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann


Menü<br />

E<strong>in</strong> <strong>VFP</strong> Menü wird mit dem Menü-Designer erstellt. Das Design wird <strong>in</strong> e<strong>in</strong>er Tabelle mit <strong>der</strong><br />

N<strong>am</strong>enserweiterung mnx gespeichert. Der <strong>VFP</strong> Menü-Designer kann dar<strong>aus</strong> e<strong>in</strong>e Progr<strong>am</strong>mdatei mit <strong>der</strong><br />

N<strong>am</strong>enserweiterung mpr erstellen. Das Kompilat dieser Datei hat die N<strong>am</strong>enserweiterung mpx und wird<br />

schließlich <strong>in</strong> Exe Dateien e<strong>in</strong>gebunden und zur Laufzeit <strong>der</strong> Anwendung <strong>aus</strong>geführt. Das ist <strong>der</strong> bekannte Weg,<br />

mit dem e<strong>in</strong> <strong>VFP</strong> Menü angezeigt wird und funktioniert.<br />

VFX hat e<strong>in</strong>en eigenen Menü-Designer mit erweiterten Möglichkeiten. Die Struktur <strong>der</strong> Menütabelle wurde<br />

erweitert um alle diese Möglichkeiten speichern zu können. Die Tabelle hat die N<strong>am</strong>enserweiterung vmx. Auch<br />

<strong>der</strong> VFX Menü-Designer generiert <strong>aus</strong> <strong>der</strong> Tabelle e<strong>in</strong>e Progr<strong>am</strong>mdatei mit <strong>der</strong> N<strong>am</strong>enserweiterung vmr. Das<br />

Kompilat mit <strong>der</strong> normalen N<strong>am</strong>enserweiterung fxp wird <strong>in</strong> Exe Dateien e<strong>in</strong>gebunden. Dieser Weg<br />

unterscheidet sich nicht wesentlich von dem von <strong>VFP</strong> verwendeten Verfahren.<br />

Um e<strong>in</strong>e ctToolbar als Menü aufzubauen ist die Tabelle mit den Menü<strong>in</strong>formationen <strong>in</strong> das Projekt<br />

e<strong>in</strong>geschlossen und wird zur Laufzeit <strong>aus</strong>gelesen um das ctToolbar Steuerelement mit Informationen zu füllen.<br />

Dieser Weg ist voll generisch implementiert.<br />

Nun gibt es <strong>in</strong> e<strong>in</strong>em Menü aber e<strong>in</strong>ige Code Teile, die <strong>aus</strong>geführt werden, wenn <strong>der</strong> Benutzer e<strong>in</strong>en<br />

Menüe<strong>in</strong>trag <strong>aus</strong>wählt. Weiterer Code wird benötigt um E<strong>in</strong>träge zu enablen o<strong>der</strong> diablen. Dieser Code bef<strong>in</strong>det<br />

sich <strong>in</strong> <strong>der</strong> Tabelle mit <strong>der</strong> Menübeschreibung. Es können aber auch Code Teile verwendet werden, die sich an<br />

an<strong>der</strong>er Stelle im Projekt bef<strong>in</strong>den. Dieser Code lässt sich zur Laufzeit nicht ohne weiteres <strong>aus</strong> <strong>der</strong> Tabelle<br />

<strong>aus</strong>führen. Beim Erstellen e<strong>in</strong>er Exe Datei wird daher im Project Hook e<strong>in</strong>e Progr<strong>am</strong>mdatei mit allen<br />

erfor<strong>der</strong>lichen Code Teilen erstellt und automatisch <strong>in</strong> das Projekt e<strong>in</strong>gebunden.<br />

In ctToolbar gibt es für Menüe<strong>in</strong>träge ke<strong>in</strong>e Skip For Kl<strong>aus</strong>el. Menüe<strong>in</strong>träge können nur über die Eigenschaft<br />

ItemEnabled aktiviert o<strong>der</strong> deaktiviert werden. Der Wert dieser Eigenschaft wird im Refresh Ereignis<br />

<strong>aus</strong>geführt. Das Refresh wird im Gotfocus Ereignis <strong>aus</strong>geführt.<br />

Wenn e<strong>in</strong> Menüe<strong>in</strong>trag disabled ersche<strong>in</strong>t, wird das Bild angezeigt, das <strong>in</strong> <strong>der</strong> Eigenschaft ItemPicDisabled<br />

e<strong>in</strong>getragen ist. Wenn dieser Eigenschaft ke<strong>in</strong> Wert zugewiesen ist, wird das gleich Bild angezeigt, das auch im<br />

enabled Status verwendet wird.<br />

Entsprechend <strong>der</strong> Darstellung <strong>in</strong> Office 2003 Anwendungen hat das Menü e<strong>in</strong>en Farbverlauf im H<strong>in</strong>tergrund.<br />

Bil<strong>der</strong> sehen darauf nur dann gut <strong>aus</strong>, wenn sie e<strong>in</strong>en transparenten H<strong>in</strong>tergrund haben. Lei<strong>der</strong> ist <strong>der</strong> e<strong>in</strong>zige<br />

Dateityp, <strong>der</strong> von ctToolbar mit transparentem H<strong>in</strong>tergrund unterstützt wird, <strong>der</strong> Typ ico.<br />

E<strong>in</strong>e Alternative besteht dar<strong>in</strong>, für Bil<strong>der</strong> an<strong>der</strong>er Dateitypen e<strong>in</strong>e Farbe zu bestimmen, die transparent<br />

ersche<strong>in</strong>en soll. In <strong>der</strong> Regel wird dies die Farbe weiß se<strong>in</strong>. Dafür muss <strong>der</strong> Wert <strong>der</strong> Eigenschaft MaskBitmap<br />

mit .T. e<strong>in</strong>gestellt werden und <strong>in</strong> <strong>der</strong> Eigenschaft MaskColor wird <strong>der</strong> Farbwert <strong>der</strong> transparent zu ersche<strong>in</strong>enden<br />

Farbe abgelegt. Diese Art <strong>der</strong> Darstellung funktioniert mit allen Bilddateiformaten.<br />

Zwischenablage<br />

Die ctToolbar enthält Standardelemente, die grundsätzlich auch <strong>in</strong> <strong>VFP</strong> Anwendungen funktionieren. Wie wir<br />

wissen, haben viele ActiveX Steuerelemente <strong>in</strong> <strong>VFP</strong> e<strong>in</strong> etwas ungewöhnliches Verhalten. Dies ist bei den<br />

Funktionen <strong>der</strong> Zwischenablage <strong>der</strong> Fall. Während e<strong>in</strong>e Funktion für die Zwischenablage <strong>aus</strong>gewählt wird, hat<br />

das ActiveX Steuerelement den Fokus, aber nicht unsere darunter liegende <strong>VFP</strong> Anwendung. E<strong>in</strong> Workaround<br />

ist, progr<strong>am</strong>matisch mit <strong>der</strong> M<strong>aus</strong> auf das aktive Formular zu klicken und anschließend mit dem Keyboard<br />

Befehl die Funktion <strong>der</strong> Zwischenablage <strong>aus</strong>zulösen. Hier <strong>der</strong> Code für „<strong>aus</strong>schneiden“.<br />

lnLeft = _SCREEN.left + _SCREEN.ACTIVEFORM.Left<br />

lnTop = _SCREEN.top + _SCREEN.ACTIVEFORM.Top<br />

MOUSE CLICK AT lnTop, lnLeft PIXELS<br />

KEYBOARD "{CTRL+X}" CLEAR<br />

<strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong> 14. Visual FoxPro Entwicklerkonferenz 2007<br />

© 2007 Uwe Habermann (Gruppe FWK) D-<strong>DBI</strong> • 15


<strong>Integration</strong> <strong>in</strong> eigene Projekte<br />

Eigene VFX Projekte können mit wenigen E<strong>in</strong>stellungen so konfiguriert werden, dass das ActiveX<br />

Steuerelement ctToolbar zur Anzeige von Menü und Symbolleiste verwendet wird.<br />

Das Projekt muss auf den aktuellen Build von VFX 10.0 aktualisiert werden. Dann s<strong>in</strong>d die folgenden<br />

Eigenschaften e<strong>in</strong>zustellen:<br />

cFoxAppl.nMenuAndToolbarBehavour = 1<br />

cFoxAppl.cMa<strong>in</strong>Menu = “cDBiAppMenuBar”<br />

cFoxAppl.cMa<strong>in</strong>Toolbar = “cDBiAppNavigatorBar”<br />

Anschließend muss e<strong>in</strong>e Exe Datei <strong>aus</strong> dem Projekt generiert werden, weil <strong>der</strong> Project Hook Code generiert, <strong>der</strong><br />

auch für Tests <strong>in</strong> <strong>der</strong> Entwicklungsumgebung benötigt wird.<br />

ctTray – <strong>VFP</strong> Anwendung im W<strong>in</strong>dows System Tray<br />

Mit dem ActiveX Steuerelement ctTray ist es möglich e<strong>in</strong>e <strong>VFP</strong> Anwendung im W<strong>in</strong>dows System Tray zu<br />

verstecken Dieses Verhalten ist <strong>in</strong>sbeson<strong>der</strong>e bei Anwendungen nützlich, die ständig laufen sollen o<strong>der</strong> müssen,<br />

bei denen aber nur selten o<strong>der</strong> gar nicht die Bedienung über die Benutzeroberfläche benötigt wird.<br />

Während sich e<strong>in</strong>e Anwendung im W<strong>in</strong>dows System Tray bef<strong>in</strong>det, ist diese Anwendung nicht <strong>in</strong> <strong>der</strong> W<strong>in</strong>dows<br />

Startzeile und auch nicht im Task Manager auf <strong>der</strong> Seite Anwendungen sichtbar.<br />

Das Steuerelement selbst ist nicht sichtbar. Es platziert zur Laufzeit e<strong>in</strong> Icon im W<strong>in</strong>dows System Tray. Wenn<br />

<strong>der</strong> Anwen<strong>der</strong> zur Laufzeit auf dieses Icon klickt, werden verschiedene Ereignisse <strong>aus</strong>gelöst.<br />

Das Steuerelement ctTray erfor<strong>der</strong>t nur wenig Progr<strong>am</strong>mieraufwand um e<strong>in</strong>e Anwendung im W<strong>in</strong>dows System<br />

Tray mit e<strong>in</strong>em Icon zu platzieren und auf Ereignisse zu reagieren.<br />

Das Steuerelement kann bis zu vier Icons verwalten. Zur Laufzeit kann <strong>der</strong> Entwickler e<strong>in</strong>s dieser Icons zur<br />

Anzeige im System Tray <strong>aus</strong>wählen. Icons können während <strong>der</strong> Entwicklungszeit o<strong>der</strong> zur Laufzeit geladen<br />

werden.<br />

Der Entwickler kann auf die Ereignisse Klick und Doppelklick mit <strong>der</strong> Ausführung beliebigen Codes reagieren.<br />

14. Visual FoxPro Entwicklerkonferenz 2007 <strong>Integration</strong> <strong>der</strong> <strong>DBI</strong> <strong>Controls</strong> <strong>aus</strong> <strong>Sedna</strong> <strong>in</strong> <strong>VFP</strong><br />

16 • D-<strong>DBI</strong> (Gruppe FWK) © 2007 Uwe Habermann

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!