Sistem Menüsü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Uzak
Üye
Mesajlar: 11
Kayıt: 31 Ara 2007 10:44
Konum: Güney
İletişim:

Sistem Menüsü

Mesaj gönderen Uzak »

Programın sol üst köşesindeki simgesine tıklanınca gelen menüyü nasıl kontrol edebiliriz?
Son susan söyler son sözü.
_____________<ô><ô>
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
Uzak
Üye
Mesajlar: 11
Kayıt: 31 Ara 2007 10:44
Konum: Güney
İletişim:

Mesaj gönderen Uzak »

Programın başlat çubuğundaki düğmesine sağ tıklanınca gelenen menü ile aynı olur düşüncesiyle ikisini birden sormamıştım. Verdiğin bağlantı programdaki menüyü anlatıyor. Güzel bi örnek. Teşekkürler.

Program çalışınca başlat çubuğunda oluşan program düğmesine sağ tıklanınca gelen menüyü nasıl kontrol edebilirim? Teşekkürler..

Adı görev çubuğu galiba.
Son susan söyler son sözü.
_____________<ô><ô>
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

görev çubuğundaki simgeye tıklayıncada aynı menu gelirki ?
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
Uzak
Üye
Mesajlar: 11
Kayıt: 31 Ara 2007 10:44
Konum: Güney
İletişim:

Mesaj gönderen Uzak »

ikutluay yazdı:görev çubuğundaki simgeye tıklayıncada aynı menu gelirki ?
Hayır. Farklı menüler de görüyorum ben.
Son susan söyler son sözü.
_____________<ô><ô>
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

genelde komutlar aynı.. çünkü menü aynı. ancak bazı durumlarda değişiyor neden formun yapısı ve uygulama console ise vs gibi durumlarda.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Mesaj gönderen akdatilla »

merhaba
Aşağıdaki kodları delphi.about.com adresinden buldum.
Bu bileşen delphi programının başlat çubuğundaki çerçevesi içerisinde mouse sağ tuşu ile açılan menünün seçeneklerini belirlemeyi sağlıyor.

Kod: Tümünü seç

//from Zarko Gajic
unit TaskBarMenu;

interface

uses
   SysUtils, Classes, Menus, Messages, Windows, Forms, Controls;

type
   TTaskBarMenu = class(TPopupMenu)
   private
     hookHandle : THandle;
     oldWndProc: Pointer;
     newWndProc: Pointer;
   protected
     procedure Hook;
     procedure UnHook;
     procedure AppWndProc(var Msg: TMessage) ;
   public
     constructor Create(AOwner: TComponent) ; override;
     destructor Destroy; override;
   end;

procedure Register;

implementation

const
   WM_TASKBAR_MENU = $0313; // magic!

   WM_POPUP_MENU = WM_USER + 1; //custom message

var
   thisOnce : TTaskBarMenu = nil;


procedure Register;
begin
   RegisterComponents('delphi.about.com', [TTaskBarMenu]) ;
end;

{ TTaskBarMenu }

procedure TTaskBarMenu.AppWndProc(var Msg: TMessage) ;
begin
   case Msg.Msg of
     WM_TASKBAR_MENU: PostMessage(hookHandle, WM_POPUP_MENU, 0, 0) ;
     WM_POPUP_MENU: Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y) ;
   else
     Msg.Result := CallWindowProc(oldWndProc, hookHandle, Msg.Msg, Msg.wParam, Msg.lParam) ;
   end;
end; (*AppWndProc*)

constructor TTaskBarMenu.Create(AOwner: TComponent) ;
begin
   if Assigned(thisOnce) then
   begin
     raise Exception.Create('Only one instance of this component can be used per application!') ;
   end
   else
   begin
     inherited;
     thisOnce := self;
     hookHandle := Application.Handle;
     Hook;
   end;
end; (*Create*)

destructor TTaskBarMenu.Destroy;
begin
   thisOnce := nil;
   UnHook;
   inherited;
end; (*Destroy*)

procedure TTaskBarMenu.Hook;
begin
   oldWndProc := Pointer(GetWindowLong(hookHandle, GWL_WNDPROC)) ;

   newWndProc := Classes.MakeObjectInstance(AppWndProc) ;

   if not (csDesigning in ComponentState) then SetWindowLong(hookHandle, GWL_WNDPROC, longint(newWndProc)) ;
end; (*Hook*)

procedure TTaskBarMenu.UnHook;
begin
   SetWindowLong(hookHandle, GWL_WNDPROC, longint(oldWndProc)) ;

   if Assigned(newWndProc) then Classes.FreeObjectInstance(newWndProc) ;

   NewWndProc := nil;
end; (*UnHook*)

end.
Cevapla