Escolar Documentos
Profissional Documentos
Cultura Documentos
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);
Result := False;
ForegroundThreadID :=
GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True)
then
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
begin
// Code by Daniel P. Stasinski
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0,
@timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
TObject(timeout), SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end;
Segunda alternativa
Terceira alternativa
{ Exemplo }
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
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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;
4. Coloque um botão no form e no seu evento Click coloque:
FPodeFechar := true;
Close;
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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:
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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.
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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).
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início
Observações
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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.
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início
Posicionar Form's em relação ao Desktop do Windows
{ Quando usamos a propridade Position de um Form para
centralizá-lo estamos sujeitos a um inconveniente:
dependendo da posição/tamanho da barra de tarefas do
Windows, o nosso Form poderá ficar parcialmente coberto
por ela. Uma forma eficaz de resolver este problema é
posicionar o form considerando apenas a área livre do
Desktop. Vejamos este exemplo:
Observações
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início
interface
uses Forms, IniFiles, SysUtils, Messages, Windows;
implementation
end.
{
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
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
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.
Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br
Início