Escolar Documentos
Profissional Documentos
Cultura Documentos
As funções abaixo forçam para que a janela informada fique em primeiro plano.
Primeira alternativa
function ForceForegroundWindow(hwnd: THandle): Boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);
Segunda alternativa
Terceira alternativa
A biblioteca USER32.DLL possui uma função não documentada que propõe forçar o
foco em determinada janela. A declaração da função é:
procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
external user32 Name 'SwitchToThisWindow';
{x = false: Size unchanged, x = true: normal size}
{ Exemplo }
Atenção!
Nos testes que fiz usando Windows XP Professional e Delphi 6, a primeira e segunda
alternativas funcionaram perfeitamente. A última não funcionou nos testes, mas foi
mantida aqui para que outras pessoas possam experimentá-la.
Autor: Desconhecido
Início
private
procedure AjustarForm2;
procedure WMMove(var Msg: TMessage); message WM_MOVE;
procedure TForm1.AjustarForm2;
begin
if Form2 <> nil then begin
Form2.Width := Width;
Form2.Left := Left;
Form2.Top := Top + Height;
end;
end;
Observações
Início
Uma vez que queremos impedir que o form seja fechado com
Alt+F4, temos que dar ao usuário outra forma de fechá-lo.
Neste exemplo vamos colocar um botão para esta tarefa.
private
FPodeFechar: boolean;
FPodeFechar := false;
CanClose := FPodeFechar;
FPodeFechar := true;
Close;
Início
Impedir que o form seja arrastado para fora das margens da tela
- Na seção Private declare a procedure abaixo:
private
procedure WMMove(var Msg: TWMMove); message WM_MOVE;
Para testar:
Início
Solução:
Onde:
Memo1.Handle = manipulador da janela do Memo1.
WM_VSCROLL = Mensagem do Windows - rolagem vertical.
SB_PAGEDOWN = Comanndo de rolagem - página para baixo.
Outros exemplos:
Observações
Além desta técnica existem API's do Windows que fazem um trabalho equivalente.
Início
Início
Solução:
private
procedure WMNCHitTest(var Msg: TMessage);
message WM_NCHitTest;
public
{ Public declarations }
end;
implementation
{$R *.DFM}
Observações
Para fechar este aplicativo pressione Alt+F4. Uma alternativa mais elegante é colocar
um menu local (PopupMenu) com um comando para fechar.
Início
Observações
Os componentes Label, Edit (var Edt) e BitBtn's (botões) não são destruídos
explicitamente (Componente.Free). Isto não é necessário, pois ao criá-los informei
como proprietário o Form (ex: TLabel.Create(Form)). Neste caso, estes componentes
são destruídos automaticamente ao destruir o Form (Form.Free).
Início
Início
Observações
Início
Top := 0;
Left := 0;
Width := Screen.Width;
Height := Screen.Height;
Observações
Nos testes que fiz, mesmo com a barra de tarefas marcada como "Sempre Visível",
funcionou perfeitamente. Fiz os testes usando o Win95. Talvez em novas versões, possa
apresentar problemas.
Observações
interface
uses Forms, IniFiles, SysUtils, Messages, Windows;
implementation
{
Em cada formulário que deseja salvar/restaurar:
- Inclua na seção uses: uFormFunc
- No evento OnShow digite:
tbLoadFormStatus(Self, Self.Name);
- No evento OnClose digite:
tbSaveFormStatus(Self, Self.Name);
}
Observações
O arquivo INI terá o nome do executável e extensão INI e será salvo no diretório do
Windows. A palavra Self indica o Form relacionado com a unit em questão. Poderia ser,
por exemplo, Form1, Form2, etc. Onde aparece Self.Name poderá ser colocado um
nome a sua escolha. Este nome será usado como SectionName no arquivo INI e deve ser
idêntico no evento OnShow e OnClose de um mesmo Form, porém para cada Form
deverá ser usado um nome diferente.
Início
program Project1;
uses
Forms, Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
var
F: TForm2;
begin
F := TForm2.Create(Application);
try
if F.ShowModal = mrOK then begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
finally
F.Free;
end;
end.
Observações
O Form2 do exemplo é o Form de LogOn. Este deverá ser preparado para que se possa
escolher o usuário, digitar a senha, etc.
Início
Início