Q: FlowChartX
drag and drop method passes an object of type FLOWCHARTLibCtl.IdataObject,
which I assume is just a typelib for the standard COM IDataObject. The
problem is that I'm trying to access the data in the dataObj, but I'm
getting "Automation type not supported in Visual Basic" runtime error.
Do you have a workaround for this? Is there a better way to implement
OLE drag and drop with your control in VB?
A: There's
a new drag-and-drop mode called drProgrControlVB, which has the same functionality
as drProgrControl. The difference is that the events, which are fired
when the property is set to VB mode take as parameter IVBDataObject interface
which is automation compatible. The FlowChartX VB events have the same
names as those, which are fired in drProgrControl mode just the 'VB' suffix
is added to them.
back to top
Q: I get
an Application Fault if I try to access the DestinationBox property of
the arrow passed into the RequestCreateArrow event!
A: When RequestCreateArrow
is fired the arrow's DestinationBox object is still not set. We have added
a new arrow property, called ExpectedDestination, that is valid only in
RequestCreateArrow event handlers. It refers to the box or table that
will be the arrow's destination object if the arrow creation is validated.
back to top
Q: I can
not access the Font property of the box object, it throws an error each
time.
A: By default
the fonts of all objects (tables, boxes, arrows) have their fonts set
to null/nothing . When a diagram object's font is null, the font of the
flowchart is used to render the objects' text. The idea is to cut down
memory usage by not allocating fonts for every diagram element. When the
font of an object is null it uses the flowchart Font to render its text.
So if you need different fonts for different objects you should first
set them to some value, using the VB SET statement and after that you'll
be able to access the Font property without errors.
back to top
Q: I want
to be able to delete a table together with its related children. I don't
see a method to be able to do that unless maybe If I create a group and
use the DestroyGroup method. Not sure about that...
A: You could
use recursive algorithm to make cascading deletes of tables, something
like this:
`*************************
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
`***************************
back to top
Q: My
system allows users to construct a flowchart, but I want to check for
cycles before allowing an arrow to be placed. I have been using the RequestCreateArrow
to validate the arrow based on the preceding and following objects, but
I can't use the FindCycle function until the arrow has finally been placed.
Do you know any work around for this problem?
A: You can
use the FindShortestPath method to check if there will be a cycle with
the arrow that's being created. For example, if the arrow is being created
between boxes b1 -> b2, then if FindShortestPath(b2, b1) finds a path,
means that adding the arrow to this path will result in a cycle (the arrow
connects the both ends of the found path).
Another solution: if the arrow is being created from b2 to b1, then
if FindShortestPath(b1, b2) returns a path, that means again that adding
the arrow will result in a cycle.
So, in your RequestCreateArrow event handler you could use such code:
if FindShortestPath(arrow.SourceBox,
ExpectedDestination) = Nothing then
create = true
else
create = false
end if
back to top
Q: I would
like to change an object's position (for example move a Box) programmatically.
How can I do this with VB6?
A: Boxes and
tables' positions can be changed with the SetRect method.
back to top
Q: We
use the mnp handles mask as follows:
IBoxItem* pBox =
m_pFCXWidget->createBox( QRect( 250,
250, 140, 40 ), "Hallo!", "Tool Tip" );
When the mask of the
MnpHandles Property is set to:
pBox->put_MnpHandlesMask( 110100000 );
only the move handle and the right edge handle are shown?
A: The handles mask is a bitmask actually, so 110100000
should be the binary representation of the mask. Call the function with
the decimal representation of this number:
bin 110100000 = dec 416
so
pBox->put_MnpHandlesMask( 416 );
back to top
Q: How
can I set mouse cursors with FlowChartX?
A: The mouse
cursor can be changed using the SetMouseCursor method of the FlowChart
object, which has the following prototype:
SetMouseCursor(type, handle, destroyOld)
where: 'type' is the cursor
type that you want to replace ( for example the mcArrowStart constant (=
3) indicates mouse cursor for an arrow start ); 'handle'
is cursor resource handle, as returned by the ::LoadCursor Window's API;
'destroyOld' is a boolean value
indicating if the previous used cursor should be destroyed; For
example, if the FlowChart object is called 'fc' you can use the following
Visual C++ code to change the cursor:
fc.SetMouseCursor(mcArrowStart,(ULONG)::
LoadCursor(NULL, IDC_ARROW), FALSE);
back to top
Q: How
can I call LoadPicFromRes from a VB program?
A: You should
insert your image files (.jpeg, .ico, .bmp, etc) as custom resource. You
should give them string IDs, not integers as resource editor uses by default.
If the resources are located in your .exe file you can pass 0 for resource-instance
handle.
Note that when the project is run in VB in interpreted mode the resources
cannot be found using 0, because the project is run in the process of
VB.EXE. If you build the project as an executable and run it, it works
just fine.
If you store your resources in a separate dll, you should use GetModuleHandle
API function to get the instance handle for the dll.
back to top
Q: I
am seriously considering to buy FlowChartX. What technical support do
I get with the control. How much should I pay for further versions?
A: Everyone
who has a licensed copy of FlowChartX gets technical support and upgrades
for free 12 months after the purchase.
back to top
Q: I
have downloaded the FlowChartX demo version. What are its limitations?
A: In the
demo version users are restricted with the number of objects they could
create - just 32. Otherwise, the demo does not expires in time.
back to top
Q: The
application I want to use FlowChartX in, will be distributed to a small
team of users. If I buy the 'Standard single - developer' version, will
I be able to distribute the control to each user? Or should I buy the
'site-wide' licence?
A: FlowChartX
licenses do not limitate the number of users of your end product. If you
are a freelance developer or the only developer that will work with the
control in an organisation, than you can purchase single-developer license,
but distribute your final application to as many users as you want. The
price is based solely on the number of developers that will use the control
(and therefore on our technical support costs).
back to top
|