Arşiv Anasayfa Delphi Soruları
Sayfalar: 1
onclose Gönderen: lola Tarih: 09 May 2008 18:17:21
onclose a application.hide yada form1.hide yaptığımda hide yerine uygulama kapanıyor x ya basınca hide yapmanın yolu varmı?
Ynt: onclose Gönderen: barutali Tarih: 09 May 2008 19:02:20
Kodlar aşağıdaki şekildedir... Kendine göre editlersin ..

Not : Unit1.pas ı olduğu gibi kopyala yapıştır yaptım ...

Forma 1 adet popup menu ekliyoruz ...
Pop-up menuye Göster ve Çıkış diye iki adet item ekliyoruz ...

unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, Menus, ShellAPI;
 
const
 WM_ICONTRAY = WM_USER + 1;
 
type
 TForm1 = class(TForm)
   PopupMenu1: TPopupMenu;
   mnuShow: TMenuItem;
   mnuExit: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure mnuShowClick(Sender: TObject);
   procedure mnuExitClick(Sender: TObject);
 private
   { Private declarations }
   procedure Icontray(var Msg: TMessage); message WM_ICONTRAY;
 public
   { Public declarations }
 end;
 
var
 Form1: TForm1;
 NotifyIconData: TNotifyIconData;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 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;
 Form1.Show;
//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);
   PopupMenu1.Popup(CursorPos.x, CursorPos.y);
   PostMessage(Handle, WM_NULL, 0, 0);
 end else
   inherited;
end;
 
procedure TForm1.mnuShowClick(Sender: TObject); // POP-UP menu deki Göster itemının kodları
begin
 Show;
 Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
end;
 
procedure TForm1.mnuExitClick(Sender: TObject); // POP-UP menu deki Çıkış itemının kodları
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;
 
end.

Ynt: onclose Gönderen: babahayati Tarih: 09 May 2008 19:22:20
onclose events'ı form kapatılmadan önce yapılmak istenenlerin yapıldığı alan değil mi zaten?
Sen formu kapatmadan önce gizlemeye çalışıyorsun? Ama emin ol bunu başarıyorsun Smile

Ya Ali'nin kodları ile projeyi system tray'a gizleyeceksin yada  formdaki dialog kutularını kaldırıp gerekli tuşları sen koyup yeniden kodlayacaksın (X buttonuna form1.hide vs vs) . Eğer  'borderstyle' i "none" yaparsan tavsiyem onun yerine, formun sadece içi boş bir alan gibi görünmemesi için setwindowlong api sini kullanman olacaktır (forma 3 boyutlu görünüm kazandırır)

(borderstyle dokunmuyoruz bssizeable kalsın)
procedure TForm1.FormCreate(Sender: TObject);
begin
  setwindowlong(handle,GWL_STYLE, getwindowlong(handle,GWL_STYLE)
  AND NOT WS_CAPTION);
  height:=height+1; // IDE nin değişikliği görmesi için
end;

Ynt: onclose Gönderen: barutali Tarih: 09 May 2008 19:47:17
evet @hayati hocam benim yolladığım kodda system tray a iniyor program eğer form a icon kısmından bi ikon eklenmesse gizlenmiş duruma geçiyor çünkü system tray da gözükcek bi icon olmuyor Smile Kullanıcıyı biraz aldatmacada diyebiliriz SmileSmile
Ynt: onclose Gönderen: lola Tarih: 09 May 2008 20:16:16
tamamdır
Action := caNone;
Hide;
Shell_NotifyIcon(NIM_ADD, @stray);

Ynt: onclose Gönderen: lola Tarih: 09 May 2008 20:37:29
yardımcı olmak için system tray yaptığım kodu sizinle paylaşayım

unit Unit17;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, shellapi, Menus;

type
  TForm17 = class(TForm)
    systraypopup: TPopupMenu;
    pasifyap1: TMenuItem;
    k1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure pasifyap1Click(Sender: TObject);
    procedure k1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form17: TForm17;
  stray:NOTIFYICONDATA;
  implementation

{$R *.dfm}


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

procedure TForm17.FormCreate(Sender: TObject);
begin
stray.cbSize:=SizeOf(stray);
Stray.Wnd:=Form17.Handle;
stray.uID:=0;
stray.szTip:='bizim uygulama';
stray.uCallbackMessage:=$200;
stray.uFlags:=7;
stray.hIcon:=Application.Icon.Handle;
//system traya ekle
shell_notifyicon(0, @stray);
end;
procedure TForm17.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var m:tpoint;
begin
getcursorpos(M);

case x of
$203:  //cift tikla
begin
form17.show;
Application.Restore;
Application.BringToFront;
end;
$205: systraypopup.Popup(m.x,m.y); //sag tikla
end;
end;

procedure TForm17.k1Click(Sender: TObject);
begin
Application.Terminate;
Shell_NotifyIcon(2,@stray);
end;

procedure TForm17.pasifyap1Click(Sender: TObject);
begin
form17.show;
Application.Restore;
Application.BringToFront;
end;

end.