quarta-feira, 25 de novembro de 2009

Para converter corretamente caracteres do dos para win

Function JOemToAnsiStr(const OemStr: string): string;
begin
SetLength(Result, Length(OemStr));
if Length(Result) > 0 then
{$IFDEF WIN32}
OemToCharBuff(PChar(OemStr), PChar(Result), Length(Result));
{$ELSE}
OemToAnsiBuff(@OemStr[1], @Result[1], Length(Result));
{$ENDIF}
end;

Exemplo
var
Variavel: String;
begin
//Pode pegar por exemplo de uma variável DOS q venha de um DBF e converter para o padrão Win
Variavel := JOemToAnsiStr('Texto em DOS');
...



P. 1140

Protegendo uma aplicação com uma senha armazenada na própria aplicaçati

// Evento OnCreate do Form
procedure TForm1.FormCreate(Sender: TObject);
var
Senha : String;
OK : Boolean;
Tentativa : integer;
begin
Tentativa := 0;
OK := False;
while (Tentativa < 3) do
begin
InputQuery(‘Digite a sua senha’, ‘Você tem ‘ + IntToStr(3 - Tentativa) + ‘ tentativas’, senha);
if (senha = ‘Senha’) then
begin
OK := True;
Break;
end;
Inc(Tentativa);
end;
if not OK then
begin
ShowMessage(‘Tentativas excedidas. Pressione OK para terminar.’);
Application.Terminate;
end;
end;

Uma boa forma de usar mdichild

{Quando uso este recurso nas minhas aplicações eu consigo reduzir em muito o tempo de carregamento do software, sendo assim, resolvi partilhar com todos.

É simples, baseada em uma função (FormExiste), que verifica se um form (MDIChild) já existe na memória. Se existir ele somente dá o foco ao mesmo, senão ele o cria e o deixa na tela pronto para funcionar...

Deixando de conversa, vamos ao código!}

//Função de reconhecimento de MDIChilds
function FormExiste(NomeJanela : TForm) : Boolean;
//Função declarada

//Implementando a função
function TForm1.FormExiste (NomeJanela : TForm) : Boolean;
var i : integer;
begin
formexiste := false;
for i := 0 to ComponentCount -1 do
if Components[i] is TForm then
if TForm(Components[i]) = NomeJanela then
FormExiste := true;
end;

{Para fazer uso correto da função você deve
seguir o exemplo do procedimento abaixo}
procedure TForm1.Button1Click(Sender: TObject);
begin
if FormExiste(frmAlunos) = false then
begin
Screen.Cursor := crhourGlass;
Form2 := TForm2.Create(Self);
Screen.Cursor := crDefault;
end
Else
if FormExiste(Form2 then
begin
Form2.WindowState := wsNormal;
Form2.BringToFront;
Form2.SetFocus;
end;
end;

{Certo?

Espero ter ajudado!

Evaldo Barbosa
evaldobarbosa@hotmail.com}

Criando formulários no formato de bola

{Para criar uma janela não retangular, você deve criar uma Região do Windows e usar a função da API SetWindowRgn, desta maneira (isto funciona apenas em D2/D3):}
var hR : THandle;

begin
// Cria uma Região elíptica
hR := CreateEllipticRgn(0,0,100,200);
SetWindowRgn(Handle,hR,True);
end;

Criando evento em tempo de execução

Memo.onchange := memo1Change;

procedure TForm1.Memo1Change(Sender: TObject);
begin
panel1.caption:='Conteúdo alterado';
end;

Criando e excluindo tfields em tempo de execução

{Objetos TField (e seus descendentes) podem ser criados em tempo de desenvolvimento através do Fields Editor.

O Fileds Editor é acionado quando damos um clique duplo no componente de acesso a dados, ou seja, TTable ou TQuery. Mas nós podemos fazer isto em tempo de execução também.

Descendentes do TField componente (como TStringField, TIntegerField, etc.) são criados para que possamos chamar o métodos Create para o tipo de campo desejado.

Após criar o componente, precisamos especificar algumas propriedades para que a conexão com os dados funcione e assim poderemos alterar dados das tabelas. São
eles:

FieldName: nome do campo na tabela.
Name: nome do componente, usado pelo Delphi.
Index: É um número de identificação para o campo. Este número nunca é repetido,
automaticamente é controlado pelo Delphi.}
DataSet: O componente TTable ou TQuery ao qual queremos associar o campo.

O Código abaixo mostra a criação de um campo String. Usaremos o Objeto Query1
para nos referenciarmos ao DataSet.

procedure TForm1.Button2Click(Sender: TObject);
var T: TStringField;

begin
Query1.Close;

T := TStringField.Create(Self);
T.FieldName := 'CO_NAME';
T.Name := Query1.Name + T.FieldName;
T.Index := Query1.FieldCount;
T.DataSet := Query1;

Query1.FieldDefs.UpDate;
Query1.Open;
end;

Note que é necessário fechar o DataSet(Query1) antes de adicionarmos o novo campo.

Usamos a propriedade "Fieldcount" para definir o número da chave do campo criado, usando esta propriedade obteremos o número de TFileds que o DataSet(Query1) possui no momento, assim sempre estaremos criando um campo novo, pois se o primeiro começa com 0

Excluir um campo é bem mais simples, para isto basta criar um instância do tipo TComponent, e usar a função FindComponent para referenciá-lo ao objeto, para isto basta sabermos o nome do Objeto. A exclusão é feita através do método Free.

procedure TForm1.Button1Click(Sender: TObject);
var TC: TComponent;

begin
TC := FindComponent('Query1CO_NAME');
if not (TC = nil) then
begin
Query1.Close;
TC.Free;
Query1.Open;
end;
end;

Copiando registros de uma tabela para outra incluindo valores

NULL
procedure TtableCopiaRegistro(Origem, Destino: Ttable);
begin
with TabelaOrig do
begin
for i := 0 to FieldCount -1 do
if not Fields[i].IsNull then TabelaDest.Fields[i].Assign(Fields[i]);
end;
end;