07. december 2005 - 09:43Der er
10 kommentarer og 1 løsning
Genvejsmenu i proceslinjen
Jeg har lagt mærke til, at der kun fremkommer mulighederne gendan, minimer og luk, når jeg højreklikker på mit Delphiprogram i proceslinjen. I andre programmer fremkommer der ydermere flyt, størrelse og maksimer. Det er en helt almindelig form, jeg bruger. Hvordan får jeg min genvejsmenu udvidet med ovennævnte muligheder
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
procedure TMainForm.FormCreate(Sender: TObject); var hSysMenu: HMENU; begin
{API for setting up tray icons} IconCount:=0; IconData.cbSize:=sizeof(IconData); IconData.Wnd:= Handle; IconData.uID:=100; IconData.uFlags:= NIF_Message or NIF_Icon or NIF_TIP; IconData.uCallbackMessage:=WM_User + 1; IconData.hIcon:= LoadIcon(HInstance,'MAINICON'); StrPCopy(IconData.szTip, Application.Title); Shell_NotifyIcon(NIM_ADD,@IconData);
Application.OnMessage:=AppMessageEvent; // Add this item to the Application's System Menu hSysMenu := getSystemMenu(Application.handle, false ); AppendMenu( hSysmenu, MF_STRING, $100, 'About...' );
// Add this item to the Form's System Menu hSysMenu := getSystemMenu(handle, false ); AppendMenu( hSysmenu, MF_SEPARATOR, 0, ''); AppendMenu( hSysmenu, MF_STRING, $100, 'About...' );
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public {This declaration is of the type TMessageEvent which is a pointer to a procedure that takes two variable arguments of type TMsg and Boolean, respectively}
procedure WinMsgHandler(var Msg : TMsg; var Handled : Boolean); end;
var Form1: TForm1;
const MyItem = 100; {Here's the menu identifier. It can be any WORD value}
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin
{First, tell the application that its message handler is different from the default} Application.OnMessage := WinMsgHandler;
{Add a separator} AppendMenu(GetSystemMenu(Self.Handle, False), MF_SEPARATOR, 0, '');
{Add your menu choice. Since the Item ID is high, using the MF_BYPOSITION constant will place it last on the system menu} AppendMenu(GetSystemMenu(Self.Handle, False), MF_BYPOSITION, MyItem, 'My Men&u Choice');
end;
procedure TForm1.WinMsgHandler(var Msg : TMsg; var Handled : Boolean); begin {if the message is a system one...} if Msg.Message=WM_SYSCOMMAND then if Msg.wParam = MyItem then {Put handling code here. I've opted for a ShowMessage for demonstration purposes} ShowMessage('You picked my menu!!!'); end;
Tak, jeg kan få det anden stykke kode til at virke fint, men det kniber med "IconData" i første kode. Hvilket objekt skal det oprettes af? Er det i øvrigt muligt af føje samme punkt til genvejsmenuen, når man højreklikker på processlinien?. Det fremkommer kun, når man klikker på selve formen?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.