PDA

Ver la Versión Completa : Dragging (Arrastrar ventana)


jhonalone
18-09-2008, 19:00:43
Hola amigos. Os expongo un par de problemas que tengo al arrastrar una ventana, por si alguien me puede ayudar.

Tengo un Form y dentro de él he insertado un TPanel que lleva una TStringList y una TLabel.
He cambiado DragKind del panel a dkDock.
He puesto la propiedad DragMode del panel a dmAutomatic.
El panel se puede arrastrar por la pantalla sin problemas.

O.-Problema: Este problema ya lo he resuelto, pero no estoy seguro si lo hice bien.
Al cerrar el formulario, se quedaba sin cerrar el panel con la lista, lo he resuelto ocultando el panel al cerrar el formulario. (¿...?)

1.-Problema: Cuando el panel está activo, aparece una pequeña barra de título con el Caption del panel, bueno, quitando el texto del Caption no aparece el título. Esta barra, pertenece a un nuevo "contenedor" que yo no he creado y que está debajo del panel y el problema es el siguiente:
El "contenedor" del panel es susceptible de variar en tamaño y ESTO ES LO QUE DESEARIA EVITAR.
Lo he intentado poniendo límites máximos y mínimos iguales en la propiedad Constraints del panel y sigue igual.

2.-Problema: Cuando cierro el formulario ya he comentado que tengo que ocultar el panel si no quiero que quede sobre el formulario que hay debajo o sobre el forrmulario principal. Cuando abro, por segunda o sucesivas veces, el formulario que contiene el panel desplazable, al hacer visible de nuevo este panel, vuelve a aparecer debajo del formulario.
He intentado evitarlo con BringToFront y nada.
Si le paso el foco, sí aparece en el formulario, pero al desplazarlo vuelve a colocarse por debajo.

Ya no sé que más puedo hacer, no se me ocurre nada.

Si alguien ha resuelto o sabe como resolver estas cuestiones, le agradecería que me ayudara.

De todos modos ¡GRACIAS POR HABERME LEÍDO!

cHackAll
21-09-2008, 20:31:50
procedure TForm2.Panel1EndDock(Sender, Target: TObject; X, Y: Integer);
var Control: TControl;
begin
Control := Sender as TControl;
if Target is TCustomDockForm then
with Target as TCustomDockForm do
begin
BorderStyle := bsNone;//bsToolWindow;
FormStyle := fsStayOnTop;
ClientWidth := Control.Width;
ClientHeight := Control.Height;
Control.Left := 0;
Control.Top := 0;
end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var Index: Cardinal;
begin
for Index := 0 to Screen.CustomFormCount - 1 do
if Screen.CustomForms[Index] is TCustomDockForm then
with Screen.CustomForms[Index].Controls[0] do
Dock(Self, Rect(66, 66, 66 + Width, 66 + Height));
end;

jhonalone
21-09-2008, 21:56:02
Muchas gracias, cHackAll.
Como siempre, es un placer, y una gran suerte para este foro, poder contar con tu desinteresada ayuda y tu inmensa sabiduría. Aunque todos conocemos sobradamente tus méritos, no estará de más que los recordemos de vez en cuando.

Tengo la certeza de que los dos procedimientos van a funcionar, no lo he probado todavía, pero estoy seguro. El primero lo veo muy claro. Pero el segundo me cuesta más (muy pocos estamos a tu nivel). Abusando una vez más de tu valioso tiempo, me gustaría lo glosaras con un par de comentarios cortos. Quede claro que, si no lo haces lo comprenderé e igualmente te agraceceré que me hayas sacado del "atolladero" una vez más.

Saludos.

jhonalone
21-09-2008, 22:00:08
P. D.
Perdón. Cuando dije que "muy pocos estamos a tu nivel", quise decir que "muy pocos están a tu nivel", yo no puedo incluírme, ni de lejos...
Un abrazo.

jhonalone
21-09-2008, 22:47:02
Como era de esperar... ¡¡PERFECT0!! ¡¡FUNCIONANDO!!
Todos los usuarios y visitantes de este foro te debemos mucho. No te canses, sigue así.

Gracias de nuevo, cHackAll.

cHackAll
21-09-2008, 23:48:01
Vaya jhonalone, conseguiste hacerme sonrojar; Muchas gracias por esos elogios, es un placer poder colaborar :)

Hasta luego ;)