Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
barra de tareas

Hola, me gustaría saber cómo modificar la propiedad de la barra de tareas "Mantener la barra de tares siempre visible" mediante código. He buscado y no encuentro nada. Si alguien supiera la solución se lo agradecería.

Saludos.
Responder Con Cita
  #2  
Antiguo 22-10-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 17
TOPX Va camino a la fama
Hola,

Yo no se del tema, pero de chismoso he buscado y encontré:

http://www.clubdelphi.com/foros/show...96&postcount=6

http://www.chami.com/tips/delphi/073198D.html

http://support.microsoft.com/kb/143117

http://dn.codegear.com/article/26977

http://www.experts-exchange.com/Prog..._10225583.html
__________________
"constructive mind, destructive thoughts"

Última edición por TOPX fecha: 22-10-2008 a las 21:34:53. Razón: Quitar cita de experts-exchange ...
Responder Con Cita
  #3  
Antiguo 22-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Je, je, no recordaba cómo obtener el identificador de la barra. Con esa información, podemos usar este procedimiento:

Código Delphi [-]
const
  ABM_SETSTATE = 10;

{
  Modifica la propiedad "siempre visible" de la barra de tareas
  Uso:
    SetTaskBarAlwaysOnTop(true) activa la propiedad
    SetTaskBarAlwaysOnTop(false) desactiva la propiedad
}
procedure SetTaskBarAlwaysOnTop(OnTop: Boolean);
var
  Data: TAppBarData;
  State: Integer;

begin
  // Inicializar estructura de datos
  ZeroMemory(@Data, SizeOf(Data));
  Data.cbSize := SizeOf(Data);

  // Obtener el estado actual de la barra
  State := ShAppBarMessage(ABM_GETSTATE, Data);

  // Prender o apagar la bandera según sea el caso
  if OnTop then
    State := State or ABS_ALWAYSONTOP
  else
    State := State and not ABS_ALWAYSONTOP;

  // Indicar el identificador de la barra
  Data.hWnd := FindWindow('Shell_TrayWnd', nil);

  // Asignar el nuevo estado
  Data.lParam := State;
  ShAppBarMessage(ABM_SETSTATE, Data);
end;

// Saludos
Responder Con Cita
  #4  
Antiguo 22-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
Gracias

Gracias por responder ante todo.
La solución de TOPX oculta o muestra la barra de tareas pero no cambia la propiedad "mantener siempre visible".
La solución de roman es justo lo que estaba buscando, aunque no me funciona del todo bien. Si le indico que deshabilite la opcion "mantener siempre visible" sí funciona, pero en cambio cuando quiero habilitarla no funciona, sino que me activa la propiedad "ocultar automáticamente".

No sé cual será el motivo, seguiré investigando y muchas gracias por la ayuda.
Responder Con Cita
  #5  
Antiguo 22-10-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 17
TOPX Va camino a la fama
luis1980,

La cita que puse al final no era la solución ... lo importante eran los links que daban una idea de "encontrar" la barra y "obtener" su 'auto hide'.

Y que de hecho complementó magistralmente Roman.
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #6  
Antiguo 22-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por luis1980 Ver Mensaje
Si le indico que deshabilite la opcion "mantener siempre visible" sí funciona, pero en cambio cuando quiero habilitarla no funciona, sino que me activa la propiedad "ocultar automáticamente".
Es muy raro. ABM_SETSTATE sirve para ajustar las propiedades "always on top" y "autohide". ¿No habrás escrito ABS_AUTOHIDE en lugar de ABS_ALWAYSONTOP?

// Saludos
Responder Con Cita
  #7  
Antiguo 23-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
Solucionado

Ya está solucionado, era culpa mia perdón, sólo era un pequeño error al pasarlo a c++.
Muchas gracias a los dos.
Responder Con Cita
  #8  
Antiguo 23-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No me había fijado que estábamos en el foro de C++; pido disculpas. ¿Podrías poner aquí la traducción a C, a fin de que otros puedan beneficiarse?

// Saludos
Responder Con Cita
  #9  
Antiguo 23-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
Solución en c++

Es algo menos elegante pero funciona. La variable state representa las propiedades de la barra de tareas "Mantener siempre visible" y "Ocultar automáticamente", según el valor de esta variable puedes activar o desactivar una, otra, o las dos. En este ejemplo sólo variamos el valor de "siempre visible", dejando como esté "ocultar automáticamente".

void SetTaskBarAlwaysOnTop()
{ /* 0-> NINGUNA; 1-> AUTOHIDE ; 2 -> ALWAYSONTOP ; 3-> AUTOHIDE Y ALWAYSONTOP.*/
int state;
TAppBarData data;


data.cbSize = sizeof(TAppBarData);
state = SHAppBarMessage(ABM_GETSTATE,&data);
if (state == 0)
state = 2;
else if (state == 1)
state = 3;
else if (state == 2)
state = 0;
else if (state == 3)
state = 1;
data.hWnd = FindWindow("Shell_TrayWnd",0);
data.lParam = state;
SHAppBarMessage(ABM_SETSTATE,&data);

}
Responder Con Cita
  #10  
Antiguo 23-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Los equivalentes en C a los operadores and, or y not de pascal son &, | y !. El código que tienes puedes ponerlo así:

Código:
if ((state & ABS_ALWAYSONTOP) != 0)
{
  state = state & !ABS_ALWAYSONTOP;
}
else
{
  state = state | ABS_ALWAYSONTOP;
}
// Saludos
Responder Con Cita
  #11  
Antiguo 24-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
Así no me funciona

De esa manera que dices, roman, no me funciona del todo correctamente, porque cuando tengo activa la opción "ocultar automáticamente la barra de tareas", si ejecuto la función me desactiva esa propiedad junto con la de "Mantener siempre visible", y yo sólo quiero modificar "Mantener siempre visible", y dejar las demás propiedades como estén en ese momento.
Por eso al final usé las variables numéricas, aunque la verdad que es algo más cutre, pero bueno.

Muchas gracias.
Responder Con Cita
  #12  
Antiguo 24-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo que pasa es que estaba yo equivocado. La negación bit a bit en C no es con ! (negación lógica) sino con ~. Entonces debería quedar así:

Código:
if ((state & ABS_ALWAYSONTOP) != 0)
{
  state = state & ~ABS_ALWAYSONTOP;
}
else
{
  state = state | ABS_ALWAYSONTOP;
}
// Saludos
Responder Con Cita
  #13  
Antiguo 24-10-2008
luis1980 luis1980 is offline
Miembro
 
Registrado: may 2008
Posts: 33
Poder: 0
luis1980 Va por buen camino
Funciona!!!

Así sí que funciona perfectamente roman, muchísimas gracias.
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
Barra de Tareas chalys Varios 3 03-10-2008 16:56:53
No en la Barra de Tareas D-MO Varios 4 13-10-2005 01:55:18
Barra de tareas Esau Varios 5 17-02-2005 21:47:16
barra de tareas agora18 Varios 1 17-02-2004 03:01:39
Barra de Tareas frankmch Varios 3 04-09-2003 16:58:16


La franja horaria es GMT +2. Ahora son las 01:55:47.


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