Как сделать форму не угловатой

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

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

Всем привет! Вот помню была компонента у меня которая форму делала как душе угодно, хоть в дырочку :) А вот прошло время и забыл как она назывлась, теперь ломаю голову как такое осуществить
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

А может не надо, а? Или ты медиаплеер пишешь ;) ? Ты видел у МС хоть одно окно "в дырочку"? :)
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

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

Absurd писал(а):Помощники в углу Офисных апликух.
уел :)
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

:) М-м-да, попробую, но вот еще помнится такая вешь, рисую круг в паинте, круг закрашен одним цветом, а все что вне круга другим, бросаю эту компоненту на форму, даю ей эту картинку, выстваляю в свойствах внешний цвет и форма становиьтся круглой. Ни с чем таким не сталкивались??? ;)
OTELLO
Сообщения: 59
Зарегистрирован: 11 дек 2004, 11:52
Откуда: Питеррр
Контактная информация:

Есть такие разработчики компонентов Raize, сайта увы не знаю. Вот они в одном дистрибутиве (фри) выпускают сразу кучу компонентов и там есть такой компонент- типа бросаешь его на форму, он выглядит как TImage растянутый на alClient. И всё. Там есть свойство типа TPicture? ну соответственно туда кинешь любой рисунок и форма подстать ему будет... =)))
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Вот пример из моей програмки, может поможет.
Я не стал ни чего удалять.

Код: Выделить всё

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.
Dimas
Сообщения: 7
Зарегистрирован: 23 сен 2005, 06:40

У формы есть два свойства

Код: Выделить всё

  Form1.TransparentColor:=true;
  //Включение режима прозрачности
  Form1.TransparentColorValue:=clRed;
  //Сделать цвет clRed прозрачным на форма
При помощи этих свойств можно сделать форму и в дырочку и в полосочку.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

TransparentColor
Ух ты! Это начиная с какой версии?
Предполагаю, что оно влияет на обработку сообщения EraseWindowBackGround....

Однако тут, наверное, на прозрачном месте форма сама получает все события мыши. Так? А при SetWindowRgn она реально в дырочку.
Dimas
Сообщения: 7
Зарегистрирован: 23 сен 2005, 06:40

Ух ты! Это начиная с какой версии?
С какой версии незнаю у меня Delphi 6
Однако тут, наверное, на прозрачном месте форма сама получает все события мыши. Так?
Форма реально дрявая.
Ответить