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

Вниз

Вопросик мона?   Найти похожие ветки 

 
mindguru   (2002-02-02 08:50) [0]

Как нарисовать и таскать по экрану прозрачное окошко в 98/95? Заранее всем спасибо.


 
Pat   (2002-02-02 10:02) [1]

http://delphi.vitpc.com/treasury/samples.htm
Это нарисовать...а таскать там есть небольшие проблемы с перерисовкой окна...Может оптимизируешь..


 
AlexRush   (2002-02-02 18:47) [2]

В объявление класса формы нужно добавить следующую функцию:

protected
procedure CreateParams(var Params : TCreateParams); override;

Нажимаем Ctrl+C (сгенерить реализацию метода)
... и реазуем:

procedure TForm1.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_TRANSPARENT;
//форма становится прозрачной
end;
Работает во всех версиях Windы.
TODO: Посмотри описание апишных CreateWindow и CreateWindowEx

Для создания нестандартных форм окна смотри/используй
CreateEllipticRgn, CreatePolygonRgn и еже с ними.
Понадобятся примеры - пиши.


 
copyr25   (2002-02-04 18:45) [3]

...
private
{ Private declarations }
protected
procedure RebuildWindowRgn;
procedure Resize; override;
public
constructor Create(AOwner: TComponent); override;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}


constructor TForm1.Create(AOwner: TComponent);
begin
inherited;

RebuildWindowRgn;
end;
procedure TForm1.Resize;
begin
inherited;
RebuildWindowRgn;
end;
procedure TForm1.RebuildWindowRgn;
var
FullRgn, Rgn: THandle;
ClientX, ClientY, I: Integer;
begin
ClientX:= (Width - ClientWidth) div 2;
ClientY:= Height - ClientHeight - ClientX;
FullRgn:= CreateRectRgn(0, 0, Width, Height);
Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +
ClientHeight);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
for I:= 0 to ControlCount -1 do
with Controls[I] do begin
Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX + Left +
Width, ClientY + Top + Height);
CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
end;
SetWindowRgn(Handle, FullRgn, True);
end;



 
copyr25   (2002-02-04 18:47) [4]

unit Unit1;
// another method to create transparent form
interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
frmRegion, tempRegion: HRGN;
i: Integer;
Arect: TRect;

begin
frmRegion := 0;
for I := 0 to ControlCount - 1
do begin
{ create a region for the control }
aRect := Controls[i].BoundsRect;
{ coordinates have to be window-relative, not client area relative }
OffsetRect( aRect, clientorigin.x - left, clientorigin.y - top );
tempRegion := CreateRectRgnIndirect( aRect );
{ merge the region with the "summary" region we are building }
if frmRegion = 0 then frmRegion := tempRegion
else begin
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
end;
end;
{ create a region for the caption and menu bar and add it to the summary }
tempregion := CreateRectRgn( 0, 0, Width, GetSystemMetrics( SM_CYCAPTION )+
GetSystemMetrics( SM_CYSIZEFRAME ) +
GetSystemMetrics( SM_CYMENU ) * Ord(Menu <> Nil));
CombineRgn( frmRegion, frmRegion, tempRegion, RGN_OR );
DeleteObject( tempRegion );
SetWindowRgn( handle, frmRegion, true );
end;

end.



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

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

Наверх





Память: 0.46 MB
Время: 0.005 c
3-9389
kserg@ukr.net
2002-03-12 12:39
2002.04.04
ActiveControl - не срабатывает фокусировка в форме


14-9596
valievrf
2002-02-20 17:25
2002.04.04
СРОЧНО!!! ДЕЛО ИСКЛЮЧЕНИЯ И НЕ ИСКЛЮЧЕНИЯ!!!!


7-9658
drunya
2002-01-09 14:42
2002.04.04
Как определить номер который набираешь на телефоне


1-9535
snoup
2002-03-23 20:15
2002.04.04
Как в определенное время запустить exe-файл (например в 10:37) написав его название


1-9530
snoup
2002-03-23 20:15
2002.04.04
Как заставить сидиром заехать?





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