Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 04.12.2012, 17:31
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Прочитайте внимательно мое сообщение, я сказал что присваиваю хэндл главному окну и работает только на форме, а на объектах не выводится меню. Пробовал присвоить хэндл другому окну - вовсе не работает.
Ответить с цитированием
  #32  
Старый 04.12.2012, 18:25
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 298
Репутация: -1806
По умолчанию

а с какого он должен работать на других объектах если присвон главному окну\форме
Ответить с цитированием
  #33  
Старый 04.12.2012, 18:39
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Цитата:
Сообщение от sariman
Пробовал присвоить хэндл другому окну - вовсе не работает.
Я писал ведь, прочитайте внимательно.
Ответить с цитированием
  #34  
Старый 04.12.2012, 19:15
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 298
Репутация: -1806
По умолчанию

битва экстрасенсов выходит по пятницам, если что
а кому, и чего, и каким образом ты там присваиваешь, тут в душе никто неебзнает
Ответить с цитированием
  #35  
Старый 04.12.2012, 19:27
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Вот часть кода:
Код:
function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):
  LRESULT; stdcall;
var
  WndRect: TRect;
  Height: Integer;
  CursorPos: TPoint;
begin
  // Иинициализация переменнной Height
  Height := 0;
  // Инициализация результата функции
  Result := 0;

  // Обработка сообщений
  case Msg of
    WM_CREATE:
    begin
      // Создаем прогрессбар с заданными параметрами
      PlayBar := CreateWindowEx(WS_EX_CLIENTEDGE, 'MSCtls_Progress32', '',
        WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL or PBS_SMOOTH, 0, 0, 0, 0,
          Wnd, 0, hInstance, nil);
      // Устанавливаем параметры плейлиста и отображаем
      SetWindowPos(PlayBar, 0, 0, 0, 0, PBHeigth, SWP_SHOWWINDOW);

      // Обработка события клика по прогрессбару
      hPlayBarPrev := Pointer(GetWindowLong(PlayBar, GWL_WNDPROC));
      SetWindowLong(PlayBar, GWL_WNDPROC, Longint(@PlayBarWndProc));

      // Создаем плейлист с заданными параметрами
      PlayList := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', '', WS_CHILD or WS_VISIBLE or LBS_EXTENDEDSEL, 0, 0, 0, 0, Wnd, 0, hInstance, nil);
      // Устанавливаем позицию плейлиста и отображаем
      SetWindowPos(PlayList, HWND_BOTTOM, 0, 0, Height, Width,
        SWP_SHOWWINDOW);

      // Создаем Popup меню
      PopupMenu := CreatePopupMenu;
    end;
    // Сообщение при закрытии формы
    WM_DESTROY:
    begin
      PostQuitMessage(0);
      // Отрицательный результат
      Result := 0;
      // Завершаем процедуру
      Exit
    end;
    WM_SIZE:
    begin
      // Получаем размер клиентской части окна
      GetClientRect(Wnd, WndRect);
      // Узнаем ширину главного окна
      Width := (WndRect.Right - WndRect.Left);

      // Узнаем высоту главного окна
      Height := (WndRect.Bottom - WndRect.Top);
      // Изменяем рамер ползунка прокрутки
      MoveWindow(PlayBar, PBINDENT, PBTopSpace, Width - PBINDENT * 2,
        PBHeigth, True);
      // Изменяем рамер плейлиста
      MoveWindow(PlayList, 0, PLTopSpace, Width, Height, True);
    end;
    WM_RBUTTONDOWN:
    begin
      // Получаем кординаты мыиши
      GetCursorPos(CursorPos);
      // Отображаем Popup меню
      TrackPopupMenu(PopupMenu, TPM_LEFTALIGN or TPM_RIGHTBUTTON, CursorPos.X, CursorPos.Y, 0, Wnd, nil);
    end;
  else
    // Положительний результат
    Result := DefWindowProc(Wnd, Msg, wParam, lParam)
  end;
end;
Ответить с цитированием
  #36  
Старый 04.12.2012, 20:39
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 298
Репутация: -1806
По умолчанию

на вскидку, не уверен что WM_RBUTTONDOWN должно срабатывать на чем либо кроме главного окна
Ответить с цитированием
Этот пользователь сказал Спасибо robt за это полезное сообщение:
sariman (04.12.2012)
  #37  
Старый 04.12.2012, 21:24
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Как тогда быть?
Ответить с цитированием
  #38  
Старый 04.12.2012, 21:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И ещё раз - subclassing. Только тогда ты сможешь присвоить меню куда-либо кроме главного окна. VCL расхолаживает, там давно всё сабклассировано.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (04.12.2012)
  #39  
Старый 04.12.2012, 23:25
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Спасибо, сабклассировал) Думал есть выход по-проще.
Теперь появились такие вопросы:
1. Как обработать щелчки по элементам в PopupMenu?
2. Как в PopupMenu добавить разделитель элементов "-"?
3. Как добавлять Items в ListBox.
Заранее спасибо.
Ответить с цитированием
  #40  
Старый 05.12.2012, 00:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Смотрю всерьёз за API взялся.
1. WM_COMMAND
2. Лучше всего создавать меню в ресурсном файле.
3. LB_ADDSTRING
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #41  
Старый 05.12.2012, 00:26
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Да-да) А можно по-подробнее про 1-е и 2-е? Как обрабатывать WM_COMMAND и как хранить в ресурсном файле PopupMenu?
Ответить с цитированием
  #42  
Старый 05.12.2012, 02:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вызов по клику (не только PopupMenu)
Код:
    WM_COMMAND :
    begin
      case LOWORD(wParam) of
        ID_POPUP	: ; // что-то делаем
      end;
    end;
Ресурс, какое-то имя файла с расширением rc. Компилится командой brcc32.exe
Код:
// идентификаторы
#define ID_POPUPMENU $1000
#define ID_POPUP0 $1010
#define ID_POPUP0 $1020
#define ID_POPUP0 $1030
#define ID_POPUP0 $1040

// Popup menu
ID_POPUPMENU	MENUEX
BEGIN
  POPUP "Item1"			ID_POPUP0
  BEGIN
    MENUITEM	"SubItem1",	ID_POPUP1
    MENUITEM	"SubItem2",	ID_POPUP2
    MENUITEM	"SubItem3",	ID_POPUP3
  END
END
В исходниках Дельфи такого добра можно нарыть целую кучу.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (05.12.2012)
  #43  
Старый 05.12.2012, 08:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

читай внимательно справку!
Цитата:
MF_SEPARATOR
Draws a horizontal dividing line. This flag is used only in a drop-down menu, submenu, or shortcut menu. The line cannot be grayed, disabled, or highlighted. The lpNewItem and uIDNewItem parameters are ignored.
Код:
AppendMenu(APopup, MF_SEPARATOR, 0, nil);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
sariman (05.12.2012)
  #44  
Старый 05.12.2012, 10:21
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Не хочет компилиться
Ответить с цитированием
  #45  
Старый 05.12.2012, 10:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

APopup замени на свой
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter