PDA

Ver la Versión Completa : button


mjjj
08-06-2007, 00:07:57
Amigos tengo 2 preguntas que hacerles...

Primero... se puede dar el nombre a cierto componete de la siguiente manera... por ejemplo button1, escribirlo como button(n), en donde 'n' toma el valor de 1... si es que se puede como seria el codigo

Segundo... tengo mi programa corriendo, pero no quiero que este siempre visible, por lo que puedo minimizarlo. En vez de minimizarlo, quisiera que quedara en la barra de estado de windows (derecha abajo), es decir que corra en un segundo plano, pero no minimizado, que quede mas escondido aun.

Es posible alguna de estas inquietudes??

Gracias

Neftali [Germán.Estévez]
08-06-2007, 10:56:35
Lo primero no lo he entendido; No se si quieres crearlos en diseño o en ejecución. Si estás pensando en algo similar a lo que se hace en Visual Basic, en Delphi no se pueden nombrar de esa manera. btn[1], btn[2],...
Puedes usar btn1, btn2,... y luego usar métodos que tiene Delphi para recorrerlos como si fuesen un array.

En cuanto a ponerlo junto al reloj, puedes buscar en los foros sobre el componente TrayIcon, TCoolTrayIcon o similares. De una forma fácil te permiten "minimizar" tu aplicación a esa zona en lugar de a la barra de tareas. También puedes usar la API directamente Shell_NotifyIcon. Revisa este (http://www.clubdelphi.com/foros/showthread.php?t=32757)hilo o este (http://www.clubdelphi.com/foros/showthread.php?t=13338)otro.

mjjj
11-06-2007, 18:42:58
yo denuevo... gracias por la ayuda... me funciona pefecto lo de poner mi programa al lado de la hora. Ahora, lo que me pasa es que aparece con ningun icono, lo que quisiera hacer es asignarle un icono cuando mi programa se coloque al lado de la hora en windows.

Estoy trabajando con delphi 2006, en windows XP... estos son los codigos que he utilizado...

const
WM_ICONTRAY = WM_USER + 1;

{ Private declarations }
NotifyInfo : TNotifyIconData;
procedure Icontray(var Msg: TMessage); message WM_ICONTRAY;

Cerrar1: TMenuItem;
Abrir1: TMenuItem;

procedure TForm1.Abrir1Click(Sender: TObject);
begin
Show;
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;

procedure TForm1.Cerrar1Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
Application.ProcessMessages;
Application.Terminate;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
// Hide;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Visible:=false;
with NotifyIconData do begin
hIcon := Icon.Handle;
StrPCopy(szTip, Application.Title);
Wnd := Handle;
uCallbackMessage := WM_ICONTRAY;
uID := 1;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
cbSize := sizeof(TNotifyIconData);
end;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;

procedure TForm1.Icontray(var Msg: TMessage);
var
CursorPos : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
GetCursorPos(CursorPos);
SetForegroundWindow(Handle); // suggested by Berend Radstaat
PopupMenu1.Popup(CursorPos.x, CursorPos.y);
PostMessage(Handle, WM_NULL, 0, 0); // suggested by Berend Radstaat
end else
inherited;
end;

espero me puedan ayudar con este problemita... este codigo lo saque de otro hilo, funciona pero no me aparece con ningun icono, la verdad es que no entiendo muy bien el codigo, solo quiero que me digan que poner y donde... muchas gracias..

Neftali [Germán.Estévez]
11-06-2007, 19:09:21
46 hilos y seguimos escribiendo el código así...:(:(:(
Lee (http://neftali.clubdelphi.com/images/ResaltarSintaxisDelphi.png)y Edita el hilo, por favor.

mjjj
11-06-2007, 19:49:05
Perdon Neftali... espero que ahora me puedas ayudar, y que asi se escriban los codigos. Gracias

He colocado un PopupMenu, y he seguido las instrucciones que se daban en otro hilo, de como se hacia, lo de colocar el programa al lado del relof de windows... el codigo que utiliz es el siguiente...


const
WM_ICONTRAY = WM_USER + 1;

{ Private declarations }
NotifyInfo : TNotifyIconData;
procedure Icontray(var Msg: TMessage); message WM_ICONTRAY;

Cerrar1: TMenuItem;
Abrir1: TMenuItem;

procedure TForm1.Abrir1Click(Sender: TObject);
begin
Show;
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;

procedure TForm1.Cerrar1Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
Application.ProcessMessages;
Application.Terminate;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
// Hide;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Visible:=false;
with NotifyIconData do begin
hIcon := Icon.Handle;
StrPCopy(szTip, Application.Title);
Wnd := Handle;
uCallbackMessage := WM_ICONTRAY;
uID := 1;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
cbSize := sizeof(TNotifyIconData);
end;
Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
end;

procedure TForm1.Icontray(var Msg: TMessage);
var
CursorPos : TPoint;
begin
if Msg.lParam = WM_RBUTTONDOWN then begin
GetCursorPos(CursorPos);
SetForegroundWindow(Handle); // suggested by Berend Radstaat
PopupMenu1.Popup(CursorPos.x, CursorPos.y);
PostMessage(Handle, WM_NULL, 0, 0); // suggested by Berend Radstaat
end else
inherited;
end;


espero me puedan ayudar con este problemita... este codigo lo saque de otro hilo, funciona pero no me aparece con ningun icono, la verdad es que no entiendo muy bien el codigo. Que parte del codigo es la que hace referencia al icono (foto) que se coloca en la barra al lado del reloj de windows.

Delphius
11-06-2007, 20:45:40
Hola,

¿Y porqué no descargas CoolTrayIcon desde torry.net?

En el componente le asignas el ícono. ¡Deja que el trabajo lo haga el componente!

Saludos,