Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Произвольная форма кнопки(TButton) 
:(
    Опции темы
NOT
Дата 18.6.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 18.6.2005
Где: UA::CK

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



Здравствуйте. Надо очень узнать как делается нестандартная форма кнопки, курсовик горит. Приведите пример или дайте ссылку. Инфа, желательно должна быть понятной идиоту, т.к. за Delphi три дня только сижу. В нете инфы не нашел.
PM MAIL WWW   Вверх
Yanis
Дата 18.6.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В яндексе полно статей на эту тему. Достаточно включить поиск по функции SetWindowRgn и будет тебе счастье.
Добавлено @ 14:15
Ещё по теме http://forum.vingrad.ru/index.php?act=modu...faq§ion=679

Это сообщение отредактировал(а) Yanis - 18.6.2005, 14:12


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


Опытный
**


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

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



Yanis
SetWindowRgn будет тормозить, если много кнопок разной формы.

Лучше сделай Image'ем.
PM MAIL ICQ   Вверх
Yanis
Дата 18.6.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(NOT @ 18.6.2005, 12:31)
Инфа, желательно должна быть понятной идиоту, т.к. за Delphi три дня только сижу.

Как можно писать курсовик по/на Delphi, просидев в/за нём/ним всего лишь 3 дня?
Добавлено @ 16:41
To WolfON
Просто в вопросе написано
Цитата(NOT @ 18.6.2005, 12:31)
Надо очень узнать как делается нестандартная форма кнопки, курсовик горит.
вот я и предложил как сделать нестандартную форму кнопки smile


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


Детектив
*


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

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



NOT, вот тебе пример.
Помести в любое место формы кнопку TButton. Теперь в разделе var после Form1: TForm; напиши следующую строку: region: HRGN;
Этим ты объявишь переменную типа HRGN, то есть, по сути, регион.
Щелкни в любом свободном месте формы, перейди на вкладку Events инспектора объектов и дважды щелкни по методам OnCreate и OnDestroy. Заполни их следующими операторами:

Код

{процедура 1}
procedure TForm1.FormCreate(Sender: TObject);
begin
  region := CreateRoundRectRgn (0, 0, Button1.Width, Button1.Height, 60, 60);
  SetWindowRgn (Button1.Handle, region, true);
end;

{процедура 2}
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteObject (region);
end;

Поясняю.
В процедуре 1 ты создаешь регион. Переменной region типа HRGN присваиваешь значение CreateRoundRectRgn..., то есть прямоугольник с закругленными углами. Формат такой:

CreateRoundRectRgn (x1, y1, x2, y2, p1, p2);

где (x1,y1) - координаты верхнего левого угла, (x2,y2) - координаты нижнего правого угла, (p1,p2) - длина и высота закругления.
Существуют и другие функции создания регионов:

function CreateEllipticRgn (p1, p2, p3, p4: Integer): HRGN;
Создаёт эллиптический регион по четырём координатам

function CreateEllipticRgnIndirect (const p1: TRect): HRGN;
Создаёт эллиптический регион, впсанный в заданный прямоугольник p1

function CreateRectRgn (p1, p2, p3, p4: Integer): HRGN;
Создаёт прямоугольный регион по четырём координатам

function CreateRectRgnIndirect (const p1: TRect): HRGN;
Создаёт прямоугольный регион по заданному прямоугольнику p1

function CreateRoundRectRgn (p1, p2, p3, p4, p5, p6: Integer): HRGN;
Создаёт прямоугольный регион по координатам p1-p4 с эллиптически закруглёнными краями с высотой эллипса скругления p5 и шириной p6

Это, безусловно, не все, но тебе будет, думаю, достаточно.
Далее, SetWindowRgn отображает регион. Параметры: окно - элемент класса HWND (в нашем случае Button1.Handle), регион - переменная класса HRGN и флаг, указывающий, будет ли перерисовываться окно.

В процедуре 2 лишь удаляется созданный регион. Вот и все. Для того, чтобы эффект был более заметным, поменяй цвет формы. Можно также работать с цветами регионов, но я сам не помню, как.
Кроме того, с помощью регионов можно менять форму любого объекта, то есть и самой формы и других компонентов. За это и отвечает параметр функции SetWindowRgn типа HWND. К примеру, вместо Button1.Handle напиши Form1.Handle и посмотри, какой будет результат.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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