sábado, 12 de novembro de 2011

Como rolar um form com pgUp e pgDn

Versão: Todas

Plataforma: Windows/Win32

Q. Como posso fazer funções de rolagem num componente TForm usando comandos de teclado? Por exemplo, rolar pra cima e pra baixo quando pressionar PgUp ou PgDown. Existe algum método simples de fazer isso???

R. O rolamento do form é completo fazendo-se uma modificação na posição das propriedades VertScrollbar ou HorzScrollbar do form. Como mostrado no código a 
seguir:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
PageDelta = 10;
begin
  With VertScrollbar do
  if Key = VK_NEXT then
  Position := Position + PageDelta
  else if Key = VK_PRIOR then
  Position := Position - PageDelta;
end;

Como desabilitar as teclas Alt + F4


public
  { Public declarations }
  fecha: Boolean;
  end;

 implementation
 {$R *.DFM}

Function GetStateK (Key: integer): boolean;
begin
  Result := Odd (GetKeyState (Key));
end;

procedure Tfrm_HIP.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then
  Action := caNone 
Else
  Action := caFree;
end;

procedure Tfrm_HIP.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
   If GetStateK (VK_LMENU) And (Key = VK_F4) Then
      fecha := False;
end;

quarta-feira, 26 de outubro de 2011

Mostrando um formulário Modal usando Show

Um exemplo disso é quando você está mostrando um diálogo do progresso de uma operação.
O problema é que se você usa ShowModal todo o código da operação deve estar contido no form do diálogo de progresso. 

Para evitar isso use DisableTaskWindows and EnableTaskWindows.
Desta form seu diálogo vai agir como um formulário Modal e ao mesmo tempo permite executar o form da operação que está em progresso no diálogo.

procedure TForm1.ShowProgressDlg;
var
WindowList: Pointer;
begin
// Desabilita todos os formulários com exceção de FrmProgress
WindowList := DisableTaskWindows(FrmProgress.Handle);
try
FrmProgress.Show;
// Início do loop que executa a operação
FrmProgress.ProgressBar1.Position := FrmProgress.ProgressBar1.Position + 1;
// Fim do loop
finally
// Reabilita todos os formulários
EnableTaskWindows(WindowList);
FrmProgress.Close;
end; // try
end; // ShowProgressDlg

Mostrar um Form de Login antes do Form principal

  * Crie um novo Projeto. Este certamente terá o Form1.
  * Adicione um novo Form (Form2).
  * Coloque no Form2 dois botões TBitBtn.
  * Mude a propriedade Kind do BitBtn1 para bkOK.
  * Mude a propriedade Kind do BitBtn2 para bkCancel.
  * Vá no menu "Project/Options" na aba "Forms" e passe o Form2 de "Auto-create Forms" para "Available Forms".
  * Abra o arquivo Project.dpr (menu Project/View Source).
  * Altere o conteúdo deste arquivo conforme abaixo:
 
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 Login. Este deverá ser preparado para que se possa escolher o usuário, digitar a senha, etc.

Seja você também um(a) Divulgador(a) FR Promotora e ganhe comissões vitalícias.

A FR Promotora Oferece para você a oportunidade de ganhar Dinheiro de forma inteligente e justa.


Como Divulgador você vai ganhar dinheiro com o seu trabalho e com o trabalho dos seus indicados.


Você vai ganhar 60% sobre a 1ª mensalidade dos seus indicados e 20% sobre a primeira mensalidade dos indicados deles.


A partir da 2ª mensalidade dos seus indicados e dos indicados deles, você ganhará de 8 a 17% vitalícios sobre as mensalidades deles.


Crie uma Renda superior a R$ 1.500,00

Já a partir do 3º mês de trabalho


Acesse e faça seu cadastro:



FR PROMOTORA – Desde 1998 apresentando soluções

CNPJ.: 02.773.549/0001-44

segunda-feira, 17 de outubro de 2011

Otimizando Aplicações Oracle


Melhorar a performance das aplicações Oracle depende também da forma com que você utiliza o banco e da arquitetura do servidor. Veja algumas técnicas interessantes...

UTILIZE ARRAY NA ESTRUTURA DE STORAGE DO SERVIDOR

