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
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.