Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Form al frente de todo, y todos.

Tengo un form, que al mostrarlo, no ocupa toda la pantalla. Sin embargo, no quiero que se pueda hacer absolutamente nada, solo la posibilidad de presionar un botón que está en medio de ese Form.

He visto métodos, pero que son un desperdicio en cuanto a rendimiento. Por ejemplo usando timers, y que se ejecute

Código Delphi [-]
Aplication.BringtoFront;

Hay alguna manera de realizar lo planteado, sin usar timers que traigan el foco del form continuamente???
Responder Con Cita
  #2  
Antiguo 14-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Hay alguna manera de realizar lo planteado, sin usar timers que traigan el foco del form continuamente???
Hola pape19.

Si, tenes que ajustar algunos valores. Supongamos que el form que solo permite la pulsación de un TButton se llame Form2 (¿ Original no ? ) y sea creado desde Form1.

Entonces en Form1:
Código Delphi [-]
uses Unit2;  // Form2

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(Self) do
  begin
    BorderIcons:= [];  // configurable desde Object Inspector       
    BorderStyle:= bsDialog;  // configurable desde Object Inspector
    FormStyle:= fsStayOnTop;  // configurable desde Object Inspector
    ShowModal;
  end;
end;

Y en Form2 agregar el Button cerrar y este código para que no lo se pueda mover:
Código Delphi [-]
type
  TForm2 = class(TForm)
  .. 
  private
     procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;
...
implementation

procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
 if Message.CmdType and $FFF0 = SC_MOVE then
    Message.Result := 0
  else
    inherited;
end;
...
procedure TForm2.btnCerrarClick(Sender: TObject);
begin
  Close;
end;
Y ahí querdará fijo, hasta pulsar el botón que lo cierra...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-03-2012 a las 22:06:49. Razón: agregar comentarios
Responder Con Cita
  #3  
Antiguo 15-03-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

aparte de lo que te señala el compañero, no acabo de entender que comportamiento quieres conseguir, ¿necesitas que cada cierto tiempo se habra un formulario?, ¿no tiene que cumplir ninguna condición?.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #4  
Antiguo 15-03-2012
pape19 pape19 is offline
Miembro
 
Registrado: jul 2010
Posts: 96
Poder: 14
pape19 Va por buen camino
Con la ayuda de ecfisa pude lograr lo que quería, aunque solo la primera vez que muestro el Form2. Cuando apreto el botón de ese Form2, vuelve al Form1, y si llamo de vuelta al Form2, se pierde lo que logré la vez anterior, no se si me explico.

Lo que quiero es que se muestre el Form2, llamado desde el form1. Y mientras este activo el form2, cualquier programa que ejecute, que nada tenga que ver con mi aplicación, se muestre detrás del Form2; hasta que aprete un botón del Form2.
Responder Con Cita
  #5  
Antiguo 15-03-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola este código lo saqué del club hace ya tiempo, me sirvió para crear un programa de mensajería interna que al hacer la comprobación de si tenías mensajes pendientes de leer te ponía el mensaje pendiente (el formulario correspondiente) encima de todos los programas que tenías abiertos en ese momento. Supongo que si utilizas el mismo código en un timer que se actualice cada poco tiempo conseguiras que el formulario que quieres se quede siempres encima de todo.

Código Delphi [-]
var
FgThreadId  : DWORD; { Hilo de la app. que tenga el foco }
AppThreadId : DWORD; { Hilo de nuestra aplicación        }
Código Delphi [-]
form3.FormStyle:=FsStayOnTop;
Form3.Showmodal;
Form3.FormStyle:=FsNormal;
{ Obtener los hilos }
FgThreadId  := GetWindowThreadProcessId(GetForegroundWindow, nil);
AppThreadId := GetWindowThreadProcessId(Handle, nil);
{ Anexar el hilo de nuestra app. al de la  que tenga el foco }
AttachThreadInput(AppThreadId, FgThreadId, true);
{ Ahora sí, activar la applicación }
SetForegroundWindow(Handle);
{ Separar el hilo de nuestra app de la otra }
AttachThreadInput(AppThreadId, FgThreadId, false);

Espero que te sirva.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Form de Alarma al frente de todo Carmelo Cash OOP 3 17-09-2008 02:08:49
traer al frente un form no modal (de entre varios), utilizando el valor en el caption jcapitan OOP 2 23-05-2007 02:33:43
FORM al frente de una aplicacion(Word, Excel, etc.)? DM2005 Varios 1 08-07-2006 14:52:44
Form Al frente el_enigma1 OOP 2 20-01-2005 00:28:21
TImage q ocupe todo el form DarkByte Gráficos 2 13-09-2003 15:59:38


La franja horaria es GMT +2. Ahora son las 07:44:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi