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 04-11-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Utilizar codigo

Saludos, he encontrado en esta página: http://64.233.183.104/search?q=cache...lnk&cd=1&gl=es un código que me gustaría guardalo en una unidad y luego utilizarlo en mi programa, no se porque siempre me da error al hacerlo, alguien me puede indicar los pasos?

gracias.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #2  
Antiguo 04-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sacado de Tmania:
Cita:
-Necesitaremos un PopUpMenu en nuestra form, que será el que sea invocado cuando pulsemos sobre el icono de la bandeja del sistema, así que vete haciendote uno y lo llamas
PopUpMenu1.
-Dentro de ese menú, pondremos una opcion llamada Abrir que será la que restaure la aplicación.
-Necesitarás añadir 'ShellApi' en el uses de tu form para que entienda bien la estructura que maneja el icono.
-Para colocar el icono, necesitamos usar una estructura de tipo TNotifyIconData, así que declarate una en el private de tu form. En el ejemplo la he llamado IconData:


private
IconData : TNotifyIconData;



-Bien, ahora necesitamos hacer algún invento que nos permita detectar cuando es minimizada la form.
Usaremos la técnica del truco:

[102] - Ejecutar algo ANTES de que tu aplicacion sea minimizada

ya que nos viene de cine.
Se trata de capturar un mensaje, así que, ponemos la declaración correspondiente en el private de la form:


private
IconData : TNotifyIconData;
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;



y su correspondiente procedure en la parte implementation:



procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) then begin
with IconData do
begin
cbSize := sizeof(IconData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 1;
{Usamos de icono el mismo de la aplicacion}
{We use the same icon as the application}
hIcon := Application.Icon.Handle;
{Como Hint del icono, el nombre de la aplicacion}
{The name of te app for the hint of the icon}
StrPCopy(szTip, Application.Title);
end;
{Ponemos el icono al lado del reloj}
{Place the icon next to the clock}
Shell_NotifyIcon(NIM_ADD, @IconData);
{Ocultamos la Form...}
{Hide the form...}
Hide;
end else DefaultHandler(Msg);
end;



Como ves, lo que hago dentro de la procedure del mensaje es rellenar la estructura del icono, para lo cual, uso el icono y el nombre de la aplicacion, y luego lo coloco en la bandeja del
sistema con la llamada al Api :


Shell_NotifyIcon(NIM_ADD, @IconData);



-Hasta aqui hemos logrado que en lugar de minimizarse, nuestra aplicación se oculte y coloque su icono en la bandeja del sistema. Ahora bien, necesitamos otro invento que nos permita
atender dicho icono. Lo haremos capturando otro mensaje: el WM_USER+1 que es el que le hemos dicho al icono que nos mande cuando el usuario lo pinche.
Así que vamos allá, declaración en la private de la form:


procedure Espabila(var Msg : TMessage); message WM_USER+1;


y procedure correspondiente en la implementation:


procedure TForm1.Espabila(var Msg : TMessage);
{Aqui se recibe la pulsacion sobre el icono}
{Here we recieve the click on the icon}
var
p : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
SetForegroundWindow(Handle);
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
PostMessage(Handle, WM_NULL, 0, 0);
end;
end;


Como ves, en este mensaje lo que hacemos es dibujar el PopUpMenu1.

-Ahora vamos con la opcion Abrir del PopUpMenu1:


procedure TForm1.Abrir1Click(Sender: TObject);
begin
{Mostramos de nuevo la form}
{We show the form again}
Form1.Show;
ShowWindow(Application.Handle, SW_HIDE);
{Y nos cargamos el icono de la system tray}
{Destroy the systray icon}
Shell_NotifyIcon(NIM_DELETE, @IconData);
IconData.Wnd:=0;
end;


En ella, lo que hacemos es, aparte de mostrar la form de nuevo, cargarnos el icono.
-Como siempre, al final deshacemos lo hecho antes de salir... así que en el evento OnDestroy de la form pondremos la siguiente linea:


procedure TForm1.FormDestroy(Sender: TObject);
begin
{Quitamos el icono (en el caso de haberlo puesto antes...)}
{Take off the icon (in case of had placed it before.....)}
if IconData.Wnd <> 0 then Shell_NotifyIcon(NIM_DELETE, @IconData);
end;


El if distinto de cero tiene como misión el detectar si el icono fué o no puesto en la bandeja del sistema, para lograr así quitarlo sólo en el caso de haberlo colocado antes.
Saludos
Responder Con Cita
  #3  
Antiguo 04-11-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Muchas gracias ;-) voy a probarlo.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #4  
Antiguo 04-11-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Va genial, pero solo una cosilla, se podría poner como icono cuando se minimiza mi programa el icono de mi form? es que me sale el icono de delphi (el siete ese con el rayo).

gracias.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #5  
Antiguo 04-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si el icono esta guardado en el proyecto sale el que pongas.
Tienes que ir a project y buscar el icono de tu aplicacion, colocarlo y guardarlo, asi aparecera.
Saludos
Responder Con Cita
  #6  
Antiguo 04-11-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
No se como hacer exactamente lo que me dices, puede ser algo asi?:

proyect/add to proyect

selecciono el icono y doy a abrir, pero me da un error.

O se hace de otra forma?
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #7  
Antiguo 04-11-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Project
Options
Application
Presionas el boton (Load Icon)
Buscas el icono, le das OK
Listo.
Saludos
Responder Con Cita
  #8  
Antiguo 04-11-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
UOOOOOOOOOOOOOOOOO queda chulísimo jeje muchas gracias.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
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
Utilizar DLL ElDuc Varios 2 02-02-2007 19:59:02
Utilizar Mem[] jsamuelsv Varios 0 14-10-2006 17:58:13
contraer por codigo, cxGrid (+) los nodos abiertos cerrarlos por codigo sakuragi OOP 6 27-07-2005 18:23:07
Utilizar La Web Cam jostrix Varios 5 29-05-2005 15:03:13
de codigo VB a codigo Delphi ingel Impresión 2 20-07-2004 14:15:44


La franja horaria es GMT +2. Ahora son las 16:48:59.


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