
Как сделать форму не угловатой
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Всем привет! Вот помню была компонента у меня которая форму делала как душе угодно, хоть в дырочку
А вот прошло время и забыл как она назывлась, теперь ломаю голову как такое осуществить

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
А может не надо, а? Или ты медиаплеер пишешь
? Ты видел у МС хоть одно окно "в дырочку"? 


-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
SetWindowRgn() . Регион можно составить из однопиксельных полосочек, используя какой-нибудь битмэп в качестве лекала.А вот прошло время и забыл как она назывлась, теперь ломаю голову как такое осуществить
Помощники в углу Офисных апликух.Ты видел у МС хоть одно окно "в дырочку"?
2B OR NOT(2B) = FF
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
уелAbsurd писал(а):Помощники в углу Офисных апликух.

-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:


Есть такие разработчики компонентов Raize, сайта увы не знаю. Вот они в одном дистрибутиве (фри) выпускают сразу кучу компонентов и там есть такой компонент- типа бросаешь его на форму, он выглядит как TImage растянутый на alClient. И всё. Там есть свойство типа TPicture? ну соответственно туда кинешь любой рисунок и форма подстать ему будет... =)))
Вот пример из моей програмки, может поможет.
Я не стал ни чего удалять.
Я не стал ни чего удалять.
Код: Выделить всё
unit Menur;
interface
uses
Windows, Controls, StdCtrls, Classes, ExtCtrls, Forms, Messages, Graphics,
Buttons, Dan;
type
TMenur = class(TForm)
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
Shape4: TShape;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
BitBtn1: TBitBtn;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
procedure WMNCHITTEST(var Msg: TMessage); message WM_NCHITTEST;
public
{ Public declarations }
end;
var
Form_Menur: TMenur;
implementation
{$R *.dfm}
procedure TMenur.WMNCHITTEST(var Msg: TMessage);
begin
Msg.Result:=HTCAPTION;
end;
procedure TMenur.FormActivate(Sender: TObject);
var
Rgn1,Rgn2,Rgn3,Rgn4,Rgn5,Rgn6,Rgn7: HRGN;
begin
with Shape1 do
Rgn1:=CreateRectRgn(Left,Top,Left+Width,Top+Height);
with Shape2 do
Rgn2:=CreateRoundRectRgn(Left,Top,Left+Width,Top+Height,15,15);
with Shape3 do
Rgn3:=CreateRectRgn(Left,Top,Left+Width,Top+Height);
with Shape4 do
Rgn4:=CreateRectRgn(Left,Top,Left+Width,Top+Height);
with Shape5 do
Rgn5:=CreateRectRgn(Left,Top,Left+Width,Top+Height);
with Shape6 do
Rgn6:=CreateRoundRectRgn(Left,Top,Left+Width,Top+Height,15,15);
with Shape7 do
Rgn7:=CreateRoundRectRgn(Left,Top,Left+Width,Top+Height,15,15);
// with Shape6 do
// Rgn8:=CreateRoundRectRgn(Left,Top,Left+Width,Top+Height,15,15);
if CombineRgn(Rgn1,Rgn1,Rgn2,RGN_OR)<>ERROR then
if CombineRgn(Rgn1,Rgn1,Rgn3,RGN_DIFF)<>ERROR then
if CombineRgn(Rgn1,Rgn1,Rgn4,RGN_OR)<>ERROR then
if CombineRgn(Rgn1,Rgn1,Rgn5,RGN_OR)<>ERROR then
if CombineRgn(Rgn1,Rgn1,Rgn6,RGN_DIFF)<>ERROR then
if CombineRgn(Rgn1,Rgn1,Rgn7,RGN_DIFF)<>ERROR then
// if CombineRgn(Rgn1,Rgn1,Rgn8,RGN_DIFF)<>ERROR then
SetWindowRgn(Handle,Rgn1,True);
end;
procedure TMenur.Button1Click(Sender: TObject);
begin
Form_Dan.Show;
end;
procedure TMenur.SpeedButton1Click(Sender: TObject);
begin
Form_Dan.Show;
end;
end.
У формы есть два свойства
При помощи этих свойств можно сделать форму и в дырочку и в полосочку.
Код: Выделить всё
Form1.TransparentColor:=true;
//Включение режима прозрачности
Form1.TransparentColorValue:=clRed;
//Сделать цвет clRed прозрачным на форма
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ух ты! Это начиная с какой версии?TransparentColor
Предполагаю, что оно влияет на обработку сообщения EraseWindowBackGround....
Однако тут, наверное, на прозрачном месте форма сама получает все события мыши. Так? А при SetWindowRgn она реально в дырочку.
С какой версии незнаю у меня Delphi 6Ух ты! Это начиная с какой версии?
Форма реально дрявая.Однако тут, наверное, на прозрачном месте форма сама получает все события мыши. Так?