Implementierung von OLE Drag & Drop-Funktionen in Visual Basic
Anwendungsfehler in der Arrow.DestinationBox-Eigenschaft
Probleme beim Zugriff auf die Box.Font-Eigenschaften
Löschen einer Tabelle mit allen ihren Kindern
Auf Schleifen prüfen, bevor ein neuer Pfeil erzeugt wird
Bewegen eines Objekts mit Visual Basic 6
Gebrauch der "Manipulation Handle"-Maske.
Einstellen des Maus-Cursors
Bilder laden in Visual Basic
Technischer Support und Upgrades
Einschränkungen der Demo-Version
Lizenz-Beschränkungen
F: Welche Drag & Drop-Methode kann man anwenden? Die FlowChartX
Drag & Drop-Methode übergibt ein Argument vom Typ FLOWCHARTLibCtl.IdataObject, von dem ich annehme, dass es ein Typelib für das Standart COM IDataObject ist.
Mein Problem besteht darin, dass ich versuche auf die Daten im dataObj zuzugreifen, daraufhin aber den Laufzeitfehler "Automation type not supported in Visual
Basic" erhalte. Haben Sie eine Lösung hierfür? Gibt es bessere Möglichkeit
OLE Drag & Drop mit Ihrem Control in VB zu implementieren?
A: Es gibt eine
neue Drag & Drop-Methode namens drProgrControlVB, die dieselben
Funktionen wie drProgrControl bietet. Der Unterschied
besteht darin, dass die Events, die ausgelöst werden, wenn die Eigenschaft
auf VB-Modus gesetzt wird, ihre Parameter vom IVBDataObject-Interface erhalten,
welches mit der Automation kompatibel ist. Die FlowChartX VB-Events
haben die gleichen Namen wie diejenigen, welche durch das drProgrControl ausgelöst
werden. Es muß nur das Suffix 'VB' angehängt werden.
zurück zum Anfang
F: Ich
erhalte eine Anwendungsfehler-Meldung, wenn ich auf die Eigenschaften der DestinationBox
des Pfeils zugreife, der als Argument im RequestCreateArrow-Event
zugewiesen ist.
A: Wenn
RequestCreateArrow ausgelöst wird, ist das DestinationBox-Objekt des
Pfeils noch nicht eingestellt. Wir haben eine neue Pfeil-Eigenschaft namens "ExpectedDestination"
hinzugefügt, die nur im RequestCreateArrow Event-Handler gültig
ist. Sie verweist auf das entsprechende Kästchen oder die Tabelle, die das Zielobjekt des Pfeils sein wird, wenn
dieser erzeugt wird.
zurück zum Anfang
F: Ich
habe keinen Zugriff auf die Font-Eigenschaften des Kästchen-Objekts, jeder
Versuch erzeugt einen Fehler.
A: Standardmäßig sind die Font-Eigenschaften für alle Objekte (Tabellen, Kästchen,
Pfeile) auf Null/Nichts gestellt. Wenn die Font-Eigenschaft eines FlowChartX-Objekts
Null ist, wird die Font-Eigenschaft des Flowchart-Objekts benutzt,
um den Text des Objekts wiederzugeben. Man kann die Speichernutzung gering halten, indem nicht jedem Diagrammelement Fonts zugewiesen werden. Wenn der Font eines Objekts Null ist, benutzt es den Flowchart-Font, um seinen Text wiederzugeben. Wenn Sie unterschiedliche Fonts für unterschiedliche Objekte benötigen, sollten Sie diese erst auf irgendeinen Wert setzen, indem Sie das VB SET-Statement benutzen und danach sind Sie in der Lage auf die Font-Eigenschaften ohne Fehler zuzugreifen.
zurück
zum Anfang
F: Ich möchte eine Tabelle mit all Ihren Kindern löschen. Welche Methode soll ich dafür anwenden? Ist es sinnvoll, eine Gruppe zu erstellen und die DestroyGroup-Methode zu verwenden?
A: Sie können einen rekursiven Algorithmus verwenden, um die Tabelle gestuft zu löschen - etwa auf die folgende Art und Weise
`*************************
sub CascadingDelete(tbl as Table)
dim i as integer
`hier werden alle Tabellen - Kinder gelöscht
For i = 1 To tbl.GetRelatedTables(1,rlManyToOne).Count
CascadingDelete tbl.GetRelatedTables(1,rlManyToOne).Item(0)
Next i
`die Tabelle hat keine Kinder mehr, daher
`können wir diese jetzt löschen
fc.DeleteItem tbl
end sub
sub someSub
if fc.ActiveItem = itTable then
CascadingDelete ActiveTable
end if
end sub
`***************************
zurück zum Anfang
F: Wie kann ich auf Schleifen prüfen, bevor ein Pfeil platziert wird? Ich habe bisher den RequestCreateArrow verwendet, um den Pfeil abhängig vom vorhergehenden und vom nachfolgenden Objekt zu bestätigen, aber ich kann die FindCycle-Funktion nicht benutzen, so lange der Pfeil nicht endgültig platziert wurde. Wissen Sie, wie ich dieses Problem umgehen kann?
A: Sie können
die FindShortestPath-Methode nutzen, um zu überprüfen, ob mit dem Pfeil eine Schleife entsteht. Wenn beispielsweise der Pfeil zwischen den Kästchen b1-> b2 erzeugt wird, dann wird für den Fall, dass FindShortestPath(b2, b1) einen Pfad findet, eine Schleife entstehen (der Pfeil verbindet die beiden Enden des gefunden Pfads).
Eine andere Lösung: Wenn der Pfeil von b2 nach b1 erzeugt wird, dann wird das Hinzufügen des Pfeils wieder eine Schleife erzeugen, falls FindShortestPath(b1, b2) eine Pfad zurückgibt.
In Ihrem RequestCreateArrow Event-Handler könnten Sie also folgenden Code verwenden:
if FindShortestPath(arrow.SourceBox,ExpectedDestination) = Nothing then
create = true
else
create = false
end if
zurück zum Anfang
F: Wie kann ich die Position eines Objektes (z.B. eines Kästchens) in VB6 verändern?
A: Die Position
von Kästchen und Tabellen können Sie mit der SetRect-Methode verändern.
zurück zum Anfang
F: Wie ist MnpHandlesMask zu nutzen?
IBoxItem* pBox =
m_pFCXWidget->createBox( QRect( 250, 250, 140, 40 ),
"Hallo!", "Tool Tip" );
Wenn die Maske der
MnpHandles-Eigenschaft wie folgt gesetzt wird :
pBox->put_MnpHandlesMask( 110100000 );
wird nur das Move-Handle und die Right-Edge-Handle angezeigt?
A: Die Handles-Maske ist eine Bit-Maske. Demzufolge sollte 110100000 die binäre Representation der Maske sein. Rufen Sie die Funktion mit der dezimalen Repräsentation dieser Zahl auf:
bin 110100000 = dec 416
pBox->put_MnpHandlesMask( 416 );
zurück zum Anfang
F: Wie
kann ich den Maus-Cursor mit FlowChartX einstellen?
A: Der Maus-Cursor kann mit der SetMouseCursor-Methode des FlowChart-Objekts verändert werden. Der Methoden-Prototyp lautet wie folgt:
SetMouseCursor(type, handle, destroyOld)
wobei::
'type' der Cursor-Typ ist, den Sie ersetzen wollen (z. B. zeigt mcArrowStart constant (= 3) den Mouse-Cursor als Pfeil an);
'handle' der Cursor Resource Handle ist, welcher von ::LoadCursor Window's API zurückgegeben
wird;
'destroyOld' der boole'sche Wert ist, der angibt, ob der vorherige Cursor gelöscht werden
soll.
Zum Beispiel können Sie für ein FlowChartX-Objekt namens 'fc' folgenden Visual C++ Code nutzen, um den Maus-Cursor zu verändern:
fc.SetMouseCursor(mcArrowStart,(ULONG)::
LoadCursor(NULL, IDC_ARROW), FALSE);
zurück zum Anfang
F: Wie
kann ich ein LoadPicFromRes in einem VB-Programm aufrufen?
A: Sie sollten
Ihre Bilddateien (.jpeg, .ico, .bmp, etc) als Custom Resource einfügen.
Sie sollten ihnen Resource String Ids und keine Integer-Zahlen, wie
sie von Resource Editoren normalerweise genutzt werden. Wenn die Bilder in Ihrer
.exe Datei lokalisiert werden, können Sie 0 als Resource-Instanz-Handle
angeben.
Beachten Sie bitte, dass, wenn das Projekt in VB interpretiertem Modus getestet
wird, die Resourcen mit 0 nicht gefunden werden, weil das Projekt im Prozess
von VB.EXE läuft. Wenn Sie Ihr Projekt als .EXE erzeugen und starten,
dann läuft es einwandfrei.
Falls Sie Ihre Resourcen in einer getrennten DLL speichern, dann müssen
Sie die GetModuleHandle API-Funktion aufrufen, um die Instanz-Handle
für das DLL zu erhalten.
zurück zum Anfang
F: Welcher technische Support wird mit dem Erwerb von FlowChartX zugesichert? Wieviel kosten Updates?
A: Mit dem Erwerb der FlowChartX-Lizenz wird für die Dauer von 12 Monaten der Zugriff auf den technischen Support und kostenlose Upgrades zugesichert.
zurück zum Anfang
F: Ich
habe das FlowChartX Demoprogramm geladen.Welche
Einschränkungen hat eigentlich die Demo-Version?
A: Im Demoprogramm
lassen sich maximal 32 Objekte erstellen. Die Demo-Version kann man zeitlich unbegrenzt anwenden.
zurück zum Anfang
F: Ich
möchte FlowChartX in einer Anwendung nutzen, die nur für eine kleine
Gruppe von Benutzern entwickelt wurde. Kann ich das Control an jeden Benutzer weitergeben, falls ich die 'Standard Einzel-Entwickler'-Version kaufe oder benötige
ich vielleicht die 'Site-Wide'- Lizenz dafür?
A: FlowChartX
Lizenzen beschränken nicht die Zahl der Benutzer ihrer fertigen Software,
sondern die Zahl der Entwickler, welche die Komponente nutzen. Falls Sie
freiberuflich als Entwickler arbeiten oder Sie der einzige Programmierer
sind, der mit FlowChartX in Ihrem Betrieb arbeitet, dann genügt Sie
die 'Einzel-Entwickler'-Lizenz. Danach können Sie Ihre fertige Anwendung
an so viele Leute ausliefern, wie Sie wollen. Der Preis ist nur an der
Zahl der Software Entwickler gebunden, die die Kontrolle nutzen werden
( unsere technischen Unterstützungskosten sind hiervon abhängig ).
zurück zum Anfang
|