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
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