закруглить края формы 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.1182 ] [ Использовано запросов: 21 ] [ GZIP включён ] Закруглить края формы delphiШустрый Профиль Репутация: нет Здравствуйте, подскажите кто знает как сделать на Form закругленные края вверху и внизу, чтобы не обычные прямые углы, придать форме более округленную форму. Старательный Профиль Репутация: нет Стэкер «Разработка клиентских Windows-приложений на платформе MS.NET Framework» (623 с.djvu) Также http://forum.vingrad.ru/topic-82654.html » Как сделать окно неправильной формы?» Эксперт Профиль Репутация: нет Эксперт Профиль Репутация: 11
gambit, а что, в WPF есть такое понятие как Form? Да и топик создан в разделе «Разработка Windows Forms» Эксперт Профиль Репутация: нет
а почему нет? От измены названия суть то не меняется.
на мой взгляд классические WinForm, начинают потихоньку отмирать, по этому ни капли не удивлюсь здесь вопросу о wpf Добавлено через 1 минуту и 33 секунды Программист-романтик Профиль Репутация: нет
Шустрый Профиль Репутация: нет Эксперт Профиль Репутация: нет
Хорошо исправлюсь, сам люблю когда термины не выворачивают))
А чем вас не устроил ответ de_Nis. Какие конкретные вопросы? Добавлено через 8 минут и 19 секунд public Form1() GraphicsPath path = CreateRoundedRectangle(50, 50, 50, 50, 20); Шустрый Профиль Репутация: нет
Хорошо исправлюсь, сам люблю когда термины не выворачивают))
Эксперт Профиль Репутация: нет Там маленький баг, с тем что отрисовываемая область несовпадает с координатами формы, но у тебя все получится))
|