AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны Забыли пароль?

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.09.2006, 07:34   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
[ANN] Tabax 0.1 -- панель задач для Axapta
Скачать можно с домашней страницы



За исключением управления окнами (кстати, на табах есть контекстное меню) может:
  • открывать в AOTе текущую открытую форму
  • вызывать Оборзеватель Таблиц для текущей открытой формы и выделенной в АОТе таблицы
  • обновлять AOD
  • вызывать перекрестные ссылки для выделенного элемнта АОТ
  • копировать название или путь выделенных элементов АОТ

PS. Tabax разработан на основе Sidax с огромной помошью AndyD.

Последний раз редактировалось belugin; 12.09.2006 в 14:08. Причина: 0.2
За это сообщение автора поблагодарили: mazzy (2), slava (1), denny (1), Yprit (1), twilight (1), oip (4), miklenew (5), alex55 (1), pitersky (1).
Старый 08.09.2006, 09:23   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,399 / 1234 (46) ++++++++
Регистрация: 28.11.2005
Адрес: Московская область
Спасибо!

Цитата:
Сообщение от belugin
[*]вызывать Оборзеватель Таблиц для текущей открытой формы...
Вот это не работает. Однако если написать вот так, то все работает:
X++:
void clicked()
{
    #TreeNodeSysNodeType
    LastAotSelection selection=new LastAotSelection();
    TreeNode selected=selection.first();
    SysFormRun formRun;
    FormDataSource ds;
    TableID tableID;
;
    formRun=element.currentFormRun();
    //oip -->
    if (!formRun)
    //oip <--
        formRun=Infolog.setLastActivatedForm().object();

    if(formRun && formRun.dataSourceCount()>0)
    {
        ds=formRun.dataSource();
        tableID=ds.table();
    }
    if(!tableID && selected && selected.sysNodeType()==#NT_DBTABLE)
    {
         tableID=tableName2ID(selected.treeNodeName());
    }
    if(tableID)
        new SysTableBrowser().run(tableID);
}
Старый 08.09.2006, 10:54   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,399 / 1234 (46) ++++++++
Регистрация: 28.11.2005
Адрес: Московская область
Еще можно что-нибудь типа этого сделать, чтобы красивее выглядело.
X++:
container getImageAndTitle(str _header)
{
    str path;
    int i, img;
    boolean startsWith(str _s1, str _s2){
        return strScan(_s1, _s2, 1, strLen(_s1))==1;
    }
    ;
    for(i=1;i<=conlen(this.pathes());i++)
    {
        [path, img]=conPeek(this.pathes(),i);
        if(startsWith(_header, path))
        {
            return [imgApp.image(img), strDel(_header, 1, strLen(path))];
        }
        //oip -->
        if (!path)
            switch (_header)
            {
                case "Репозитарий прикладных объектов":
                    return [imgApp.image(#ImageAOT), _header];
                    break;
                case "\\\Projects":
                    return [imgApp.image(#ImageProjects), _header];
                    break;
            }
        //oip <--
    }
    return [0, _header];
}

Последний раз редактировалось oip; 08.09.2006 в 14:05.
За это сообщение автора поблагодарили: belugin (6).
Старый 08.09.2006, 14:18   #4  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
Цитата:
Сообщение от belugin
Скачать можно с домашней страницы
Было бы полезно ограничить длину отображаемого в закладках текста - иначе при показе формы "Заказов" (например) соответствующая закладка становится очень длинной. Можно обрезаемые символы заменять многоточиями. Не обращал внимания, общий ли это подход, но в Firefox точно так. Пример:
Код:
container getImageAndTitle(str _header)
{
    str path;
    int i, img;
    // >> den(UTX) 08 Сен 2006
    #define.headerLength(30)
    str truncHeader(str _h)
    {
        if (strlen (_h) > #headerLength)
        {
            _h = strdel (_h, #headerLength, strlen(_h));
            _h +=  "...";
        }
            return _h;
    }
    // << den(UTX) 08 Сен 2006
    boolean startsWith(str _s1, str _s2){
        return strScan(_s1, _s2, 1, strLen(_s1))==1;
    }
    ;

    for(i=1; i<=conlen(this.pathes()); i++)
    {
        [path, img]=conPeek(this.pathes(),i);
        if(startsWith(_header, path))
        {
            // >> den(UTX) 08 Сен 2006
            return [imgApp.image(img), truncHeader(strDel(_header, 1, strLen(path)))];
            // << den(UTX) 08 Сен 2006
        }
    }
    // >> den(UTX) 08 Сен 2006
    return [0, truncHeader(_header)];
    // << den(UTX) 08 Сен 2006
}
А вообще - штука получилась просто замечательная. Спасибо, belugin и AndyD!
Старый 08.09.2006, 14:30   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
>>>соответствующая закладка становится очень длинной

А чем это плохо? Мне кажется хорошо иметь возможность полностью видеть название формы если для этого есть место.

PS. В принципе в опере тоже имеются многоточие и даже можно настроить, чтоб они были в середине.
Старый 08.09.2006, 14:42   #6  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
Наверное, не плохо - здесь уж каждый сам решает, но при открытии заказа закладка с текстом "Заказ ЗК000045, Название "ООО АБВГД", Название номенклатуры Шайба резиновая плоская соединитель типа PIN 1ф до 63А" у меня занимает места больше, чем полэкрана. Конечно, при заполнении всей ширины экрана они (закладки) масштабируются (сейчас проверил), но "с обрезкой" мне кажется аккуратней. Как обычно - на вкус и цвет.

Последний раз редактировалось denny; 08.09.2006 в 15:19.
Старый 08.09.2006, 14:45   #7  
Alex_K is offline
Alex_K
Участник
 
527 / 32 (3) +++
Регистрация: 07.02.2003
Цитата:
Сообщение от belugin
>>>соответствующая закладка становится очень длинной
А чем это плохо? Мне кажется хорошо иметь возможность полностью видеть название формы если для этого есть место.
Может и неплохо, но у этого есть обратная сторона - если открыто много форм, то названия начинают обрезаться как бог на душу положит, в том числе посередине символа.
Старый 08.09.2006, 14:54   #8  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
Цитата:
Сообщение от Alex_K
Может и неплохо, но у этого есть обратная сторона - если открыто много форм, то названия начинают обрезаться как бог на душу положит, в том числе посередине символа.
Мне так думается, в этом и состоит плюс открытой разработки - каждый может "подтюнить" TabAx согласно своим личным предпочтениям.
Старый 08.09.2006, 15:46   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
можете загрузить новую версию с настройкой этого дела и еще парой кнопок
Старый 11.09.2006, 18:38   #10  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
4,213 / 1884 (71) ++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Другими окошками двигаете, то почему бы и этим не подвигать?

В смысле, чтобы сделать dockable - формой эту, если кому хочется ее в стороне держать или снизу, к примеру?
Это так, планы на будущее.
Старый 12.09.2006, 09:33   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
она и так dockable, только заголовок окна не показывается. можно показать заголовок и дочить как дуже угодно (свойство дизайна Frame)
Старый 12.09.2006, 09:55   #12  
AndyD is offline
AndyD
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
КОРУС Консалтинг
 
2,426 / 2279 (80) +++++++++
Регистрация: 20.08.2005
Слева-справа не очень хорошо будет получаться, даже если расположить табы по вертикали
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2006, 10:50   #13  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
4,213 / 1884 (71) ++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Цитата:
Сообщение от AndyD Посмотреть сообщение
Слева-справа не очень хорошо будет получаться, даже если расположить табы по вертикали
Да, поэкспериментировал - действительно, что справа, что слева - совсем никуда
Да и снизу тоже не особо - во первых, мешает окну компилятора (приходится, или делиться, или выносить его в окно сообщений, как в 2.5)

Так что сверху оптимальный вариант.

Вот еще небольшой метод - для удобства.
Работаю в Maxthon - очень привык к тому, что можно закрыть закладку по двойному щелчку по ней.
Код:
public int mouseDblClick(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)
{
    int                 ret;
    FormTabPageControl  page;
    int                 tabNo;
    HWND                hwnd;
    ;

    ret = super(_x, _y, _button, _Ctrl, _Shift);

    tabNo = element.HitTestTabPage(this);

    if(tabNo)
    {
        page = this.controlNum(tabNo);
        hwnd = this.pageToHwnd(page);

        WinAPI::sendMessageEx(hwnd, #WM_SYSCOMMAND, #SC_CLOSE, 0);
    }
    return ret;
}
За это сообщение автора поблагодарили: belugin (6).
Старый 12.09.2006, 11:10   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Слева-справа не очень хорошо будет получаться, даже если расположить табы по вертикали
Для "слева" sidax
Старый 12.09.2006, 11:23   #15  
AndyD is offline
AndyD
Участник
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
КОРУС Консалтинг
 
2,426 / 2279 (80) +++++++++
Регистрация: 20.08.2005
Я экспериментировал для минимизации занимаемого места (sidax довольно-таки широк).

Все-таки, по-моему, в Axapta'е до недавнего времени ширина была более "уязвимым" местом, чем высота (я про расположение контролов на форме)
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2006, 11:25   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
(sidax довольно-таки широк)
Можно скрыть тулбар и уменьшить размер окна (или что там еще мешает)
Старый 12.09.2006, 11:56   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
Сотрудники Microsoft Dynamics
 
3,729 / 1829 (68) ++++++++
Регистрация: 16.01.2004
Адрес: Москва
Товарищи, добавившие код, напишите себя в credits
Старый 12.09.2006, 12:13   #18  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,399 / 1234 (46) ++++++++
Регистрация: 28.11.2005
Адрес: Московская область
Написал.

Последний раз редактировалось oip; 12.09.2006 в 12:49.
Старый 12.09.2006, 22:00   #19  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
492 / 244 (9) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
;)
Если изменить метод clicked у кнопки tableBrowserBut, то таблицы будут открыватся не только непосредственно из //Data Dictionary//Tables
но и из датасорса формы (как стандартный вызов "Обозреватель таблицы" из контекстного меню это делает).

Собственно код (закоментировано то, что было раньше):
Код:
    if(!tableID && selected /*&& selected.sysNodeType()==#NT_DBTABLE*/)
    {
//         tableID=tableName2ID(selected.treeNodeName());
         tableid = SysTableBrowser::treeNode2TableId(selected);
    }
Я шел по другому пути - открытие таблиц, открытие в АОТ текущую форму и еще пару функций я забил на shotcut'ы.

Пару функций - это, например, "Открыть прикладной элемент", "Элемент родитель", "Используемый элемент". Т.е. все то, что доступно в Add-ins -> "Новое окно -> ...".
Когда все это на shotcut'ах намного удобнее просматривать таблицы, найти с каким Enum'ом или EDT связано поле секундное дело. Ну и родителя для класса найти несложно, а главное быстро.

При желании можно интегрировать две разработки.....было бы время =)
За это сообщение автора поблагодарили: belugin (6).
Старый 13.09.2006, 00:00   #20  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
MCBMSS
Злыдни
 
2,420 / 1463 (53) ++++++++
Регистрация: 13.06.2004
Адрес: Москва
А если немного "подпилить" класс SysTableBrowser, метод run()
PHP код:
public void run(tableId tableIdCommon _tmpTable null)
{
    
// Обозреватель временных таблиц -->
    
FormDataSource           formDataSource
    
// Обозреватель временных таблиц <--
    
Form                            tableBrowser;
..........
    
formRun.parmTableId(tableId);
    
// Обозреватель временных таблиц -->
    
if (_tmpTable && (_tmpTable.isTmp() || dictTable.isTmp()))
    {
        
formDataSource formRun.dataSource(1);
        if (
_tmpTable.isTmp())
        {
            
formDataSource.cursor().setTmp();
        }
        
formDataSource.cursor().setTmpData(_tmpTable);
        
formDataSource.allowCreate(false);
        
formDataSource.allowDelete(false);
    }
    
// Обозреватель временных таблиц <--
    
formRun.run();
    ......

и в коде, который правил oip во втором сообщении изменить:
PHP код:
if(formRun && formRun.dataSourceCount()>0)
{
    
ds=formRun.dataSource();
    
tableID ds.table();
    if(
tableID)
        new 
SysTableBrowser().run(tableIDds.cursor());
}
if(!
tableID && selected && selected.sysNodeType()==#NT_DBTABLE)
{
    
tableID=tableName2ID(selected.treeNodeName());
    if(
tableID)
         new 
SysTableBrowser().run(tableID);

то мы "научим" наш обозреватель таблиц смотреть содержимое временных таблиц
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 13.09.2006 в 00:03.
За это сообщение автора поблагодарили: Logger (3).
Теги
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[ANN] Sidax 0.3.6 - многоцелевая боковая панель для Axapta belugin DAX: База знаний и проекты 104 30.06.2008 11:32
axaptafreak: Tabax: tabbed Axapta interface !!!! Blog bot DAX Blogs 0 10.11.2006 01:14
Панель задач в Аксапте wb DAX: Программирование 14 18.04.2006 17:13
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:54.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.