Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Свежие комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

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



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 7 февраля 2010 в 19:55.
Категории: Компоненты Delphi.


В общих чертах про ошибки и глюки Ribbon Controls я говорил ещё в самом самом первом посте про эти новые компоненты. Конечно, не много и рассмотрел не все возможные проблемы, но тем не менее уже тогда было известно, что Ribbon Controls в RAD Studio имеет даже не просто много, а офигенно много глюков и использовать эти компоненты в разработках стоит весьма осторожно.

Скажу по себе, Ribbon Controls в работе я использовал всего два раза: первый раз, когда моему работодателю захотелось "чтобы было красиво", тогда пришлось более менее основательно посмотреть на Ribbon и собрать некое подобие MS Office для экологов. Второй раз - буквально две недели назад, опять же по большей части не по собственному желанию. И оба раза я сталкивался с одними и теме же проблемами, которые приходилось решать "по горячим следам". 

Я не сторонник навязывать кому-либо свою точку зрения, но в сложившейся ситуации с глючностью Ribbon у нас есть, по-моему, всего три выбора:

  1. Самый простой - не использовать. Этот путь могу себе позволить те, кто финансово не заинтересован в разработке, например, любители, которые пишут софт "под себя". Зачем лишний раз биться головой об стену и злиться, пытаясь сделать красивый интерфейс? Есть достаточно других компонентов, хотя бы те же Alpha Skins - используйте их и не мучайтесь.
  2. Использовать то, что дает нам RAD Studio и приспосабливаться к глюкам пока не выйдет новая версия и там, что-либо может быть исправится. К сожалению, этот путь для меня и тех, кто не может по каким-либо причинам позволить себе третий вариант.
  3. Забыть про то, что есть в RAD Studio и купить набор компонентов от сторонних разработчиков. Т.к. я никогда не имел дела с платными компонентами Ribbon, то сказать сколько там глюков - не могу, но видимо меньше, т.к. все-таки компоненты покупаются и используются.



Именно по той причине, что мой выбор №2 я и пытаюсь разобраться с Ribbon Controls, именно по этой причине и появились в блоге посты про работу с Ribbon без мыши. Кстати, спасибо тем, кто не только читает посты и использует какие-то моменты из них в своей работе, но и советует, подсказывает мне какие-то моменты. Например, в этой теме я узнал от bambarmia как исправить глюк, когда пропадает прозрачность.

Сегодня я хотел бы рассмотреть один из самых, на мой взгляд, противных глюков в Ribbon Controls при работе в дизайнере формы. Глюк проявляется хаотично и никогда не знаешь, когда пора начинать злиться. Заключается он в следующем: в какой-то момент работы в дизайнере напрочь пропадает возможность выбора установленного в группе Action'а. Казалось бы - мелочь и на функциональность будущей программы не влияет, но бесит жутко. Приходится либо добавлять в группу ещё один "левый" Action, либо перезагружать проект - тогда глюк самоликвидируется на какое-то время. А когда на TRibbon располагается не 10-20, а больше 50 различных Action'ов, то тогда вообще хоть стреляйся, т.к. глюк проявляется особенно часто.

Я решил не сучить себя вечными перегрузками, переделками и т.д., а просто приучиться использовать структуру проекта (окно Structure, вызываемое нажатием клавиш Shift+Alt+F11). В принципе, если сильно захотеть, то привычка вырабатывается  за несколько часов.

Рассмотрим небольшой пример использования окна "Structure"  при работе с Ribbon Controls. Расположите на форме TRibbon и создайте два или больше Action'ов как показано на рисунке:

Теперь предположим, что у нас опять проявился глюк, а нам надо добраться до свойств элемента 'Info' и изменить размер кнопки на bsSmall.

Добраться до необходимого элемента через структуру проекта можно как показано на рисунке ниже:

Выбираем элемент в Structure и получаем необходимые нам свойства в Object Inspector, правда при этом Action все равно не выделяется в дизайнере :). Но лучше уж так, чем никак.

Здесь же в Structure можно создавать новые элементы интерфейса. Для этого необходимо выбрать корневой элемент Items и в его контекстном меню выбрать опцию на добавление нового Item'а:

А дальше уже можно спокойно работать в Инспекторе, назначать изображение, обработчик действия и т.д.

Использовать или нет предложенный мной вариант - решать только Вам. Я лишь показал один из вариантов работы с Ribbon Controls в условиях глючности. Может есть и другое решение проблемы помимо перезагрузки проекта, добавления нового Action'а или рассмотренного мной сейчас, но мне таковое не известно :) Так что, если оно у вас есть - буду премного благодарен, если расскажите мне о нем.

-------------------------------
Любите смотреть фильмы и вас интересуют последние новинки кино? Заходите на themoviesdb.ru и получайте всю необходимую информацию на одном сайте.

Недавно приобрел себе кондиционер с ионизатором воздуха - прикольная вещь. Жил бы в коттедже, ещё бы тёплый пол Саратов прикупил или, что-нибудь подобное :) А пока живу в простой квартире, то и думать больше приходится про интерьер квартир и обустройство своего "семейного гнезда".
-------------------------------
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (14)

WP_Cloudy
  • Алексей пишет:

    Есть еще один вариант: отказаться от работы с Ribbon в Delphi и использовать готовые компоненты для Visual Studio. Хотя иногда заказчики требуют разработки на конкретном языке. В этом случае приходится исправлять косяки делфы и настраивать все самостоятельно! ;-) Кстати, а что за Alpha Skins? Что-то не слышал ни разу. Это библиотека что ли? Или набор компонент?
    Влад, не в курсе, есть ли подобные библиотеки или компоненты для Delphi 7?

  • Vlad пишет:

    AlphaSkins — это набор визуальных компонент для Delphi, которые позволяют использовать в приложениях скины. Вместе с компонентами в наборе идут и порядка 20 различных скинов. Компоненты бесплатны для тех кто живет в странах СНГ, ну и тех кто может балакать по русски :) AlphaSkins работают на Delphi по-моему от 6-й до 2010 версии

  • Алексей пишет:

    Спасибо, Влад. Теперь обязательно попробую. :-)

  • Алексе пишет:

    Спасибо)) Уже замучился с этими глюками. Хорошо вашу статью нашел.Structure до статьи пробовал использовать, но не мог понять где лежат нужные Item)

  • bambarmia пишет:

    Я бы термин глюки брал в кавычки, это ведь нам самоучкам многое методом научного тыка постигать приходится, а ребята из Embarcadero может и не догадывались о возможности выбора Action’а в дизайнере, ими наверное только .Structure и отлаживалась)) Мне, например, по незнанию, кроме прозрачек, еще нервы подпортила пара следующих «глюков» в дизайнере:
    1) Не настраивался стиль Ribbon’a целиком, вместо Ribbon-Luna хотел Ribbon-Silver поставить, а расцветка меняется только у Application Menu и у нескольких RibbonGroup. Так оказалось, что стиль (Style) централизовано выставляется в ActionManager, который по отдельности сопоставляется каждому объекту Ribbon’a (то есть он у TRibbon и TRibbonGroup может быть разным).
    2) Соседние RibbonGroup менялись местами произвольным образом. Оказалось, что некоторые из них получили в дизайнере одинаковые номера GroupIndex, а там нужна неповторяющаяся нумерация по порядку, начиная с 0.

  • Vlad пишет:

    В принципе то, что одни считают глюком, другие — недокументированной фичей :) Но все-таки отдельные моменты работы с Риббонами фичей никак не назвать :)

  • bambarmia пишет:

    Сейчас наступит еще на одни грабли, заботливо расставленные разработчиками Delphi 2010 на каждом шагу: при открытии проекта пишет «Error creating form: Ribbon Group must have a Ribbon Page as its parent» и форму не кажет; я еще ни строчки кода не написал, а уже седею от такого программирования в минном поле, подскажите куда рыть, пока форму из __history восстанавливаю, ведь нет гарантии, что опять так же не попаду (исходник прилагается http://narod.ru/disk/22613428000/find_subgraph.rar.html )

  • bambarmia пишет:

    Прошу прощения за пустое беспокойство, сам нашел где собака порылась, в Unit1.dfm дизайнером ошибочно был создан фрагмент


    item
    Caption = '&RibbonGroup7'
    CommandStyle = csControl
    CommandProperties.Width = 150
    CommandProperties.ContainedControl = RibbonGroupSubgraph1
    end

    вручную пришлось удалить, причем эта зараза успела уже дважды сохраниться в __history.
    Отсюда мораль: да, за «мышиным» программированием будущее, но оно находится еще на заре становления, поэтому, чтобы не быть похожим на обезьяну с гранатой, нужно чаще резервные копии делать)))

  • bambarmia пишет:

    Еще один глюк в D2010 отыскал! Мне к ним в бета-тестеры пора податься!?
    Короче, НЕЛЬЗЯ писать так:

    TForm1 = class(TForm)
    private
    Tool: record down:boolean;end;
    public
    end;

    перестанет работать автосоздание описания методов в дизайнере, будет ругаться загадочным «Could not find source location to add method *****. END. or INITIALIZATION not found in unit source», нужно использовать:

    TDown = record down:boolean;end;
    TForm1 = class(TForm)
    private
    Tool:TDown;
    public
    end;

    хотя в ранних версиях подобных косяков не отмечалось, видимо «ошибки исправлены и дополнены»…

  • Worthis пишет:

    может я что-то не так делаю, но вот такая конструкция выдает совершенно случайный TabIndex. Есть ли какой другой рабочий способ получить индекс/заголовок текущей вкладки риббона или ссылку на нее?

    procedure TForm1.Ribbon1TabChange(Sender: TObject; const NewIndex,
    OldIndex: Integer; var AllowChange: Boolean);
    begin
    Label1.Caption:=IntToStr(Ribbon1.TabIndex);
    end;
  • Vlad пишет:

    Worthis, а так не пробовали?
    procedure TForm1.Ribbon1TabChange(Sender: TObject; const NewIndex,
    OldIndex: Integer; var AllowChange: Boolean);
    begin
    Label1.Caption:=IntToStr(NewIndex);
    end;
    Думаю, что поможет

  • Worthis пишет:

    Точно! Не обратил внимания на параметры) Спасибо за оперативный ответ.
    Жалко, что процедура Ribbon1TabChange не срабатывает при переключении вкладок колесом мыши :(, можно это как-нибудь исправить или вовсе отключить переключение колесом?

  • Vlad пишет:

    Worthis, с колесом мыши ничего не сделать, к сожалению, если не копаться во внутренностях TRibbon и не переопределять обработчики, а это по сути писать новый компонент-наследник — гиммор я вам скажу ещё тот =).

  • Worthis пишет:

    Спасибо) Решил проблему с мышью, создал копию юнита Ribbon.pas в папке проекта и уже в него внес необходимые изменения) В функции TCustomRibbon.DoMouseWheelDown и TCustomRibbon.DoMouseWheelUp добавил вызов процедуры DoTabChange. Может и получилось несколько топорно, но работает :D

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник