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

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

Kullanıcıyı biraz aldatmacada diyebiliriz


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.