Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цвет различного Отбора в TMENU 
:(
    Опции темы
Deiv
Дата 11.2.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 11.2.2006
Где: ЛаПаc-Боливия (Ю жная Америка)

Репутация: нет
Всего: нет



Привет,
Я участвую впервые в Форуме и Я не хорошо разговариваю Русский язык, Я начинающий в Delphi. У меня вопрос:
Как я могу создать градиент 3 цветов СВЕРХУ ДОНИЗУ выбирая (двигаясь Мышь) пункт TMenu? (Fixed ряд), Это возможнo в Delphi?.
Взгляд, У меня код что это выполняет градиент 2 цветов из оставленной стороны направо (см ниже), но я нуждаюсь в том, чтобы показать градиент 3 цветов и что это идет из ПРЕВОСХОДЯЩЕГО сектора (область) к НИЗШАЯ (сверху донизу), это Я посмотрел в Menu Программа Super Utilities (http://www.superlogix.net/):
Код

procedure TForm1.MenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
  Item: TMenuItem;
  Flags: Integer;

begin
  if Selected then
    GradientRect(
      ACanvas.Handle,
      ARect,
      GetSysColor(COLOR_ACTIVECAPTION),
      GetSysColor(COLOR_GRADIENTACTIVECAPTION)
    )
  else
    ACanvas.FillRect(ARect);

  Item := Sender as TMenuItem;
  Flags := DT_SINGLELINE or DT_VCENTER;
  Inc(ARect.Left, 6);

  ACanvas.Brush.Style := bsClear;
  DrawText(ACanvas.Handle, PChar(Item.Caption), Length(Item.Caption), ARect, Flags);
end;

Спасибо
PM MAIL YIM   Вверх
Yanis
Дата 11.2.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Какой ужас smile Тоже самое получилось бы если я перевёл XTranslyator'ом свой вопрос и запостил его на забугорном форуме smile
Добавлено @ 17:16
Цитата(Deiv @ 11.2.2006, 17:05 Найти цитируемый пост)
это Я посмотрел в Menu Программа Super Utilities

Я в приципе понял, что имелось ввиду, но не все знаю программу Super Utilities. Короче, ScreenShot в студию!

Это сообщение отредактировал(а) Yanis - 11.2.2006, 17:28


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 12.2.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот. Нарисовал код, который делает градиентные пункты меню.
Можно делать любое количество градиентов.
Вот, например 4 цвета:
Код
procedure MultiGradientRect(Canvas: TCanvas; Rect:TRect; const col: array of TColor); // рисует градиент
var
  i, cl, dy, gk: integer;
  cy1, cy2, ci:  integer;
begin
  gk := Length(col)-1; dy := Rect.Bottom - Rect.Top;
  for i := Rect.Top to Rect.Bottom-1 do
  begin
    ci := (i-Rect.Top) * gk div dy;
    cy1 := ci * dy div gk;
    cy2 := (ci+1) * dy div gk - cy1;
    cl := (i - Rect.Top - cy1);
    cl := RGB((((cy2-cl)*GetRValue(col[ci]) + cl*GetRValue(col[ci+1])) div cy2),
              (((cy2-cl)*GetGValue(col[ci]) + cl*GetGValue(col[ci+1])) div cy2),
              (((cy2-cl)*GetBValue(col[ci]) + cl*GetBValue(col[ci+1])) div cy2));
    Canvas.Pen.Color := cl;
    Canvas.PenPos := Point(Rect.Left, i);
    Canvas.LineTo(Rect.Right, i);
  end;
end;

procedure TForm1.MenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
begin
  if Selected then
    MultiGradientRect(ACanvas, ARect, [clRed, clYellow, clLime, clBlue]) // в [] - цвета. кол-во любое
  else
    ACanvas.FillRect(ARect);
  Inc(ARect.Left, 6);
  ACanvas.Brush.Style := bsClear;
  ACanvas.Font.Color := clBlack; // цвет текста
  ACanvas.TextOut(ARect.Left,ARect.Top,TMenuItem(Sender).Caption);
end;
Естественно, чтобы все это работало, нужно у меню выставить OwnerDraw в true и всем пунктам меню назначить OnDrawItem = MenuItemDrawItem
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.