Страница 1 из 2

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

Добавлено: 11 апр 2005, 14:11
Dr.Grizzly
Всем привет! Вот помню была компонента у меня которая форму делала как душе угодно, хоть в дырочку :) А вот прошло время и забыл как она назывлась, теперь ломаю голову как такое осуществить

Добавлено: 11 апр 2005, 16:45
Игорь Акопян
А может не надо, а? Или ты медиаплеер пишешь ;) ? Ты видел у МС хоть одно окно "в дырочку"? :)

Добавлено: 11 апр 2005, 17:10
Absurd
А вот прошло время и забыл как она назывлась, теперь ломаю голову как такое осуществить
SetWindowRgn() . Регион можно составить из однопиксельных полосочек, используя какой-нибудь битмэп в качестве лекала.
Ты видел у МС хоть одно окно "в дырочку"?
Помощники в углу Офисных апликух.

Добавлено: 12 апр 2005, 00:38
Игорь Акопян
Absurd писал(а):Помощники в углу Офисных апликух.
уел :)

Добавлено: 12 апр 2005, 15:40
Dr.Grizzly
:) М-м-да, попробую, но вот еще помнится такая вешь, рисую круг в паинте, круг закрашен одним цветом, а все что вне круга другим, бросаю эту компоненту на форму, даю ей эту картинку, выстваляю в свойствах внешний цвет и форма становиьтся круглой. Ни с чем таким не сталкивались??? ;)

Добавлено: 15 апр 2005, 08:29
OTELLO
Есть такие разработчики компонентов Raize, сайта увы не знаю. Вот они в одном дистрибутиве (фри) выпускают сразу кучу компонентов и там есть такой компонент- типа бросаешь его на форму, он выглядит как TImage растянутый на alClient. И всё. Там есть свойство типа TPicture? ну соответственно туда кинешь любой рисунок и форма подстать ему будет... =)))

Добавлено: 19 апр 2005, 11:39
Duncon
Вот пример из моей програмки, может поможет.
Я не стал ни чего удалять.

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

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.

Добавлено: 23 сен 2005, 08:15
Dimas
У формы есть два свойства

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

  Form1.TransparentColor:=true;
  //Включение режима прозрачности
  Form1.TransparentColorValue:=clRed;
  //Сделать цвет clRed прозрачным на форма
При помощи этих свойств можно сделать форму и в дырочку и в полосочку.

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

Однако тут, наверное, на прозрачном месте форма сама получает все события мыши. Так? А при SetWindowRgn она реально в дырочку.

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