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

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.045 c
1-1094346129
eLVik
2004-09-05 05:02
2004.09.19
Посоветуйте компонент


4-1091618610
Jolik
2004-08-04 15:23
2004.09.19
Аналог KeyPressed() в Console Application...


8-1088135797
OFF
2004-06-25 07:56
2004.09.19
Альтернатива TCanvas и указателям?


1-1093886739
Jiurasrasr
2004-08-30 21:25
2004.09.19
Переключение форм в MDI приложении


14-1094097894
Deniz
2004-09-02 08:04
2004.09.19
vconxx???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский