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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.09.2006, 07:34   #1  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
[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,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Спасибо!

Цитата:
Сообщение от 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,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Еще можно что-нибудь типа этого сделать, чтобы красивее выглядело.
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
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>>соответствующая закладка становится очень длинной

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

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
Участник
 
531 / 36 (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
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
можете загрузить новую версию с настройкой этого дела и еще парой кнопок
Старый 11.09.2006, 18:38   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Другими окошками двигаете, то почему бы и этим не подвигать?

В смысле, чтобы сделать dockable - формой эту, если кому хочется ее в стороне держать или снизу, к примеру?
Это так, планы на будущее.
Старый 12.09.2006, 09:33   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
она и так dockable, только заголовок окна не показывается. можно показать заголовок и дочить как дуже угодно (свойство дизайна Frame)
Старый 12.09.2006, 09:55   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Слева-справа не очень хорошо будет получаться, даже если расположить табы по вертикали
__________________
Axapta v.3.0 sp5 kr2
Старый 12.09.2006, 10:50   #13  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от 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
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от AndyD Посмотреть сообщение
Слева-справа не очень хорошо будет получаться, даже если расположить табы по вертикали
Для "слева" sidax
Старый 12.09.2006, 11:23   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Я экспериментировал для минимизации занимаемого места (sidax довольно-таки широк).

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

Последний раз редактировалось oip; 12.09.2006 в 12:49.
Старый 12.09.2006, 22:00   #19  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 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
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 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, время: 17:59.