Code:

Application.OnDeactivate

 

Code:

type

TfrmMain = class(TForm)

private

   procedure OnMove(var Msg: TWMMove); message WM_MOVE;

end;

 

(...)

 

procedure TfrmMain.OnMove(var Msg: TWMMove);

begin

inherited;

(...)

end;

 

(...)

 

В Windows есть для этого ф-я SetLayeredWindowAttributes, вот пример её использования:

Code:

unit Win2k;

interface

uses Graphics, Windows;

 

function SetLayeredWindowAttributes(

hwnd : HWND; // handle to the layered window

crKey : TColor; // specifies the color key

bAlpha : byte; // value for the blend function

dwFlags : DWORD // action

): BOOL; stdcall;

 

function SetLayeredWindowAttributes; external 'user32.dll';

implementation

 

end.

 

program WinLayer;

 

uses

Windows, SysUtils,

Win2k in 'Win2k.pas';

 

const

WS_EX_LAYERED= $80000;

LWA_COLORKEY = 1;

LWA_ALPHA = 2;

 

var

Hndl : THandle;

Transp : Byte;

 

begin

Writeln('Windows2000 Layer <- build by AK ->');

Writeln(' Usage: WINLAYER.EXE [window name] [Transp (0-255)]');

Writeln(' Example: WINLAYER "Calculator" 200');

Writeln;

if ParamCount <> 2 then exit;

Hndl := FindWindow(nil, PChar(ParamStr(1)));

Transp := StrToIntDef(ParamStr(2), 128);

if SetWindowLong(Hndl, GWL_EXSTYLE, GetWindowLong(Hndl, GWL_EXSTYLE) or WS_EX_LAYERED) = 0 then

Writeln('Error !');

 

if not SetLayeredWindowAttributes(Hndl, 0, Transp, LWA_ALPHA) then

// ^^^ степень прозрачности

// 0 - полная прозрачность

// 255 - полная непрозрачность

Writeln('Error !');

end.

  

 Из одноимённой статьи с сайта delphi.about.com

 В статье рассматривается приём создания обработчиков сообщений, которые позволяют форме при перетаскивании "прилипать" к краям экранной области.

 Конечно же в Win API такой возможности не предусмотрено, поэтому мы воспользуемся сообщениями Windows. Как нам извесно, Delphi обрабатывает сообщения через события, генерируя его в тот момент, когда Windows посылает сообщений приложению. Однако некоторые сообщения не доходят до нас. Например, при изменении размеров формы, генерируется событие OnResize, соотвествующее сообщению WM_SIZE, но при перетаскивании формы никакой реакции не происходит. Конечно же форма может получить это сообщение, но изначально никаких действий для данного сообщения не предусмотрено.

 

 

Автор : Нуржанов Аскар. (NikNet/Arazel)

 

Данный пример показывает, как сделать форму невидимой, а компоненты (image) видимые…

И ещё, если компонент имеет Transparent = false, то процедура не вырезает те части

которые должны быть вырезанные. Одни, словом как вы видите её визуально так и

увидите в Runtime.

 

 

For some reason messages.pas declares no message record for this message

Code:

type

TWmMoving = record

   Msg: Cardinal;

   fwSide: Cardinal;

   lpRect: PRect;

   Result: Integer;

end;

 

// Add a handler to your forms private section:

 

procedure WMMoving(var msg: TWMMoving); message WM_MOVING;

 

// Implement it as

 

procedure TFormX.WMMoving(var msg: TWMMoving);

var

   r: TRect;

begin

   r := Screen.WorkareaRect;

  // compare the new form bounds in msg.lpRect^ with r and modify it if

  // necessary

   if msg.lprect^.left < r.left then

     OffsetRect(msg.lprect^, r.left - msg.lprect^.left, 0);

   if msg.lprect^.top < r.top then

     OffsetRect(msg.lprect^, 0, r.top - msg.lprect^.top);

   if msg.lprect^.right > r.right then

     OffsetRect(msg.lprect^, r.right - msg.lprect^.right, 0);

   if msg.lprect^.bottom > r.bottom then

     OffsetRect(msg.lprect^, 0, r.bottom - msg.lprect^.bottom);

   inherited;

end;

 

 

 

Code:

unit transpar_frm;

{©Drkb v.3: www.drkb.ru}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   CheckBox1: TCheckBox;

   // это просто кнопки на форме - для демонстрации

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;

// StayOnTop в принципе можно убрать

FormStyle:=fsStayOnTop;

// убираем скроллбары, чтобы не мешались

// при изменении размеров формы

HorzScrollBar.Visible:= False;

VertScrollBar.Visible:= False;

// строим новый регион

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);

// создаем регион для клиентской части формы

// и вычитаем его из FullRgn

Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +

ClientHeight);

CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);

// теперь добавляем к FullRgn регионы каждого контрольного элемента

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;

end.

 

Code:

unit DragMain;

 

interface

 

uses

SysUtils, WinTypes, WinProcs,  Messages,

Classes, Graphics, Controls, Forms, Dialogs, StdCrtls;

 

type

TForm1 = class(TForm)

   Button1: TButton;

   procedure ButtonClick(Sender: TObject);

private        

   procedure WMNCHitTest(var M: TWMNCHitTest);

                message wm_NCCHitTest;

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1. WMNCHitTest(var M: TWMNCHitTest);

 

begin

inherited;

if M.Result = htClient then

   M.Result := htCaption;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

 

begin

Close;

end;

 

end.

 

 

В Delphi 6 разработчикам Windows-приложений доступна одна из замечательных возможностей создавать (полу)прозрачные формы (окна). В Delphi 6 класс TForm поддерживает формы со слоями, которые имеют свойства AlphaBlend, AlphaBlendValue, TransparentColor, и TransparentColorValue.

 

Прозрачность в форме означает то, что пользователь может видить то, что находится позати формы.

 

Чтобы подготовить форму к прозрачности, Вам потребуется установить свойство AlphaBlend в True. Если AlphaBlend установлено в True, то свойство AlphaBlendValue указывает степень прозрачности. Это свойство позволяет задать значения от 0 до 255. 0 указывает на полную прозрачность окна, в то время как 255 указывает на непрозрачное окно.

 

Code:

{©Drkb v.3(2007): www.drkb.ru}

Form1.AlphaBlendValue := 200 {Уровень прозрачности};

Form1.AlphaBlend := True;

 

 

Delphi 6+

oncreate формы ставишь Application.Showmainform:=false; собственно и все , этим решается и вопрос с закладкой в таскбаре и с видимостью формы

 

Автор ответа: Diamond Cat

 

Я пытаюсь создать приложение, помещающее во время запуска иконку в системную область панели задач c надлежащим контекстным меню. Тем не менее приложение все еще остается видимым в панели задач. Использование Application.ShowMainForm:=False оказывается недостаточным.

 

Я тоже столкнулся с этой проблемой, но, к счастью, нашел ответ. Вот маленький код, который классно справляется с проблемой.