Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema al Ocultar automáticamente la Barra de tareas de Windows XP (https://www.clubdelphi.com/foros/showthread.php?t=77811)

madiazg 27-02-2012 23:02:02

Problema al Ocultar automáticamente la Barra de tareas de Windows XP
 
Hola,
un amigo que utiliza un programa mio tiene un ordenador con Windows XP y una pantalla con poca resolución por lo que tiene configurado en que la barra de tareas se oculte automáticamente.

Mi programa tiene configurada la propiedad BorderStyle = bsNone y WindowState = wsMaximized. Con esta configuración ocupa toda la pantalla y la Barra de Tarea no se muestra la pasar el ratón por la parte inferior de la pantalla. También he probado con BorderStyle = bsSingle y pasa lo mismo. Solo con BorderStyle = bsSizeable la barra de tarea se despliega al pasar el ratón.

¿Alguien sabe como hacer que, aunque BorderStyle = bsNone se despliegue la barra de tarea al pasar el ratón por la parte inferior de la pantalla?

Saludos...
Miguel Angel

ecfisa 28-02-2012 02:45:41

Hola madiazg.

Hice este código de prueba para Windows Vista y funciona correctamente:
Código Delphi [-]
...
implementation

const
   TASKBTITLE = 'Shell_TrayWnd';

function FindWindowEx(Parent, Child: HWND; ClassName: Pointer; 
  WindowName: PWideChar): HWND; stdcall; external 'user32.dll' name 'FindWindowExW';

function GetHeightWnd(const AName: string) : integer;
var
  Hnd:HWND;
  R : TRect;
begin
  Hnd:= FindWindow(PChar(AName), nil );
  if Hnd <> 0 then
    GetWindowRect(Hnd, R);
  Result:= R.bottom - R.top
end;

procedure ShowHideTaskBAndStartBtn(const Show: Boolean);
begin
  if Show then
  begin
    ShowWindow(FindWindow(TASKBTITLE, nil), SW_SHOW); // muestra TaskBar
    ShowWindow(FindWindowEx(0, 0, MAKEINTATOM($C017), nil), SW_RESTORE)  // muestra StartButton
  end
  else
  begin
    ShowWindow(FindWindow(TASKBTITLE, nil), SW_HIDE);  // oculta TaskBar
    ShowWindow(FindWindowEx(0, 0, MAKEINTATOM($C017), nil), SW_HIDE)  // oculta StartButton
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderStyle:= bsNone;
  WindowState:= wsMaximized
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Y >= Height - GetHeightWnd(TASKBTITLE) then
   ShowHideTaskBAndStartBtn(True)
  else
    ShowHideTaskBAndStartBtn(False);
end;

...

(* ¡ No olvides mostrar TaskBar y StartButton al salir ! *)
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShowHideTaskBAndStartBtn(True)
end;
El problema es que para mostrar/ocultar el botón de inicio es diferente en Vista que en XP. Buscando un poco encontré estas opciones para XP:Sólo tendrías que probar reemplazando el código correspondiente al botón de inicio por el de los enlaces.


Saludos.

Caral 28-02-2012 03:06:03

Hola
Amigo funciona bien en XP.
Lo único es que haciendo algunas pruebas me da la impresion de que se presenta mas rápido así:

Código Delphi [-]
ShowWindow(FindWindow(TASKBTITLE, nil), SW_SHOW); // muestra TaskBar
 ShowWindow(FindWindowEx(0, 0, MAKEINTATOM($C017), nil), SW_SHOWNA)  // muestra StartButton

Por cierto (para madiazg), crea un boton (close) en el codigo de mi amigo ecfisa, si no tendras que usar el taskmanager para cerrar el programa.:)

Muy buen código amigo: Listo y archivado.:)
Saludos

ecfisa 28-02-2012 04:26:41

Hola Carlos.
Cita:

Amigo funciona bien en XP.
Buenísimo, gracias por probarlo. No tenía a mano el XP para hacerlo y los códigos de ocultación del StartButton para XP no funcionan en Vista.

Un abrazo. :)

shoulder 28-02-2012 20:12:01

Ocultar Barra de Windows
 
Gracias probe este post. y me funcionó bien como ocultar la barra de tareas, pero me surgio una duda, si un usuario abre el prg, oculta la barra y despues por razones varias cancela el prg, la barra queda oculta no pudiendo hacer la sentencia de mostrar barra.
Mi pregunta concreta es : hay alguna instancia en delphi de hacer, como desde la barra de tareas, que se oculta, pero pasando el mouse por abajo la muestra de vuelta y no ocultando de manera permanente?.
El tema es que desde el area de sistema tiene bloqueadas la configuraciones de Windows y las barras estan predefinidas para ser vistas. Solamente lo queria hacer cuando el prg estuviera abierto (no se porque, cuando trabajan en el prg, la barra de tareas oculta la mitad de los botones que estan en la base del prg), pero si queda oculta permanentemente y falla el prg deberan llamar a sistemas.
Saludos.

ecfisa 28-02-2012 21:13:49

Hola shoulder.

Realmente no sé si te entendí bién tu planteo. Pero si la propiedad BorderStyle del Form es igual bsSizeable, creo que la solución está desde Windows mismo:

Click derecho sobre el ícono botón de inicio -> Propiedades -> Barra de tareas -> Ocultar automáticamente la barra de tareas.


Saludos.

madiazg 28-02-2012 23:09:16

Gracias,, funciona correctamente.

shoulder 29-02-2012 18:48:18

Ocultar Barra de Windows
 
Gracias ecfisa, borderstyle esta como vos me decis, el tema es que desde mi maquina donde hice el PRG, se ve perfecto, el mismo termina antes de la barra de tareas, cuando voy a las otras Pcs que tienen la misma resolucion la barra de tarea tapa la mitad de los botones de la parte inferior del PRG y no se el porque- . Por eso preguntaba si desde delphi podia ocultar la barra de tareas en forma parcial que pasando el mouse se vea, ya que la empresa tiene como 90 pcs.

Saludos-


La franja horaria es GMT +2. Ahora son las 04:52:14.

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