Главная страница
    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.032 c
14-1094044391
Гость
2004-09-01 17:13
2004.09.19
Делаю в таймере ClientSocket.Open; через пол-часа выдает


3-1092875123
Corvin
2004-08-19 04:25
2004.09.19
Как поменять месяц в дате средствами sql


1-1094477837
Lord de Mon
2004-09-06 17:37
2004.09.19
Ошыбки


1-1094472221
4МО
2004-09-06 16:03
2004.09.19
Где достать?


1-1094544199
Андрей2
2004-09-07 12:03
2004.09.19
В чем ошибка в следующем коде?





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