Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema al llamar a un procedure desde otro (https://www.clubdelphi.com/foros/showthread.php?t=59302)

sidneyb 21-08-2008 22:47:39

problema al llamar a un procedure desde otro
 
Buenas tardes foro, un cordial saludo a todos.

De antemano gracias por su atencion. Acudo a uds por el siguiente detalle;

estoy tratando de llamar al siguiente procedure:


Cita:

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;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @IconData);
Hide;
end else DefaultHandler(Msg);
end;

dentro del siguiente procedure:

Cita:

procedure TForm1.FormCreate(Sender: TObject);
begin

end;
en el primero estoy ocultando de la barra de tareas para colocar, al minimizar, el form a un lado del reloj, pero el solo lo hace al minimizar, lo que quiero dentro del segundo procedure es ocultarlo de la misma manera pero al crear el formulario, podrian ayudarme a llamar el procedimiento? les agradezco de antemano, feliz tarde.

En todo caso, lo que realmente deseo es que la aplicacion se inicie oculto minimizado a un lado del reloj. muchas gracias

BlueSteel 22-08-2008 00:14:44

Hola.

no estoy seguro, pero te puede servir este truco

Salu2:p:D

dec 22-08-2008 04:31:13

Hola,

¿No podrías usar, directamente, "Application.Minimize()" dentro de "FormCreate"?

cHackAll 22-08-2008 19:37:46

Lo que Dec comenta funciona exceptuando que no oculta el boton de la barra de tareas, para solucionar ésto y darle un efecto adicional (el de minimizado) hago un par de modificaciones a tu codigo (al que supongo que es porque no lo copiaste completo);

Código Delphi [-]
//...
 
uses ShellAPI;
 
var
 IconData: TNotifyIconData = (cbSize: SizeOf(IconData); uID: 100;
                              uFlags: NIF_MESSAGE + NIF_ICON + NIF_TIP;
                              uCallbackMessage: WM_USER + 1);
 
procedure TForm1.FormMinimize(Sender: TObject);
begin
 with IconData do
  begin
   Wnd := Handle;
   hIcon := Application.Icon.Handle;
   StrPCopy(szTip, Application.Title);
   Shell_NotifyIcon(NIM_ADD, @IconData);
   ShowWindow(Application.Handle, SW_HIDE);
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMinimize := FormMinimize;
 Application.Minimize;
end;

Saludos

sidneyb 22-08-2008 20:25:03

probe de tres maneras pero me falta algo
 
Buenas tardes colegas, como les va? intente de tres maneras distintas lo cual me funcion, pero me persiste un pequeño detalle prueba tras prueba y cambio tras cambio del codigo, el detalle es el siguiente, le coloque un popupmenu de manera que al darle un click al icono minimizado aparezca las opciones de configurar y cerrar... el detalle esta que al hacerle el primer y solo el primer click el formulario completo se muestra en pantalla, cosa que quiero prevenir, me imagino que es por que estoy ejecutando un application.minimize en el procedimiento onCreate. Es lo unico que me falta, creen que podrian ayudarme? un saludo, gracias a todos

cHackAll 22-08-2008 20:30:42

Quizá sería mas facil (para nosotros), si pegas la parte en que recives el mensaje "WM_USER + 1", para ver como estas manejando los mensajes provenientes del SysTray...

PD; tambien seria de utilidad saber si nunca piensas mostrar alguna ventana en tu aplicacion.

sidneyb 22-08-2008 20:52:25

por supuesto cHackAll
 
Si estoy permitiendo ver un formulario al momento de darle click sobre la opcion configurar del popupmenu1, en el cual tengo solo dos opciones, configurar que muestra en si el formulario como tal, y la segunda opcion es el cerrar, que cumple su funcion tal cual. de manera que si muestro en algun momento la aplicacion.

Este es el procedimiento al cual hago referencia al momento en que minimizo desde la propia ventana una vez abierta en pantalla luego de haber dado click en el configurar del popupmenu, la cual me funciona a la perfeccion:

Cita:

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;
hIcon := Application.Icon.Handle;
end;
Shell_NotifyIcon(NIM_ADD, @IconData);
Hide;
end else DefaultHandler(Msg);
end;
luego de haberse ejecutado este procedimiento no tengo problemas al minimizar y darle cualquier click encima ya que solo me muestra solo el popupmenu ya mencionado.

el problema esta al ejecutar el onCreate en el que ya me habian colaborado uds alli arriba, luego de ejecutarse se minimiza, pero al darle un click, el primer click, se me muestra el popupmenu junto al formulario de la aplicacion, te muestro aca finalmente como lo deje:

Cita:

procedure TForm1.FormMinimize(Sender: TObject);

begin
with IconData do
begin
cbSize := sizeof(IconData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_USER + 1;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @IconData);
Hide;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize := FormMinimize;
Application.Minimize;
ShowWindow(Application.Handle, SW_HIDE);
end;
aca recibo la pulsacion sobre el icono minimizado

Cita:

procedure TForm1.mostrarmenu(var Msg : TMessage);

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;
y por supuesto

Cita:

Uses..... ShellAPI

private
{ Private declarations }
IconData : TNotifyIconData;
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure mostrarmenu(var Msg : TMessage); message WM_USER+1;
gracias por tu colaboracio

cHackAll 22-08-2008 21:18:58

Código Delphi [-]
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;
 
type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    mnuConf: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure mnuConfClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
   procedure MostrarMenu(var Msg: TMessage); message WM_USER + 1;
   procedure FormMinimize(Sender: TObject);
   procedure FormRestore(Sender: TObject);
  public
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses ShellAPI;
 
var
 IconData: TNotifyIconData = (cbSize: SizeOf(IconData); uID: 100;
                              uFlags: NIF_MESSAGE + NIF_ICON + NIF_TIP;
                              uCallbackMessage: WM_USER + 1);
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 with IconData do
  begin
   Wnd := Handle;
   hIcon := Application.Icon.Handle;
   StrPCopy(szTip, Application.Title);
  end;
 Application.OnMinimize := FormMinimize;
 Application.OnRestore := FormRestore;
 WindowState := wsMinimized;
end;
 
procedure TForm1.FormMinimize(Sender: TObject);
begin
 Shell_NotifyIcon(NIM_ADD, @IconData);
 ShowWindow(Application.Handle, SW_HIDE);
end;
 
procedure TForm1.FormRestore(Sender: TObject);
begin
 Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
 
procedure TForm1.MostrarMenu(var Msg: TMessage);
begin
 if Msg.lParam = WM_RBUTTONDOWN then
  with Mouse.CursorPos do
   PopupMenu1.Popup(X, Y);
end;
 
procedure TForm1.mnuConfClick(Sender: TObject);
begin
 Application.Restore;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Action := caNone;
// Application.Minimize;
end;
 
end.


La franja horaria es GMT +2. Ahora son las 16:32:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi