Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2011, 15:04   #1
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию TCategoryPanel и TCategoryPanelGroup

Драсьте.

1. Как сделать анимированной (плавно выезжающей и вьезжающей) панель TCategoryPanel?

2. Как убрать чёрную каёмочку (Border) у TCategoryPanelGroup?

Пасиба
Чего бы тут сделать, дабы ничего неделать?
flexterful вне форума Ответить с цитированием
Старый 18.07.2012, 17:35   #2
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
1. Как сделать анимированной (плавно выезжающей и вьезжающей) панель TCategoryPanel?
Ответ: Peter Below (Team B) на подобный вопрос в Embarcadero Newsgroups:
Цитата:
> 3. Is it possible to animate expanding and collapsing of
> TCategoryPanel?

No, and it would be hard to change that since the Collapse and Expand methods of the panel are not virtual. You would have to derive a new class from TCategoryPanelGroup (or its TCustom... ancestor) and override the GetCategoryPanelClass method to return your own descendent of TCustomCategoryPanel that implements this behaviour.
volvo877 вне форума Ответить с цитированием
Старый 19.07.2012, 19:30   #3
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию

Нужные классы вынес в отдельный юнит, немного подмял под себя, но с анимацией играться не стал. В переспективе миграция самого меню в Флэш (или что-то подобное) и интеграция онного в делфю. Муторно, а что делать.

// А с бордером всё ёще воюю - а что самое интересное - это не бевел, а бордера у него и вообще нету.....
// Проверял по батьке (TScrollingWinControl) - на нём не рисуеться. А в сорцах TCategoryPanelGroup ненахожу...



Код:
procedure TCustomCategoryPanelGroupEx.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
   //Style := Style or WS_BORDER;
   case BorderStyle of
     bsNone: Style := Style;
     bsSingle: Style := Style or WS_BORDER;
     else Style := Style or WS_BORDER;
   end;
end;
Порвал. Закоментированный код стоит в оригинале. Добавлено свойство BorderStyle : ТBorderStyle.
Чего бы тут сделать, дабы ничего неделать?

Последний раз редактировалось flexterful; 20.07.2012 в 16:56.
flexterful вне форума Ответить с цитированием
Старый 25.07.2012, 13:17   #4
flexterful
Пользователь
 
Регистрация: 22.08.2008
Сообщений: 39
По умолчанию

Пополнение :
Столкнулся с проблемой "красивого скрытия" невлезающего в поле прорисовки текста на заголовке TCategoryPanel.
Наглядно :
Код:
|                             |       // Ширина поля прорисовки
 Hello brave citizens of Gotham city  // Исходный текст
 Hello brave citizens of Gotha        // Результат по умолчанию
 Hello brave citizens of Go...        // Желаемый результат
Проблема решена добавлением флага в параметры прорисовки текста.
Код:
const
  Ellipsis: array[TEllipsisPosition] of Cardinal = (0, DT_PATH_ELLIPSIS,
    DT_END_ELLIPSIS, DT_WORD_ELLIPSIS);
Код:
  Flags := DT_EXPANDTABS or DT_SINGLELINE or DT_VCENTER or Alignments[Alignment];
  Flags := DrawTextBiDiModeFlags(Flags);
  Flags := Flags or Ellipsis[epEndEllipsis];

  if (FPanelGroup.HeaderStyle = hsThemed) and ThemeServices.ThemesEnabled
   then
    with ThemeServices do
      DrawText(ACanvas.Handle, GetElementDetails(tebNormalGroupHead), Caption, FTextRect, Flags, 0)
    else
     Windows.DrawText(ACanvas.Handle, Caption, -1, FTextRect, Flags);
Добавляем массив констант и помеченный код - и всё работает!
Сие применимо и к другим типам компонентов с прорисовкой текста на канве.
З.Ы. (с)пёрто у TLabel
Чего бы тут сделать, дабы ничего неделать?
flexterful вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц