Tienda Web
Área de Clientes
MindFusion

P: El método de arrastrar y soltar FlowChartX pasa un objeto de tipo FLOWCHARTLibCtl.IdataObject, el cual asumo es sólo un typelib para el COM IDataObject estándar. El problema es que estoy intentando acceder a los datos en dataObj, pero tengo un error de tiempo de ejecucion "Automation type not supported in Visual Basic". ¿Tienen una solución para esto? ¿Hay alguna mejor manera de implementar arrastrar y soltar OLE con su control en VB?

R: hay un nuevo modo de arrastrar y soltar llamado drProgrControlVB, que tiene la misma funcionalidad que drProgrControl. La diferencia es que los eventos, que son disparados cuando la propiedad está establecida al modo VB, toman como parámetro la interfaz IVBDataObject, que es compatible con automatización. Los eventos FlowChartX VB tienen los mismo nombres que ellos, los cuales son disparados en modo drProgrControl, sólo el sufijo 'VB' es añadido.

P: ¡Me sale un error de aplicación si trato de acceder a la propiedad DestinationBox de la flecha pasada al evento RequestCreateArrow!

R: Cuando RequestCreateArrow es disparado el objeto DestinationBox de la flecha aún no es enviado. Hemos añadido una nueva propieda de flecha, llamada ExpectedDestination, que es válida sólo en manejadores de eventos RequestCreateArrow. Se refiere a la caja o tabla que será el objeto de destino de la flecha si la creación de la flecha es válida.

P: No puedo acceder a la propiedad Font del objeto caja, se genera un error cada vez.

R: Por defecto, las fuentes de todos los objetos (tablas, cuadros, flechas) tienen sus fuentes establecidas a null/nothing. Cuando la fuente de un objeto de diagrama es nula, la fuente del diagrama de flujo se utiliza para representar el texto de los objetos. La idea es reducir el uso de memoria por no asignar tipos de letra para cada elemento del diagrama. Cuando la fuente de un objeto es nula, se utiliza la fuente del diagrama de flujo para renderizar su texto. Así que si usted necesita diferentes fuentes para diferentes objetos, primero debe ajustarlos a un valor, utilizando la sentencia SET VB y después usted será capaz de acceder a la propiedad Font y sin errores.

P: Quiero ser capaz de eliminar una tabla junto con sus hijos relacionados. No veo un método para hacer eso, a menos que tal vez pueda crear un grupo y utilizar el método DestroyGroup. No estoy seguro de ello...

R: Usted puede utilizar el algoritmo recursivo para realizar eliminaciones en cascada de las tablas, algo como esto:

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

P: Mi sistema permite a los usuarios construir un diagrama de flujo, pero quiero comprobar si hay ciclos antes de permitir que una flecha se coloque. He estado usando el RequestCreateArrow para validar la flecha sobre la base de los objetos anteriores y siguientes, pero no puedo utilizar la función FindCycle hasta que la flecha ha sido finalmente puesta. ¿Conocen alguna forma de solucionar este problema?

R: Usted puede utilizar el método FindShortestPath para comprobar si habrá un ciclo con la flecha que se está creando. Por ejemplo, si se está creando la flecha entre las cajas b1 -> b2, a continuación, si FindShortestPath(b2, b1) encuentra un camino, significa que la adición de la flecha para esta ruta resultará en un ciclo (la flecha conecta los dos extremos del camino encontrado).

Otra solución: si la flecha está siendo creada a partir de b2 en b1, a continuación, si FindShortestPath(b1, b2) devuelve una ruta, eso significa de nuevo que la adición de la flecha se traducirá en un ciclo.

Así, en el controlador de eventos RequestCreateArrow podría utilizar este código:

if FindShortestPath(arrow.SourceBox,
 ExpectedDestination) = Nothing then
 create = true
else
 	create = false
end if

P: Me gustaría cambiar la posición de un objeto (por ejemplo, mover una caja) mediante programación. ¿Cómo puedo hacer esto con VB6?

R: Las posiciones de cajas y tablas pueden ser cambiadas con el método SetRect.

Copyright © 2001-2024 MindFusion LLC. All rights reserved.
Terms of use - Contactos