Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.045 c
1-1152541631
LeXaXaXa
2006-07-10 18:27
2006.08.27
Как перехватить сообщение закрытия окна?


10-1123169256
Tack
2005-08-04 19:27
2006.08.27
WebBroser не дает таскать текст в режиме редактирования


2-1154762266
max1991
2006-08-05 11:17
2006.08.27
OpenDialog


4-1146664587
grisme
2006-05-03 17:56
2006.08.27
Как вычислять параллельно?


1-1152993041
1234
2006-07-15 23:50
2006.08.27
Завершение работы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский