Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

Контекстное меню   Найти похожие ветки 

 
Андрю-ХА ©   (2004-01-13 12:08) [0]

Как доступиться к стандартному контекстному меню TMemo для его модификации?


 
Rouse_ ©   (2004-01-13 12:28) [1]

У Tmemo есть свойство PopupMenu - можно заменить стандартное, также можно использовать:

The following functions are used with menus.

CheckMenuItem
CheckMenuRadioItem
CreateMenu
CreatePopupMenu
DeleteMenu
DestroyMenu
DrawMenuBar
EnableMenuItem
GetMenu
GetMenuCheckMarkDimensions
GetMenuDefaultItem
GetMenuItemCount
GetMenuItemID
GetMenuItemInfo
GetMenuItemRect
GetMenuState
GetMenuString
GetSubMenu
GetSystemMenu
HiliteMenuItem
InsertMenuItem
IsMenu
LoadMenu
LoadMenuIndirect
MenuItemFromPoint
SetMenu
SetMenuDefaultItem
SetMenuItemBitmaps
SetMenuItemInfo
TrackPopupMenu
TrackPopupMenuEx

Obsolete Functions

AppendMenu
ChangeMenu
InsertMenu
ModifyMenu
RemoveMenu

Желаю успехов


 
Андрю-ХА ©   (2004-01-13 13:29) [2]

И все равно не понятно, каким образом мне к стандартному меню Undo\Copy\Paste\Select all\Delete добавить свои Item"ы


 
DVM ©   (2004-01-13 13:31) [3]


> И все равно не понятно, каким образом мне к стандартному
> меню Undo\Copy\Paste\Select all\Delete добавить свои Item"ы

Что непонятно то?
Если заменить стандартное меню своим, как сказали выше, то твоя задача трансформируется в:
"Как мне в мое меню добавить пункты Undo\Copy\Paste\Select all\Delete". Но это уже другой вопрос.


 
Андрю-ХА ©   (2004-01-13 15:12) [4]

> [3]
Т.е. мне "просто" надо определить 6-7 своих пунктов меню, подключить модуль Clipbrd и на OnPopup устанавливать Enabled этих самых Item"ов. С моей точки зрения -- не самый оптимальный вариант.


 
DVM ©   (2004-01-13 15:23) [5]


> С моей точки зрения -- не самый оптимальный вариант.

Пожалуй оптимальный. Другой вариант на порядок сложнее.


 
Андрю-ХА ©   (2004-01-13 15:28) [6]

> [5] Окей, спасибо за совет, придется так и сделать.


 
esVer ©   (2004-01-14 12:58) [7]

Я пробовал ниже приведенный код, но он у меня не прошел, к сожалению. Глючил иногда, пришлось отказаться.


//Add items to standard context menu. v 2.1.
//(c) Eugene Korolev  korolev"собака"soft4you"точка"com, 1999

// Этот модуль предназначен для добавления к стандартному popupmenu control"а
//windows - "Edit"а дополнительных пунктов. При желании легко переделывается
//в глобальный хук для всех приложений. Главное - идея.
//Модуль может распространяться и модифицироваться свободно только при
//сохранении копирайта. Запрещается создание non-freeware компанент на
//основе идей, взятых из этого кода.

unit ApiPopUp;

interface
uses Windows, Messages;

type
 
 TRunPopUpitem = procedure (Wnd: HWND; Menu: DWORD; MenuItem: DWORD); stdcall;
 
 pPopUpItem = ^TPopUpItem;
 TPopUpItem = record
   uFlags: DWORD;
   uIDNewItem: DWORD;
   lpNewItem: PChar;
   Run: TRunPopUpitem;
 end;

 PPopUp = ^TPopUp;
 TPopUp = array[1..100] of TPopUpItem;
 
procedure AddPopUpMenu(sPopUp: PPopUp; sNumber: DWORD; Wnd: HWND); stdcall;

