AdvToolbar de MDIChild que se muestra en MainForm y posibilidad de arrastrarlo por todas partes

Creé una aplicación que consta de un formulario principal y varios formularios MDIChild. Estoy usando AdvDockPanel y AdvToolbar de los componentes de TMS. Mi formulario principal tiene AdvDockPanels en los lados superior, inferior, izquierdo y derecho del formulario para mostrar AdvToolbars.

Cada MDIChild Forms contiene una AdvToolbar y, al crear estos formularios, AdvToolbar.Parent se establece en AdvDockPanel en MainForm. Al principio, AdvToolbar.Visible es falso y, al activar cada formulario MDIChild, configuro su visibilidad en verdadero.

En resumen, al activar un formulario MDIChild, quiero que se muestre AdvToolbar en MainForm.AdvDockPanel y, al desactivarlo, quiero que se oculte.

Todo esto funciona bien, excepto cuando trato de arrastrar una AdvToolbar de un AdvDockPanel a otro, cruzará el medio de mi MainForm, lo que hace que mi formulario MDIChild activo esté oculto y provoque este error: "No se puede cambiar Visible en OnShow u OnHide".

Lo depuré y encontré dónde se genera esta excepción. Está en Vcl.Forms. procedimiento TCustomForm.CMShowingChanged(var Mensaje: TMessage);

Por lo tanto, me gustaría saber si hay una manera de mostrar la barra de herramientas Adv desde mi formulario MDIChild activo en el formulario principal mientras puedo arrastrar mi barra de herramientas en mi formulario principal.

Gracias,

  • Charles

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

Puede verificar si el padre actual de la barra de herramientas es una TFloatingWindow (ese es el padre al arrastrar la barra de herramientas):

procedure TForm25.FormDeactivate(Sender: TObject);
begin
   if not (orgaadvtoolbar1.Parent is TFloatingWindow) then
      OrgaAdvToolBar1.visible:=false;
end;

TAdvToolBar.Dragging no funciona porque TAdvToolbar usa un indicador de arrastre propio FDraging pero no es una propiedad, por lo que solo puede acceder a la variable si modifica el código fuente del software TMS.

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.