Bancos de dados, conceitualmente, utilizam intenso acesso à discos. Por esta razão e não só para o armazenamento de grandes massas de dados, os principais fabricantes de hardware disponibilizam unidades de "storage" de alto desempenho para serem integradas à servidores de dados.
Estas unidades SCSI utilizam um conceito extremamente moderno de "arrays" de disco, que são na verdade "condomínios" estruturados para conjugar diversos discos com o objetivo de ganhar segurança no armazenamento e performance no acesso para leitura e gravação.
Quanto maior a quantidade de discos, independentemente do seu tamanho, maior a possibilidade de performance. As controladoras de "array" permitem, inclusive, que se possa balancear segurança e performance, que são inversamente proporcionais.
Isso, por si só, não quer dizer que uma estrutura de "storage" super-dimensionada elimine a necessidade de um processador adequado ou de uma quantidade de memória física condizente com a utilização do equipamento. Pelo contrário, a questão "storage" precisa estar resolvida para que se possa planejar o processador e a quantidade de memória física necessários.
É comum em servidores com problemas de contenção de discos (fila de trabalho causada pela sobrecarga na utilização do "storage"), que o processador e a memória física sejam sub-utilizados, porque como a atividade está aguardando liberação do "storage", o processador e a memória acabam sendo requisitados pela velocidade em que a fila vai sendo liberada, muito abaixo do necessário.
É algo como olharmos o trânsito na saída do pedágio da Imigrantes num feriado de carnaval por exemplo. Antes do pedágio, dezenas de quilômetros de congestionamento. Após o pedágio,se existirem 10 postos de arrecadação, saem 10 veículos por vez... Se existirem 20 postos, saem 20 veículos por vez...
Quanto menos postos de arrecadação, mais a fila cresce potencialmente. O numero de postos de arrecadação corresponderia, numa analogia, ao número de discos do array.
Quanto mais lenta a liberação da fila, menos a estrada depois do pedágio (processador e memória física) é requisitada, a despeito dos quilômetros de congestionamento antes do pedágio...
Nestes casos, assim que se resolve o problema do "storage", ficam evidentes eventuais problemas de processador e de memória.

PADRONIZE AS DECLARACÕES SQL AO MÁXIMO

O Oracle trabalha todas as requisições de usuário na SGA (System Global Área), que é um pedaço da memória do servidor reservado para uso exclusivo do banco de dados.
Dentro da SGA, entre outras, o Oracle mantém uma área para compartilhamento de SQL, também chamado "pool compartilhado". Todas as declarações SQL são executadas dentro desse "pool".
Quando recebe uma declaração SQL, antes de carregá-la no "pool" o banco verifica se ela já existe. Se existir, a declaração já existente é executada. Isso aumenta a performance na resposta da declaração SQL. Desta forma, fazer várias declarações SQL idênticas, mas escritas de forma diferente, impede o banco de procurar respostas mais rápidas. Por exemplo:
SELECT * FROM CLIENTES WHERE CODIGO = 10;
Não é igual a
Select * from clientes where código = 10;
Se ambas as declarações forem escritas de forma idêntica, o tempo de resposta da segunda será menor. Agora imagine quantas vezes isso acontece dentro da sua aplicação. Percebeu quanto tempo pode ser economizado?

CRIE TABELAS DE ELEVADO CRESCIMENTO EM DATAFILES SEPARADOS

As tabelas da sua aplicação que potencialmente forem crescer muito rápido, isto é, tiverem uma elevada taxa de crescimento, você deve criar em DATAFILES separados, ou até mesmo em TABLESPACES separadas se preferir.
Isso irá diminuir consideravelmente a fragmentação das informações, e conseqüentemente melhorar a performance.

UTILIZE CORRETAMENTE ÍNDICES

A adequada utilização de índices contribui consideravelmente para melhorar o tempo de resposta das consultas SQL. Ao criar um índice, você dá ao banco a oportunidade de não ter que procurar informações na tabela inteira (operação chamada de "full scan") e de encontrá-las mais rapidamente através das estruturas dos índices.
Assim você deve criar índices:
- para indexar as colunas utilizadas nas cláusulas WHERE ou AND de uma declaração SQL;
- para indexar colunas que se referenciam a chaves-primárias de outras tabelas, ou seja, utilizadas em constraints foreign key;
Aqui uma consideração importante que você provavelmente vai ter dificuldade de encontrar em literaturas, mas que vivemos muito na "vida real".
O Oracle tem muita dificuldade em resolver através de índices a condição <> (diferente de). Assim, evite ao máximo usar esta condição em SELECTS que envolvam tabelas potencialmente grandes.