João Mello

January 25, 2009

IsWindow – Verificando se handle existe

Filed under: Delphi, Dica, Karmas — joaomello @ 12:25 pm

Tudo certo delpheiros?!

O assunto que vou tratar hoje, é sobre um pequeno problema que me ocorreu estes dias… Eu tinha um handle de uma janela, mas queria saber se ela ainda existia.
Muito bem, muitos devem estar pensando nessa hora, por que não usa o FindWindow?! É simples! No FindWindow você passa como parâmetro o nome da classe e o caption dela – eis meu problema – mas a possibilidade de vir uma outra janela com os mesmo parâmetros era muito grande… E eu queria a quela, que eu já havia pego. Pois bem, foi aí que encontrei o FindWindow.
O método FIndWindow é simples de usa veja a sintax a baixo:

BOOL IsWindow(HWND hWnd);

Você só precisa passar o handle, que retornará um true ou false.
Vamos colocar a mão na massa!

Crie um novo projeto VCL Forms Application:

E no form que ja vem criado, coloque dois SpeedButton(ou qualquer outro tipo de botão):

E crie outro form com um Label no meio, com caption “Hello World!”:

E adicione o seguinte código no Form1:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, Unit2;
 
type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    hHandle: HWND;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  frm: TForm2;
begin
  frm := TForm2.Create(nil);
  frm.Show;
  hHandle := frm.Handle;
end;
 
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  if hHandle > 0 then
  begin
    if IsWindow(hHandle) then
      ShowMessage('Janela existe!')
    else
      ShowMessage('Janela não existe.');
  end;
end;
 
end.

Analisando o código do Form1:
Na procedure SpeedButton1Click, estamos criando um novo form e colocando o seu handle em uma váriavel local.
E na procedure SpeedButton2Click, estamos implementando o IsHandle.

Coloque o seguinte código no Form2:

unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm2 = class(TForm)
    Label1: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
 
end.

Analisando o código do Form2:
A única coisa que foi feita no Form2, foi mudar o Action para caFree(para que quando o formulário for fechado ele também seja destruído, e não persista) no evento FormClose.

Resultado:
Quando você for executar o exemplo vera que quando o Form2 estiver a aberto o IsWindow voltara com True e quando estiver fechado(e destruído) voltara com False.

Você até pode pensar que o exemplo foi simples, mas agora imagine que você automatizou o processo de download(exemplo no IE), e quer pegar a janela de progresso para saber em quantos porcentos esta e se o download ja acabou? O úsuario pode dar mais downloads, e novas janelas virem com mesmo nome e classe, mas você quer aquela em especifica… [É... acho que falei muito...  mas em um próximo artigo demonstro como fazer download automatico pelo IE ;) ]

Enfim… era isso. E um bom final de semana á todos!

Abraço,
Mello.

January 5, 2009

‘Indiguinação’ com Claro 3G - RS Parte 1

Filed under: Cotidiano, Dica, Karmas, Ponto de vista — joaomello @ 10:26 pm

Cara leitor, a idéia era manter um um blog aonde um pudesse compartilhar exemplos e pontos de vista, em meus horários vagos. Porém, nem isso me é permitido. No Meio de 3 posts, a internet cai e não reconecta mais, ou quando cai, volta mais fica caindo toda hora. Isso sem falar da velocidade, pago por 1Mb mas acesso 100kb no máximo! (eles deveriam de me dar no minimo 300kb). Isso não é o pior, ja que estou á mais de três messes pagando uma conta de R$99,00 para ter uma coisa que me da dor de cabeça ao conecetar a internet.

No ínicio foi bem diferente, minha conexão baseava-se em 800kb (poxa isso pra mim é d+), mas passou alguns messes e a coisa não foi bem assim… E nem adianta alegar tráfego maior que 1GB para ter cortado a internet, pois mais consigo acessa a página principal do Google(isso mesmo).

Enfim, delculpas por esse desabafo… Mas isso ta irritante já! A Claro fez uma propaganda, sobre carregou o sistema, piorou a qualidade e nada fez(aliás enquanto isso minha conexão ja caiu mais de 5x).
Se você esta pensando em adquirir digo, guarde seu money ou veja as da concorrente.

Essa é a primeira parte de uma série, amanhã estarei ligando para eles do trabalho… E começei a escrever colunas por lá mesmo. Ja chega disso como desculpas.

Abraço,
Mello.

Update: Sou cliente Vivo hoje, e 3G no Brasil ainda ta mau.

Powered by WordPress