TForm
Code: |
Application.OnDeactivate |
- Подробности
- Родительская категория: TForm
- Категория: Перемещение формы
Code: |
type TfrmMain = class(TForm) private procedure OnMove(var Msg: TWMMove); message WM_MOVE; end;
(...)
procedure TfrmMain.OnMove(var Msg: TWMMove); begin inherited; (...) end;
(...) |
- Подробности
- Родительская категория: TForm
- Категория: Перемещение формы
В 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. |
- Подробности
- Родительская категория: TForm
- Категория: Прозрачность формы
Из одноимённой статьи с сайта delphi.about.com
В статье рассматривается приём создания обработчиков сообщений, которые позволяют форме при перетаскивании "прилипать" к краям экранной области.
Конечно же в Win API такой возможности не предусмотрено, поэтому мы воспользуемся сообщениями Windows. Как нам извесно, Delphi обрабатывает сообщения через события, генерируя его в тот момент, когда Windows посылает сообщений приложению. Однако некоторые сообщения не доходят до нас. Например, при изменении размеров формы, генерируется событие OnResize, соотвествующее сообщению WM_SIZE, но при перетаскивании формы никакой реакции не происходит. Конечно же форма может получить это сообщение, но изначально никаких действий для данного сообщения не предусмотрено.
- Подробности
- Родительская категория: TForm
- Категория: Перемещение формы
Автор : Нуржанов Аскар. (NikNet/Arazel)
Данный пример показывает, как сделать форму невидимой, а компоненты (image) видимые…
И ещё, если компонент имеет Transparent = false, то процедура не вырезает те части
которые должны быть вырезанные. Одни, словом как вы видите её визуально так и
увидите в Runtime.
- Подробности
- Родительская категория: TForm
- Категория: Прозрачность формы
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; |
- Подробности
- Родительская категория: TForm
- Категория: Перемещение формы
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. |
- Подробности
- Родительская категория: TForm
- Категория: Прозрачность формы
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. |
- Подробности
- Родительская категория: TForm
- Категория: Перемещение формы
В Delphi 6 разработчикам Windows-приложений доступна одна из замечательных возможностей создавать (полу)прозрачные формы (окна). В Delphi 6 класс TForm поддерживает формы со слоями, которые имеют свойства AlphaBlend, AlphaBlendValue, TransparentColor, и TransparentColorValue.
Прозрачность в форме означает то, что пользователь может видить то, что находится позати формы.
Чтобы подготовить форму к прозрачности, Вам потребуется установить свойство AlphaBlend в True. Если AlphaBlend установлено в True, то свойство AlphaBlendValue указывает степень прозрачности. Это свойство позволяет задать значения от 0 до 255. 0 указывает на полную прозрачность окна, в то время как 255 указывает на непрозрачное окно.
- Подробности
- Родительская категория: TForm
- Категория: Прозрачность формы
Code: |
{©Drkb v.3(2007): www.drkb.ru} Form1.AlphaBlendValue := 200 {Уровень прозрачности}; Form1.AlphaBlend := True; |
Delphi 6+
- Подробности
- Родительская категория: TForm
- Категория: Прозрачность формы
oncreate формы ставишь Application.Showmainform:=false; собственно и все , этим решается и вопрос с закладкой в таскбаре и с видимостью формы
Автор ответа: Diamond Cat
Я пытаюсь создать приложение, помещающее во время запуска иконку в системную область панели задач c надлежащим контекстным меню. Тем не менее приложение все еще остается видимым в панели задач. Использование Application.ShowMainForm:=False оказывается недостаточным.
Я тоже столкнулся с этой проблемой, но, к счастью, нашел ответ. Вот маленький код, который классно справляется с проблемой.
- Подробности
- Родительская категория: TForm
- Категория: Прячем форму
Страница 6 из 8