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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопки 
:(
    Опции темы
kирилл
Дата 13.6.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



Цитата(z-END @  13.6.2006,  16:04 Найти цитируемый пост)
кстати, а разве тулбар XPmainfest не понимает?! 

Вроде нет. Он монотонен. Но там вроде была прозрачность... Позже посмотрю. 
PM MAIL   Вверх
kирилл
Дата 13.6.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



C ToolBar ничего не получается - он монотонного серого цвета 
PM MAIL   Вверх
skyboy
Дата 13.6.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



в пакете компонентов jedi-vcl на закладке buttons есть компонент arrowedbutton. Точь-в-точь, как тот, что на рисунке у тебя в первом посте.  
PM MAIL   Вверх
kирилл
Дата 14.6.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



skyboy, пакет jedi-vcl у меня не установился.


comtat, спасибо за исходники, но мне нужны не кнопки с подсветкой, а чтобы сама панель была с левой стороны одного цвета, с правой другого, а между ними градиентный переход.

Кто-нибудь знает, как сделать такой переход для компонента ToolBar?   

Это сообщение отредактировал(а) kирилл - 14.6.2006, 11:24
PM MAIL   Вверх
Snowy
Дата 14.6.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

procedure MultiGradientRect(Canvas: TCanvas; Rect:TRect; const col: array of TColor); // рисует градиент
var
  i, cl, dx, gk: integer;
  cx1, cx2, ci:  integer;
begin
  gk := Length(col)-1; dx := Rect.Right - Rect.Left;
  for i := Rect.Left to Rect.Right - 1 do
  begin
    ci := (i-Rect.Left) * gk div dx;
    cx1 := ci * dx div gk;
    cx2 := (ci+1) * dx div gk - cx1;
    cl := (i - Rect.Top - cx1);
    cl := RGB((((cx2-cl)*GetRValue(col[ci]) + cl*GetRValue(col[ci+1])) div cx2),
              (((cx2-cl)*GetGValue(col[ci]) + cl*GetGValue(col[ci+1])) div cx2),
              (((cx2-cl)*GetBValue(col[ci]) + cl*GetBValue(col[ci+1])) div cx2));
    Canvas.Pen.Color := cl;
    Canvas.PenPos := Point(i, Rect.Top);
    Canvas.LineTo(i, Rect.Bottom);
  end;
end;
© Я.

Сделай вызов этой процедуры в OnPaint.
В OnResize пропиши Invalidate;
У formы установи DoubleBufered в true.
Пример использования:
Код
procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True; // устанавливаем DoubleBuffered
end;

procedure TForm1.ToolBar1CustomDraw(Sender: TToolBar; const ARect: TRect; var DefaultDraw: Boolean);
begin // градиент на тулбаре
  MultiGradientRect(Sender.Canvas, ARect, [clBlue, clGreen, clYellow]);
end;

procedure TForm1.ToolBar1Resize(Sender: TObject);
begin // обновляем при ресайзе
  TToolBar(Sender).Invalidate;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin // градиент на форме
  MultiGradientRect(Canvas, ClientRect, [clBlue, clYellow, clRed, clMoneyGreen]);
end;

procedure TForm1.FormResize(Sender: TObject);
begin // обновляем при ресайзе
  Invalidate;
end;


В третий параметр можешь указать 2 и более цветов для градиента. 
PM MAIL   Вверх
skyboy
Дата 14.6.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



kирилл, как это - "не установился"? ты "ридми.тхт" читал? надо в vcl\examples\installhelper запустить проект, скомпилировать, он сам всё установит... 
PM MAIL   Вверх
kирилл
Дата 14.6.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



Цитата(Snowy @  14.6.2006,  11:36 Найти цитируемый пост)
MultiGradientRect(Canvas, ClientRect, [clBlue, clYellow, clRed, clMoneyGreen]);

На этой строке выдает ошибку (неизвестный идентификатор). Поиск в google ничего не дал... (по-моему в D2005 Canvas вообще нет) 
PM MAIL   Вверх
Snowy
Дата 14.6.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Первый код поставь выше.
А Canvas не может не быть - это основа. 
PM MAIL   Вверх
kирилл
Дата 14.6.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



Не катит. Создаю новое VCL Forms Application, вставляю часть кода. Результат:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormResize(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 DoubleBuffered := True;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 MultiGradientRect(Canvas, ClientRect, [clBlue, clYellow, clRed, clMoneyGreen]);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 Invalidate;
end;

end.


Запускаю, выдает ошибку "Undeclared identifer: 'MultiGradientRect'" 
PM MAIL   Вверх
Snowy
Дата 14.6.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ясен перец.
После {$R *.dfm} вставь процедуру
Цитата(Snowy @  14.6.2006,  11:36 Найти цитируемый пост)
procedure MultiGradientRect(Canvas: TCanvas; Rect:TRect; const col: array of TColor); // рисует градиент

который я привёл выше.
Вот же он - первый в этом посте: http://forum.vingrad.ru/index.php?showtopi...p;#038;p=762589
А ты только второй код взял.

Добавлено @ 13:25 
Прочитай этот пост 3 раза.
1-й код - процедура
2-й пример использования.
Ты взял пример использования, а чего использовать - не взял...
Вот и не работает. 
PM MAIL   Вверх
kирилл
Дата 16.6.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



Snowy, Всавил код, все работает, заливает, кроме одного smile - он заливает только черным цветом!  

Это сообщение отредактировал(а) kирилл - 16.6.2006, 12:57
PM MAIL   Вверх
Snowy
Дата 16.6.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Проверил, перепроверил - всё работает.
Попробуй создать приложение с нуля и добавить этот код, ничего не перенастраивая.
Если не сработает - выкладывай.

P.S. какая версия дельфей? 
PM MAIL   Вверх
kирилл
Дата 16.6.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.5.2005

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



Если приложение с нуля - то все отлично работает. А долбынный тулбар заливается черным smile 
PM MAIL   Вверх
Snowy
Дата 16.6.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



У тулбара нужно не в OnPaint писать, а в OnCustomDraw. 
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.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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