Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Окна нестандартной формы   Найти похожие ветки 

 
ronyn   (2006-07-26 00:54) [0]

В своей проге использовал рисунок синего цвета - для создания окна нестандартной формы. Потом этот рисунок сделал градиентным и после этого все белые места стало видно . В общем окно получилось просто квадратным. Файл для фона в формате *.bmp. Брал его же в формате  *.jpeg, тык там окно вообще не прорисовывается.


 
ssk ©   (2006-07-26 01:01) [1]

ну и...


 
Homo Sapiens ©   (2006-07-26 01:03) [2]

и чего ты хочешь спрсить?


 
ronyn   (2006-07-27 00:16) [3]

ПОЧЕМУ, КОГДА Я СТАЛ ИСПОЛЬЗОВАТЬ ДЛЯ ФОНА ГРАДИЕНТНУЮ КАРТИНКУ, ТО БЕЛАЯ ЧАСТЬ РИСУНКА СТАЛА ПРОРИСОВЫВАТЬСЯ, ХОТЯ НА МОНОЛИТНОМ РИСУНКЕ БЕЛЫЙ ЦВЕТ НЕ ПРОРИСОВЫВАЛСЯ.


 
Footballer ©   (2006-07-27 00:31) [4]

А градиент какого цвета? Или ещё лучше выложи картинку где-нибудь и дай посмотреть


 
McSimm ©   (2006-07-27 00:35) [5]

кричать не прилично :)

потому что цвет, задающий места прозрачности изменился.


 
SergProger ©   (2006-07-27 03:22) [6]

Цитата из статьи "Форма окна по Bitmap":

unit Unit1;

interface

uses
  Windows, Classes, SysUtils, Graphics, Forms;

type
  TRGBArray = array[0..32767] of TRGBTriple;
  PRGBArray = ^TRGBArray;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FRegion: THandle;
    function CreateRegion(Bmp: TBitmap): THandle;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.CreateRegion(Bmp: TBitmap): THandle;
var
  X, Y, StartX: Integer;
  Excl: THandle;
  Row: PRGBArray;
  TransparentColor: TRGBTriple;
begin
  Bmp.PixelFormat := pf24Bit;

  Result := CreateRectRGN(0, 0, Bmp.Width, Bmp.Height);

  for Y := 0 to Bmp.Height - 1 do
  begin
    Row := Bmp.Scanline[Y];

    StartX := -1;

    if Y = 0 then
      TransparentColor := Row[0];

    for X := 0 to Bmp.Width - 1 do
    begin
      if (Row[X].rgbtRed = TransparentColor.rgbtRed) and
        (Row[X].rgbtGreen = TransparentColor.rgbtGreen) and
        (Row[X].rgbtBlue = TransparentColor.rgbtBlue) then
      begin
        if StartX = -1 then StartX := X;
      end
      else
      begin
        if StartX > -1 then
        begin
          Excl := CreateRectRGN(StartX, Y, X + 1, Y + 1);
          try
            CombineRGN(Result, Result, Excl, RGN_DIFF);
            StartX := -1;
          finally
            DeleteObject(Excl);
          end;
        end;
      end;
    end;

    if StartX > -1 then
    begin
      Excl := CreateRectRGN(StartX, Y, Bmp.Width, Y + 1);
      try
        CombineRGN(Result, Result, Excl, RGN_DIFF);
      finally
        DeleteObject(Excl);
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromFile("C:\YourBitmap.bmp");
    FRegion := CreateRegion(Bmp);
    SetWindowRGN(Handle, FRegion, True);
  finally
    Bmp.Free;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteObject(FRegion);
end;

end.


 
Nic ©   (2006-07-27 07:39) [7]


> ronyn   (26.07.06 00:54)  


Код в студию ;)


 
GeLLeR ©   (2006-08-01 17:46) [8]

вот


procedure TMainForm.CreateBWindow(AHWND: HWND;bitmap:TBitmap);
var
 back_color:COLORREF;
 wnd_dc,hdc_bmp,tmp_rgn,wnd_rgn:HDC;
 width,height,x,y,x0:integer;
begin
 width:=bitmap.width;
 height:=bitmap.height;
 wnd_dc:=GetDC(aHwnd);
 hdc_bmp:=CreateCompatibleDC(wnd_dc);
 SelectObject(hdc_bmp,bitmap.handle);
 back_color:=GetPixel(hdc_bmp,0,0);
 tmp_rgn:=CreateRectRgn(0,0,0,0);
 wnd_rgn:=CreateRectRgn(0,0,0,0);
   x:=0;
 for y:=0 to height-1 do begin
 while (x<width-1) do
 begin
   while((GetPixel(hdc_bmp,x,y)=back_color) and
   (x<width)) do inc(x);
     if(x<>width) then
     begin
     x0:=x;
     while((GetPixel(hdc_bmp,x,y)<>back_color) and
    (x<width)) do inc(x);
    tmp_rgn:=createrectrgn(x0,y,x,y+1);
    CombineRgn(wnd_rgn,wnd_rgn,tmp_rgn,RGN_XOR);
    end;
  end;
  x:=0;
  end;
  DeleteObject(tmp_rgn);
  DeleteDC(hdc_bmp);
  SetWindowRgn(aHwnd,wnd_rgn,True);
  DeleteObject(wnd_rgn);
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
 CreateBWindow(MainForm.Handle,Image1.Picture.Bitmap);
end;


 
Gero ©   (2006-08-02 00:45) [9]

>   while((GetPixel(hdc_bmp,x,y)=back_color) and

Вот где собака порылась.



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
2-1154930963
валет
2006-08-07 10:09
2006.08.27
word


1-1152689814
Alexandr
2006-07-12 11:36
2006.08.27
Компонент для настройки шрифтов у компонетов на форме


2-1154809655
fog
2006-08-06 00:27
2006.08.27
TScrollBox


15-1154461397
AntiUser
2006-08-01 23:43
2006.08.27
В Израиле обнаружен изолированный "Затерянный Мир"


2-1154665343
MSVN
2006-08-04 08:22
2006.08.27
TrackBar и время