type
 TwndProc = function (HWND: DWORD; AMessage, WPARAM, LPARAM: DWORD): DWORD; stdcall;
 
implementation

var
 Menu            : DWORD;    
 
 MenuChanged     : Boolean;  
 HookHandle      : DWORD = 0;
 lPopUp          : PPopUp;
 lPopUpNumber    : DWORD;
 OldMenuItemCount: DWORD;
 SaveWnd         : HWND;

function MsgProc(Code: Integer; WPARAM: Integer; LPARAM: PCWPStruct): Integer; stdcall;
 //Function hProc(hwnd:dword;AMessage,Wparam,LParam:dword):dword;stdcall;
var
 Quit: Boolean;
 I   : DWORD;
begin
 Quit := False;
 if (Code = HC_ACTION) then case LPARAM.message of
     $4CC, $1ED:
       if LPARAM.WPARAM > OldMenuItemCount then
       begin
         I := LPARAM.WPARAM - OldMenuItemCount;
         if @lPopUp^[I].Run <> nil then lPopUp^[I].Run(SaveWnd, Menu, LPARAM.WPARAM);
       end;
     WM_MENUSELECT:
       if (DWORD(LPARAM.WPARAM) = $FFFF0000) then Quit := True else if Menu = 0 then
       begin
         Menu := LPARAM.LPARAM;
         OldMenuItemCount := GetMenuItemCount(Menu) - 1;
         for I := 1 to lPopUpNumber do
           with lPopUp^[I] do
             Windows.InsertMenu(Menu, $FFFFFFFF, uFlags, uIDNewItem, lpNewItem);
       end;

     $1E2: if not MenuChanged then
     begin
       MenuChanged := True;
       //Отправим сообщение для возврата ID меню
       SendMessage(LPARAM.HWND, $1E5, 0, 0);
       SendMessage(LPARAM.HWND, $1E5, $FFFFFFFF, 0);
     end;
   end;
 MsgProc := CallNextHookEx(HookHandle, Code, WPARAM, DWORD(LPARAM));
 if Quit then
 begin
   UnhookWindowsHookEx(HookHandle);
   HookHandle := 0;
 end;
end;

procedure AddPopUpMenu(sPopUp: PPopUp; sNumber: DWORD; Wnd: HWND); stdcall;
begin
 SaveWnd := Wnd;
 MenuChanged := False;
 lPopUp := sPopUp;
 lPopUpNumber := sNumber;
 Menu := 0;
 if HookHandle <> 0 then UnhookWindowsHookEx(HookHandle);
 HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, @MsgProc, 0, GetCurrentThreadId);
end;

end.
 
 {Пример использования:
 procedure AddEditPopUpClearAll(wnd:hwnd;Menu:dword;MenuItem:dword);stdcall;
 begin
 SetWindowText(wnd,"");
 end;
 
 const
  AddEditPopUp:array[1..1] of TPopUpItem=(
    (uFlags:MF_STRING or MF_ENABLED or MF_UNCHECKED or MF_BYPOSITION;
      uIDNewItem:$4396;
      lpNewItem:"ClearAll";
      Run:AddEditPopUpClearAll));
 ...
 case msg of
   WM_CONTEXTMENU: AddPopUpMenu(@AddEditPopUp,1,wnd);
   //wnd - handle окна, для которого нужно поймать popup меню
 end;}




Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.037 c
11-1057518741
nice
2003-07-06 23:12
2004.03.28
JPEG из ресурса


3-1077634767
overword
2004-02-24 17:59
2004.03.28
Непонятки с добавлением Interbase


14-1077874166
TopLodger
2004-02-27 12:29
2004.03.28
Компоненты DreamControls для Delphi6


14-1078234550
Asd
2004-03-02 16:35
2004.03.28
Книги


1-1078237170
Igor G
2004-03-02 17:19
2004.03.28
Вопрос по ActiveX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский