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

Поиск:

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


Шустрый
*


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

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



Подскажите, как сделать подобную кнопку без применения экзотики (по-моему, можно сделать из SpeedBar, но как)?

user posted image


M
Girder
Название темы должно отражать ее суть!


  
PM MAIL   Вверх
comtat
Дата 13.6.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Вариантов много вот несколько :
1. Можно через PopupMenu
2. можно через ToolBar 
    создав кнопку Button и свойстве Style выбрать tbsDropDown 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
kирилл
Дата 13.6.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(comtat @  13.6.2006,  13:28 Найти цитируемый пост)
1. Можно через PopupMenu


Это меню показывается при щелчке правой кнопкой мыши

Цитата(comtat @  13.6.2006,  13:28 Найти цитируемый пост)
2. можно через ToolBar 
    создав кнопку Button и свойстве Style выбрать tbsDropDown  


На TButton свойства style не нашел. Да и делать один тулбар поверх другого - не лучший выход. Какие есть еще варианты?
 
PM MAIL   Вверх
comtat
Дата 13.6.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Ставишь на форму ToolBar
Нажимаешь правой кнопкой на нем вылазит меню
выбираешь New Button
в его свойствах находишь Style а том уж и  tbsDropDown  

Это сообщение отредактировал(а) comtat - 13.6.2006, 13:51


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
kирилл
Дата 13.6.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ToolBar я ставить не хочу, т.к. он не держит стиль XP, и тулбар становиться одноцветным и выделяется. 
PM MAIL   Вверх
z-END
Дата 13.6.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(kирилл @  13.6.2006,  15:48 Найти цитируемый пост)
ToolBar я ставить не хочу, т.к. он не держит стиль XP, и тулбар становиться одноцветным и выделяется.

а у тебя на скринщоте именно он и есть... 


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
kирилл
Дата 13.6.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(z-END @  13.6.2006,  14:59 Найти цитируемый пост)
а у тебя на скринщоте именно он и есть... 

У меня в винде настроено отображение в классическом стиле. Но я не думаю, что так всем нравится, поэтому необходимо, чтобы мои усилия по созданию панели в стиле WinXP не оказались напрасными...  

Это сообщение отредактировал(а) kирилл - 13.6.2006, 15:06
PM MAIL   Вверх
comtat
Дата 13.6.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Цитата
ToolBar я ставить не хочу, т.к. он не держит стиль XP, и тулбар становиться одноцветным и выделяется. 

Ну тогда используй ActionManager, XPColorMap и ActionToolBar

Могу пример кинуть ... 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
z-END
Дата 13.6.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Ты уж определись чего ты хочешьsmile
Цитата(kирилл @  13.6.2006,  13:50 Найти цитируемый пост)
Подскажите, как сделать подобную кнопку без применения экзотики

Цитата(kирилл @  13.6.2006,  16:05 Найти цитируемый пост)
Но я не думаю, что так всем нравится, поэтому необходимо, чтобы мои усилия по созданию панели в стиле WinXP не оказались напрасными... 

 


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
kирилл
Дата 13.6.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(z-END @  13.6.2006,  15:14 Найти цитируемый пост)
Ты уж определись чего ты хочешь

Компонент без экзотики необходим для сохранения стиля WinXP.

Цитата(comtat @  13.6.2006,  15:13 Найти цитируемый пост)
Ну тогда используй ActionManager, XPColorMap и ActionToolBar

Могу пример кинуть ... 


Буду очень признателен, если скинешь на адресс ok<at>mne<dot>ru 
PM MAIL   Вверх
comtat
Дата 13.6.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Короче берешь ActionManager, XPColorMap и ActionToolBar
и настраиваешь стиль под то что ты хошешь
так как ты считаешь, что должен выглядеть стиль XP

Удачи  smile  


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
kирилл
Дата 13.6.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Под "стиль ХР" имею ввиду переливаемость тулбара в ИЕ (он вначале светлый, а в конце темнее) 
PM MAIL   Вверх
comtat
Дата 13.6.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

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



Так всего лишь градиентная заливка нужна ?? 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
kирилл
Дата 13.6.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, но начальный и конечный цвета заранее не известны 
PM MAIL   Вверх
z-END
Дата 13.6.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



кстати, а разве тулбар XPmainfest не понимает?! 


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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