На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Создание двух кнопок с одной командой

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Создание двух кнопок с одной командой
 
Здравствуйте господа разработчики !
В технологии PanTask имеется такой метод:
Код
// ===========================================================
// Добавить/вставить кнопку в панель
// panelID  - идентификатор панели
// bmpFace  - номер картинки в ImageList
// bmpName  - адрес ImageList
// command  - идентификатор кнопки, если 0 - разделитель
// after    - идентификатор существуищей кнопки, после которой
//            вставляется кнопка, если 0 - в конец панели
// ===========================================================
procedure TMyPanTask.InsertButton(PanelID: integer; ImgList : TImageList; var B:TPanButton);
var  buttonInfo : TBUTTONINFO ;
     FBmp       : Graphics.TBitMap;
begin
  if Assigned(ImgList) and (FHMainWindow<>0) then
  begin
    FBmp := TBitMap.Create;
    FBmp.Width  := ImgList.Width;
    FBmp.Height := ImgList.Height;
    buttonInfo.Command := -1;
    if not B.Separator then
    begin
      ImgList.Draw(FBmp.Canvas, 0, 0, B.image);
      buttonInfo.Command := B.cMessage;
    end;
    buttonInfo.BitmapIdent  := FBmp.Handle;
    buttonInfo.Sibling      := 0;
    B.ident:= SendMessage(FHMainWindow,AW_INSERTBUTTON,WPARAM(panelID),LPARAM(@buttonInfo));
    FBmp.Free;
  end;
end;

Считается, что параметр buttonInfo.Command должен быть уникальным в пределах одной задачи
Вопрос, можно ли создать две (или более) кнопок на панели своей задачи с одинаковым идентификатором команды ?
При попытке создать стандартными методами на панели вообще непонятно что создаётся.
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Как выйти с положения, если диапазон ограничен а кнопок должно быть много.
Второе, как быть в ситуации, когда пишется несколько задач с частично одинаковыми кнопками(справка, выход, подключение к БД) но они находятся на разных панелиях?
Использование одного и того же идентификатора, приводит к закрытию обоих (*трёх) панелей, использования новых идетнификаторов приводит к сужению диапозона выделенных команд...
-------
Отступление.
Год или два назад, О.В.Беленков обещал что технология PanTask будет кардинально меняться, и в пределах одной задачи идентификаторы кнопок будут уникальны. То есть, в задаче А идентификатор MESSAGE_USR = $7000 не будет вызывать (нажимать) кнопку с таким же идентификатором в совершенно иной задаче.
Вопрос, идея умерла на этапе зарождения или она всё таки реализуется?
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Все, что обещано, сделано.
В каждой задаче может быть свой набор идентификаторов команд кнопок: 1,2,3,4...
Числовые значения в разных задачах могут быть одинаковыми.

Код
// -----------------------------------------------------------------
// Добавить/вставить кнопку в панель
// -----------------------------------------------------------------
int TPanTask::InsertButton(int panelID, long int bmpFace, int command, int after,   // 25/10/13
                           int background,
                           int press, int enable, 
                           WCHAR * hint, WCHAR * comment)
{
  if (panelID == 0)
    return 0;

  if (HMainWindow)
    {
      HBITMAP hBitmap = 0;

      HINSTANCE hInstance = (HINSTANCE)::SendMessage(HMainWindow, AW_GETPANELINST,
                                                     (WPARAM)panelID, 0);

      if (bmpFace)
        {
           hBitmap = ::LoadBitmap(hInstance, MAKEINTRESOURCE(bmpFace));
        }


      TASKBUTTONINFO button;             // 08/06/10
      button.Command    = command;       // Идентификатор команды, уникальный в пределах данной задачи
      button.hTask      = hInstance;     // Идентификатор модуля, содержащего TPanTask или 0, если command уникален в ГИС
      button.hBitmap    = hBitmap;
      button.Sibling    = after;
      button.Background = background;
      button.State      = press;
      button.Enable     = enable;
      button.Hint[0]    = 0;
      button.Comment[0] = 0;

      if (hint)
        {
          int size = strlenun((char*)hint, sizeof(button.Hint)-2);
          if (size > 0)
            {
              memcpy(button.Hint, hint, size);
              button.Hint[size/sizeof(button.Hint[0])] = 0;
            }  
        }

      if (comment)
        {
          int size = strlenun((char*)comment, sizeof(button.Comment)-2);
          if (size > 0)
            {
              memcpy(button.Comment, comment, size);
              button.Comment[size/sizeof(button.Comment[0])] = 0;
            }  
        }

      if (Action && (Action->Ident() == command))
        {
          button.State = 1;                      
        }


      long res = ::SendMessage(HMainWindow, AW_INSERTTASKBUTTON,           // 08/06/10
                               (WPARAM)panelID, (LPARAM)&button);


      if(hBitmap) ::DeleteObject(hBitmap);

      return res;
    }

  return 0;
}


Поддержка внутренненго диапазона команд обеспечивается при заполнении поля button.hTask.
 
Спасибо Олег Валентинович, буду разбираться !
Проблема в том, что об этом новшестве никто не знает, включая предыдущего ответчика.
Может как то включить в состав инсталляции SDK пример?
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Просьба уточнить аналог сообщения
#define AW_SETBUTTONFACE      0x665
для новой структуры TASKBUTTONINFO
Простыми словами, мне нужно поменять размер кнопки. Ранее я использовал
Код
  buttonInfo.BitmapIdent  := FBmp.Handle;
  SendMessage(FHMainWindow, AW_SETBUTTONFACE, WPARAM(FMyPanel.PanIdent), LPARAM(@buttonInfo));

Как быть сейчас?
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
В этой команде есть идентификатор панели.
Предполагается, что в одной панели кнопки имеют разные идентификаторы, даже если это - 1, 2, 3...
 
а тут что должно быть >>  LPARAM(@buttonInfo)
Структура buttonInfo до и после отличаются размером и начинкой ???
Не тот глуп кто не знает, а тот, кто не знает где искать.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности