закруглить края формы delphi

Закруглить края формы delphi

Здраствуйте помогите пожалуйста кто чем может. Как можно закруглить уголки формы?что б смотрелось красивее. раньше я всегда решал этот вопрос вот таким кодом
Form1.Borderstyle := bsNone;
rgn := CreateRoundRectRgn(0,// x-coordinate of the region»s upper-left corner
0, // y-coordinate of the region»s upper-left corner
ClientWidth, // x-coordinate of the region»s lower-right corner
ClientHeight, // y-coordinate of the region»s lower-right corner
40, // height of ellipse for rounded corners
40); // width of ellipse for rounded corners
SetWindowRgn(Handle, rgn, True);

но в этом случае я просто не могу ее передвигать. кто знает какиеесть способы закруглить углы?


Робинзон ( 2007-06-18 13:36 ) [1]

Что бы передвигать форму вот часть кода
—————-перемещение формы—————-

<Для перемещения формы вне заголовка описываем процедуру>
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;


oldman © ( 2007-06-18 18:23 ) [2]


> что б смотрелось красивее.

Это ты сам решил, или тебе кто-то сказал? (Кин-Дза-Дза ©)

Источник

Закруглить края формы delphi

Трюки на Delphi 7
1. Создание круглой формы:

procedure TForm1.FormCreate(Sender: TObject);
var
f : HRGN;
begin
Form1.Borderstyle := bsNone;
f := CreateRoundRectRgn(0,0,
clientwidth, //x-координата закруглённых краёв
clientheight, //y-координата закруглённых краёв
40, //Высота закруглённых краёв
40); //ширина закруглённых краёв
SetWindowRgn(Handle,f,True);
end;

2. Градиентная заливка формы:

procedure TForm1.FormPaint(Sender: TObject);
var
Row, Ht: Word;
begin
Ht := (ClientHeight + 255) div 256;
for Row := 0 to 255 do
with Canvas do
begin
Brush.Color := RGB(Row, 100, 0);
FillRect(Rect(0, Row*Ht, ClientWidth, (Row+1) * Ht));
end;
end;

3. Скрытие Windows Caption:

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle,GWL_STYLE) AND
NOT WS_CAPTION);
ClientHeight := Height;
Refresh;
end;

это можно сделать намного проще скачать не сложную прогу «Регионы 7.0″ в которой вы рисуете нужную форму и сохраняете ее в формате txt в блокноте у вас бутет не большой код вашей окружности, вам только останется этот код добавить в Delphi. скачать эту прогу можете здесь.»http://www.delphiexpert.ru/load/soft/regions70.zip»

Недавно бродя по просторам интернета наткнулся на очень интересную программу. Все дело в том что программа позволяет с помощью встроенного визуального редактора создавать формы практически любой сложности (круг, ёлочка, треугольник, звезда), а после чего генерировать код, для вставки его в ваше Delphi приложение. Например, хочу я что бы Форма в моём delphi приложении была не квадратная а овальная. Раньше бы мне пришлось писать все это ручками, но с появлением этой замечательной программы все стало намного проще.

1. Открываем программу, рисуем нужную нам форму
2. Жмем на кнопку преобразовать, выбираем путь и название текстового файла для сохранения в нем кода.
3. Вставляем полученный код в свою программу!
4. Все.

Теперь немного поясню, как вставить полученный код в свою программу. Рассказывать буду на собственном примере. Итак, в текстовом файле у меня получился вот такой код:

X := 211
Y := 248
procedure CreateWindowsRegions(const X, Y : Integer; const RegionHandle : THandle);
var
PointsArray : Array[0..4] of TPoint;
FirstRegion, SecondRegion, CombineRegion : THandle;
begin
PointsArray[0] := Point(0 + X, 0 + Y);
PointsArray[1] := Point(0 + X, 130 + Y);
PointsArray[2] := Point(200 + X, 130 + Y);
PointsArray[3] := Point(110 + X, 70 + Y);
PointsArray[4] := Point(200 + X, 0 + Y);
FirstRegion := CreatePolygonRGN(PointsArray, 5, Winding);
CombineRegion := FirstRegion;
SetWindowRGN(RegionHandle, CombineRegion, true);
end;

Читайте также:  Как сделать классные фотки идеи

Нажимаю CTRL+SHIFT+C
Delphi сгенерировал шаблон для этой процедуры. Ну а дальше все просто, я добавил в шаблон недостающие строчки из полученного кода.
Важно: первые две строчки, у меня этоX := 211 иY := 248 добавлять не надо!

Ну теперь запускайте свое приложение и любуйтесь

Источник

Закруглить края формы delphi

var
tmpReg: HRGN;
begin
tmpRgn := CreateRoundRectRgn(X, Y, X1, Y1, XA, YA);
SetWindowsRgn(Self.Handle, tmpRgn);
end;

где X, Y, X1, Y1 — сам прямоугольник формы (отсчет от левого верхнего угла формы)
XA, YA — размер эллипса закругления углов по горизонтали и вретикали соответственно.
Эксперементируй. И пробуй также:

CreateRectRgn()
CreatePolygonRgn()
CombineRgn()

От: CR-LF
Дата: 19.02.06 06:02
Оценка:
От: Slava Antonov http://deadbeef.narod.ru
Дата: 19.02.06 07:15
Оценка:

Вам ненравятся лесенка? Тогда нужно смотреть в сторону layered windows — с их помощью можно сделать гладкие края. Для примера можно посмотреть Winamp 5.


Всего хорошего, Слава
ICQ: 197577902

От: Slava Antonov http://deadbeef.narod.ru
Дата: 19.02.06 07:15
Оценка:

Вам ненравятся лесенка? Тогда нужно смотреть в сторону layered windows — с их помощью можно сделать гладкие края. Для примера можно посмотреть Winamp 5.


Всего хорошего, Слава
ICQ: 197577902

От: Slava Antonov http://deadbeef.narod.ru
Дата: 19.02.06 07:37
Оценка:

Тут ко мне на аську кто-то стучался, но из-за того что у него старая, видимо миранда, он моих ответов не видит. Поэтому продуюлирую свою ответ сюда:
«Появились в Вин2000. См. msdn.
Поддреживают альфаканал — поэтому с окном можно делать что тебе вздумается.
Подробности в МСДН. Я не имею привычки использовать аську для советов. Есть вопросы — спрашивай в RSDN.»


Всего хорошего, Слава
ICQ: 197577902

От: bayonet1971
Дата: 19.02.06 07:42
Оценка:
От: Slava Antonov http://deadbeef.narod.ru
Дата: 19.02.06 08:29
Оценка:

Hello bayonet1971, you wrote:

>> Тут ко мне на аську кто-то стучался, но из-за того что у него старая,
>> видимо миранда, он моих ответов не
>> видит. Поэтому продуюлирую свою ответ сюда:
>> «Появились в Вин2000. См. msdn.
>> Поддреживают альфаканал — поэтому с окном можно делать что тебе
>> вздумается.
>> Подробности в МСДН.

> Я и стучался, раз уж ты указываешь свой номер.

Это не значит, что я собираюсь выступать в роли справочного бюро отвечая по ней на вопросы по программированию. Для этого я использую группы новостей и форумы. Т.к. туда я захожу и отвечаю когда мне удобно и когда мне хочется.

> У меня нету msdn.
> Можешь прислать инфу про это?

Грубо говоря — массив байт, задающих прозрачность каждого пиксела окна.


Всего хорошего, Слава
ICQ: 197577902

От: Flamer http://users.livejournal.com/_flamer_/
Дата: 19.02.06 14:42
Оценка:

Можно. Делаешь битмапку со скругленными углами, цвет, который должен быть прозрачным, выбираешь таким, чтобы его не было больше нигде на рисунке, загружаешь рисунок в TImage, вызываешь функцию

Читайте также:  журнал учета одноразовых шприцев систем
От: bayonet1971
Дата: 19.02.06 15:15
Оценка:

>Можно. Делаешь битмапку со скругленными углами, цвет, который должен быть
>прозрачным, выбираешь
>таким, чтобы его не было больше нигде на рисунке, загружаешь рисунок в
>TImage, вызываешь функцию

От: wellwell https://www.softperfect.com
Дата: 19.02.06 16:40
Оценка:
От: bayonet1971
Дата: 19.02.06 16:57
Оценка:
От: Flamer http://users.livejournal.com/_flamer_/
Дата: 19.02.06 22:04
Оценка:

Здравствуйте, bayonet1971, Вы писали:

B>Правда есть большой минус — из-за этой bmp-шки серъезно растет размер
B>иполняемого файла

Сохраняйте в PNG, как вариант. Для загрузки из PNG есть IImgCtx, который идет начиная с IE 4.0.

От: bayonet1971
Дата: 20.02.06 02:38
Оценка:
От: ekamaloff
Дата: 20.02.06 06:02
Оценка:

Здравствуйте, bayonet1971, Вы писали:

B>Действительно, все гениальное просто

Я себе сделал порт, бери если надо:

От: bayonet1971
Дата: 20.02.06 06:11
Оценка:
От: ekamaloff
Дата: 20.02.06 06:15
Оценка:

Портировать — значит перевести с одного языка на другой. Порт — корень слова «портировать»

От: Flamer http://users.livejournal.com/_flamer_/
Дата: 20.02.06 07:41
Оценка:
От: bayonet1971
Дата: 20.02.06 07:56
Оценка:
От: Flamer http://users.livejournal.com/_flamer_/
Дата: 20.02.06 08:00
Оценка:

Здравствуйте, bayonet1971, Вы писали:

Ну неужели _так_ сложно почитать то, что уже писали, а? Это такой COM-объект, который идет в поставке IE, начиная с версии 4.0. В общем, это не компонент для Дельфи (тьфу).

Источник

Закруглить края формы delphi

Шустрый

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

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

Эксперт

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

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

Смышленный

Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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

Шустрый

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

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

Код
var
R1, R2: HRgn;
begin
R1 := CreateRoundRectRgn(0, 0, ClientWidth, ClientHeight, 20, 20);
R2 := CreateRectRgn(0, 300, 420, 330);
CombineRgn(R1, R1, R2, RGN_DIFF);
SetWindowRgn(Handle, R1, True);
end;

Эксперт

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

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

Аццкий Сотона

Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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

Шустрый

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

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

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

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

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

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

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

Источник

Закруглить края формы delphi

Шустрый

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

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

Здравствуйте, подскажите кто знает как сделать на Form закругленные края вверху и внизу, чтобы не обычные прямые углы, придать форме более округленную форму.

Старательный

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

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

Стэкер «Разработка клиентских Windows-приложений на платформе MS.NET Framework» (623 с.djvu)
Раздел «Создание непрямоугольных форм Windows», стр.12. Книга есть в сети.

Также http://forum.vingrad.ru/topic-82654.html » Как сделать окно неправильной формы?»

Эксперт

Награды: 1

Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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

Эксперт

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

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

Цитата(gambit @ 24.1.2010, 11:17 )
А тип приложения какой.
a) WinForms
b) WPFForms

gambit, а что, в WPF есть такое понятие как Form?

Да и топик создан в разделе «Разработка Windows Forms»

Эксперт

Награды: 1

Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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

Цитата(tol05 @ 24.1.2010, 20:38 )
gambit, а что, в WPF есть такое понятие как Form?

а почему нет? От измены названия суть то не меняется.

Цитата(tol05 @ 24.1.2010, 20:38 )
Да и топик создан в разделе «Разработка Windows Forms»

на мой взгляд классические WinForm, начинают потихоньку отмирать, по этому ни капли не удивлюсь здесь вопросу о wpf

Добавлено через 1 минуту и 33 секунды

Программист-романтик

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

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

Цитата(gambit @ 25.1.2010, 00:16 )
а почему нет? От измены названия суть то не меняется.
Цитата(gambit @ 25.1.2010, 00:16 )
это не значит что их завтра запретят, это просто мое наблюдение, мой прогноз что в течении 3-5 лет, win form уйдет на второй план

Шустрый

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

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

Эксперт

Награды: 1

Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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

Цитата(Любитель @ 25.1.2010, 12:22 )
Ну и WPF, а не WPFForms, если уж придираться к терминологии.

Хорошо исправлюсь, сам люблю когда термины не выворачивают))

Цитата(Bezonik @ 25.1.2010, 12:35 )
ну допустим, с формами разобрались! есть еще примеры по созданию формы с закругленными концами, чтобы не прямоугольная получалась?

А чем вас не устроил ответ de_Nis. Какие конкретные вопросы?

Добавлено через 8 минут и 19 секунд

public Form1()
<
InitializeComponent();

GraphicsPath path = CreateRoundedRectangle(50, 50, 50, 50, 20);
this.Region = new System.Drawing.Region(path);

Шустрый

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

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

Цитата(Любитель @ 25.1.2010, 12:22 )
Ну и WPF, а не WPFForms, если уж придираться к терминологии.

Хорошо исправлюсь, сам люблю когда термины не выворачивают))

Цитата(Bezonik @ 25.1.2010, 12:35 )
ну допустим, с формами разобрались! есть еще примеры по созданию формы с закругленными концами, чтобы не прямоугольная получалась?

Эксперт

Награды: 1

Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

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

Там маленький баг, с тем что отрисовываемая область несовпадает с координатами формы, но у тебя все получится))

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

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

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

Источник

Читайте также:  Как сделать край вязания ровным
Статьи обо всем