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

Вниз

проблема с прозрачностью окон   Найти похожие ветки 

 
dubdaze   (2004-06-27 19:14) [0]

есть функция, которая делает окно прозрачным, она выглядит следующим образом

function RegionFromBitmap(ABitmap : Graphics.TBitmap; TransparentColour : TColor): HRGN;
var
x, y           : integer;
Rgn1, Rgn2  : hrgn;
Startx : integer;
InTransparent : Boolean;
begin
Rgn1 := 0;
For y := 0 to ABitmap.Height-1 do begin
  Startx := 0;
  InTransparent := True;
  For x := 0 to ABitmap.Width do begin
    If (ABitmap.Canvas.Pixels[x, y] = TransparentColour) or (x = ABitmap.Width) then begin
      If Not InTransparent then begin
        if Rgn1 = 0 then begin
          Rgn1 := CreateRectRgn(Startx, y, x, y+1);
        end
        else begin
          Rgn2 := CreateRectRgn(Startx, y, x, y+1);
          if Rgn2 <> 0 then CombineRgn(Rgn1, Rgn1, Rgn2, RGN_OR);
          DeleteObject(Rgn2);
        end;
      end;
      InTransparent := True;
    end
    else begin
      If InTransparent then begin
        Startx := x;
      end;
      InTransparent := False;
    end;
  end;
end;
Result := Rgn1;
end;

далее у меня есть таймер, который использует эту функцию для создания анимации (типа screen mate"а такого), форма, соответственно, делается прозрачной

procedure TForm1.Timer1Timer(Sender: TObject);
var
ABitmap: TBitmap;
ARegion: HRGN;
r: trect;
begin
ABitmap:=TBitmap.Create;
I:=I+1;
if I > 1 then I:=0;
case I of
  0: ABitmap.LoadFromFile("1.bmp");
  1: ABitmap.LoadFromFile("2.bmp");
end;
ARegion:=RegionFromBitmap(ABitmap, clLime);
SetWindowRgn(Handle, ARegion, True);
 r:=Rect(0, 0, Abitmap.Width, Abitmap.Height);
 Form1.Canvas.CopyRect(r, ABitmap.Canvas, r);
DeleteObject(ARegion);
ABitmap.Free;
end;

border style у формы bsNone, так вот проблема в том, что во время анимации при перетаскивании формы при помощи следующего кода

procedure MoveForm(Sender: TWinControl);
begin
 ReleaseCapture;
 Sender.Perform(WM_SYSCOMMAND, $F012,0);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then MoveForm(Self);
end;

остается ободок от формы, который хрен знает откуда берется, предполагаю, что он от установленной предыдущей картинкой формы, как это исправить?


 
wicked ©   (2004-06-27 21:06) [1]

никак.....



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

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

Наверх




Память: 0.47 MB
Время: 0.078 c
1-1093921769
Александр1
2004-08-31 07:09
2004.09.19
Реестр


10-1038907331
Nikols
2002-12-03 12:22
2004.09.19
Распределенный DataSet


4-1091314325
kulhacker
2004-08-01 02:52
2004.09.19
Своя кнопка в IE


3-1092904824
Slash
2004-08-19 12:40
2004.09.19
Удаление таблицы


1-1094544590
Koala
2004-09-07 12:09
2004.09.19
Как отменить ColumnResize у ListView