Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 15:17   #1
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию Форма без фона

Здраствуйте, необходимо сделать форму без фона ( не прям прозрачную , а чтобы фон был как края самой формы)
ну вот как в opera :

http://i068.radikal.ru/1008/98/0a2c9bf72f47.png


но, каким образом это сделать?
Nater вне форума Ответить с цитированием
Старый 20.08.2010, 15:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а чтобы фон был как края самой формы
Пока не понятно но... Попробуй компонент AlphaSkins
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 15:33   #3
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Ниже ссылка, переходи и всё сразу станет понятно. Alphaskins не походит.
Nater вне форума Ответить с цитированием
Старый 20.08.2010, 15:44   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,572
По умолчанию

В Опере интерфейс вручную отрисовывается.
Arigato вне форума Ответить с цитированием
Старый 20.08.2010, 15:53   #5
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Сообщение от Nater Посмотреть сообщение
Alphaskins не походит.
Это еще почему ?
В них как раз реализовано почти так же как на твоем рисунке !
Ты все Alpha-скины просматривал ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 20.08.2010, 16:44   #6
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

AlphaSkins может быть и подошел бы, но это много возьни и я видел как-то топик где человек переделал стандартный диалог ( кажись MessageBox ) подобным образом (без фона). Жаль забыл , где видел ))
Nater вне форума Ответить с цитированием
Старый 20.08.2010, 17:06   #7
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Ну тогда UpdateLayeredWindow вам в руки
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,pngimage;

type
  pRGBQuadArray = ^TRGBQuadArray;
  TRGBQuadArray = array [WORD] of TRGBQuad;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   x1,y1:integer;
   m:TMouse;
   b:boolean;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  DC: HDC;
  WS: Cardinal;
  R: TRect;
  i, j: integer;
  Row: pRGBQuadArray;
  PNGAlpha: pByteArray;
  Blend: TBlendFunction;
  BmpSize: TSize;
  TopLeft, BmpTopLeft: TPoint;
  FWorkPNG: TPNGObject;
  FWorkBMP: TBitmap;
begin
  Form1.BorderStyle:=bsNone;
  WS := GetWindowLong(Self.Handle, GWL_EXSTYLE);
  SetWindowLong(Self.Handle, GWL_EXSTYLE, WS or WS_EX_LAYERED);
  SetWindowLong(Self.Handle, GWL_EXSTYLE, WS_EX_LAYERED);

  GetWindowRect(Self.Handle, R);
  TopLeft.X := R.Left;
  TopLeft.Y := R.Top;

  BmpTopLeft := Point(0, 0);

  FWorkPNG := TPNGObject.Create;
  FWorkPNG.LoadFromFile('D:\2.png'); //Загрузка PNG картинки из файла

  BmpSize.cx := FWorkPNG.Width;
  BmpSize.cy := FWorkPNG.Height;

  FWorkBMP := TBitmap.Create;
  FWorkBMP.PixelFormat := pf32Bit;
  FWorkBMP.Width := BmpSize.cx;
  FWorkBMP.Height := BmpSize.cy;
  FWorkBMP.Canvas.Draw(0, 0, FWorkPNG);

  for i := 0 to FWorkBMP.Height - 1 do
  begin
    Row := FWorkBMP.Scanline[i];
    PNGAlpha := FWorkPNG.AlphaScanline[i];
    for j := 0 to FWorkBMP.Width - 1 do
    begin
      Row[j].rgbReserved := PNGAlpha[j];
      Row[j].rgbBlue := Round(Row[j].rgbBlue * Row[j].rgbReserved / 255);
      Row[j].rgbGreen := Round(Row[j].rgbGreen * Row[j].rgbReserved / 255);
      Row[j].rgbRed := Round(Row[j].rgbRed * Row[j].rgbReserved / 255);
    end;
  end;

  DC := GetDC(0);

  with Blend do
  begin
    BlendOp := AC_SRC_OVER;
    BlendFlags := 0;
    SourceConstantAlpha := 255;
    AlphaFormat := AC_SRC_ALPHA;
  end;
  
  UpdateLayeredWindow(Self.Handle, DC, @TopLeft, @BmpSize,
    FWorkBMP.Canvas.Handle, @BmpTopLeft, clNone, @Blend, ULW_ALPHA);

  ReleaseDC(0, DC);
  FWorkPNG.Free;
  FWorkBMP.Free;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if b then begin
 Form1.Left:=m.CursorPos.x-x1;
    Form1.Top:=m.CursorPos.y-y1;
    end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x1:=x;
y1:=y;
b:=true;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
b:=false;
end;

end.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 20.08.2010, 21:25   #8
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

спасибо конечно , но это не то ))

если не понятно что я хочу , то вот например у Media Player в висте присутсвует такой эффект - там все кнопки какбы за пределами самой формы , на рамке которая внизу расширена , вот мне нужно сам фон убрать , а эту рамку на всю форму сделать.
Nater вне форума Ответить с цитированием
Старый 20.08.2010, 22:59   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Если я правильно понял что вы хотите, то это делается через апи-функции Аэро (DwmApi.pas)...
Какая у вас версия Делфи?
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 21.08.2010, 09:22   #10
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

пост выше в точку!
если d2009 или выше то можно сделать через vcl (свойство формы GlassFrame) или же использовать вот это
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма без крестика ruavia3 Microsoft Office Excel 18 30.11.2010 17:18
Форма без рамок dmitriegorovih Общие вопросы Delphi 14 12.07.2010 09:01
Видео без фона sisofcase Свободное общение 7 19.10.2009 19:43
Форма без заголовка Михаил Юрьевич Общие вопросы Delphi 1 29.02.2008 21:40
Цифровые часы без фона Roof Помощь студентам 13 22.07.2007 12:18