PDA

Ver la Versión Completa : Ocultar Iconos


Nathan
17-03-2004, 17:05:58
Hola a todos
sabe alguien como puedo ocultar los iconos que aparecen al lado del reloj (como el msn, yahoo y otros )a traves de mi aplicacion, tambien si es posible cambiar estos iconos por otros .. :confused:




Saludos .... Nathan. :)

delphi.com.ar
17-03-2004, 17:21:15
Mmmmm... no creo que te sirva, pero esto oculta todo el panel:
var
hTrayWnd,
hTryNotify: HWND;
begin
hTrayWnd := FindWindow('Shell_TrayWnd',nil);
if hTrayWnd <> 0 then
begin
hTryNotify := FindWindowEx(hTrayWnd, 0, 'TrayNotifyWnd', nil);
if hTryNotify <> 0 Then
ShowWindow(hTryNotify, SW_HIDE);
end;
end;

Nathan
17-03-2004, 18:48:58
de todas formas gracias delphi.com.ar


Nathan.

roman
18-03-2004, 03:09:51
Por lo que veo, el área que almacena los iconos no es otra cosa que una Toolbar. Partiendo de lo dicho por delphi.com.ar encuentras el identificador de dicha barra:


hToolbar := FindWindowEx(hTryNotify, 0, 'ToolbarWindow32', nil);


y ahora puedes comenzar a mandarle mensajes a esta ventana tales como TB_DELETEBUTTON o TB_HIDEBUTTON, por ejemplo:


SendMessage(hToolBar, TB_HIDEBUTTON, 3, 1)


ocultará el botón número 3 mientras que


SendMessage(hToolBar, TB_HIDEBUTTON, 3, 0)


lo mostrará de nuevo.

El mensaje TB_CHANGEBITMAP te servirá para cambiar el bitmap.

Este último no lo he probado pero los dos primeros sí y han funcionado.

La dificultad aquí es hallar el número de botón correcto. En principio parecería que van numerados desde cero de izquierda a derecha pero puede no ser así ya que, por ejemplo, si le mando el mensaje TB_BUTTONCOUNT me devuelve un número de botones mayor a los que veo.

Además al ocultarlo o borrarlo queda el hueco, es decir, el tamaño de esta área de iconos no se reajusta solo. Sin embargo vi por ahí y sí funciona, que si insertas tú mismo un icono, el área se reajusta. Aunque el efecto no es muy nítido puedes insertar e inmediatamente quitar un icono 'de palo' cada vez que ocultes o vuelvas a mostrar iconos.

Por supuesto que no está de más mencionar que estos iconos no son sólo dibujitos sino que son puntos de entrada a ciertas aplicaciones de manera que el quitarlos podría en algunos casos traer consecuencias inesperadas.

Pero en fin, ya tienes con que empezar a jugar :D

Para mayor información busca en la ayuda del sdk de Windows acerca del control Toolbar para que veas qué mensajes puedes mandar.

// Saludos

Nathan
18-03-2004, 19:45:32
Gracias .... :)




Nathan.

roman
22-03-2004, 16:45:31
Nathan

Respecto del mensaje privado que me mandaste dos cosas:

1. Es absolutamente imposible de leer. El código no sólo no está indentado sino que salió todo en una sola línea.

2. No me es posible responder de forma privada.

Vuelve a colocar aquí tu mensaje y con gusto intentaremos ayudarte. El objetivo de estos foros es ayudar a todos los que pudieran estar interesados en un determinado tema, cosa que no es posible tratando los mensajes de forma privada.

// Saludos

Nathan
23-03-2004, 16:37:43
Hola roman
parece que el anterior post no salio,pero va de nuevo
lo que pasa es que ya probe con este codigo pero no oculta el icono.


var
hTrayWnd, hToolbar, TB_HIDEBUTTON,
hTryNotify: HWND;
begin
hTrayWnd := FindWindow('Shell_TrayWnd',nil);
if hTrayWnd <> 0 then
begin
hTryNotify := FindWindowEx(hTrayWnd, 0, 'TrayNotifyWnd', nil);
hToolbar := FindWindowEx(hTryNotify, 0, 'ToolbarWindow32', nil);
if hTryNotify <> 0 Then
SendMessage(hToolBar, TB_HIDEBUTTON, 3, 1);
// ShowWindow(hTryNotify, SW_HIDE);
end;
end;




ademas TB_HIDEBUTTON sale que no fue inicializada, que es lo que estoy haciendo mal :confused:



Saludos ..... Nathan.

roman
23-03-2004, 16:50:49
TB_HIDEBUTTON no es una variable. Es una constante y se encuentra definida en la unidad CommCtrl al igual que los otros mensajes que te mencioné antes.

Nuevamente te recomiendo consultar el SDK de Windows (http://msdn.microsoft.com/library/default.asp) para mayor referencia acerca de controles Toolbar (http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/toolbar/reflist.asp).

No estaría mal tampoco un repaso a la función SendMessage y la manera en que Windows procesa mensajes. Sé que normalmente uno no lidia con esto en Delphi pero siempre es bueno saber de estos temas.

// Saludos

pd: aprende a usar la etiqueta code para cuando escribas mensajes en el foro.

gynch
24-03-2004, 14:18:47
existe una clave en el registro para hacer estas cosas.

Key:[HKEY_USER\...\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
Value Name: NoTrayContextMenu
Data Type: REG_DWORD
Data:(0 = disabled, 1 = enabled)

roman
24-03-2004, 16:23:11
Esta clave inhabilita los menús contextuales mas no oculta los iconos.

// Saludos