Shop
Anmelden
MindFusion

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.

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.

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.

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

 `this will delete all child tables
 For i = 1 To tbl.GetRelatedTables(1, 
 		 rlManyToOne).Count
 CascadingDelete tbl.GetRelatedTables(1,
	 rlManyToOne).Item(0)
 Next i

 `the current table has no more children
 `so we can delete it
 fc.DeleteItem tbl
end sub

sub someSub
 if fc.ActiveItem = itTable then
 CascadingDelete ActiveTable
 end if
end sub

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

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.

Copyright © 2001-2022 MindFusion LLC. Alle Rechte vorbehalten.
Nutzungsbedingungen - Kontakt