Quer aprender Delphi for PHP?

Caros amigos delphianos, estão com dificuldades em encontrar um bom material sobre Delphi for PHP? Visite a Comunidade Delphi so PHP e veja algumas notícias sobre as novas tendências desta ferramenta. Lá você vai encontrar dicas, downloads, artigos, videos e muito mais sobre o Delphi for PHP. Para se cadastrar é muito simples, rápido e seguro. Clique aqui e seja o mais novo membro da Comunidade Delphi so PHP e bons estudos.

No mais até a próxima.


quinta-feira, 21 de maio de 2009

Customização de erro na página

Pessoal, vou mostrar como não tomar aquele erro feio do ASP .NET do servidor quando ocorre erro na página.

A primeira coisa e criar uma página HTML customizada de erro.
A segunda coisa é colocar o bloco de código abaixo no WEBCONFIG do seu projeto:


Como colocar? Onde colocar esse código?

Bem simples, abra seu WEBCONFIG e coloque dentro da TAG system.web!

Neste momento o customErrors mode="On" estar ligado e qualquer erro no projeto será chamado o página erro404.htm.

Então foi isso pessoal. Até uma próxima dica...

Att,

quarta-feira, 20 de maio de 2009

InputQuery com mascara de MaskEdit

Olá galera,

essa vai para os que conhecem o inputQuery... Vai uma dica maneira!

Veja na função abaixo como colocar o maskedit no InputQuery:

function InputQueryDef(const ACaption, APrompt: string;
var Value: String): Boolean;
var
Form: TForm;
Prompt: TLabel;
MaskEdit: TMaskEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;

function GetAveCharSize(Canvas: TCanvas): TPoint;
var
I: Integer;
Buffer: array[0..51] of Char;
begin
for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
Result.X := Result.X div 52;
end;
begin
Result := False;
Form := TForm.Create(Application);
with Form do
try
Canvas.Font := Font;
DialogUnits := GetAveCharSize(Canvas);
BorderStyle := bsDialog;
Caption := ACaption;
ClientWidth := MulDiv(180, DialogUnits.X, 4);
Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
WordWrap := True;
end;
MaskEdit := TMaskEdit.Create(Form);
with MaskEdit do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.Top + Prompt.Height + 5;
Width := MulDiv(164, DialogUnits.X, 4);
MaxLength := 255;
EditMask := '!99/99/0000;1;_';
Text := Value;
SelectAll;
end;
ButtonTop := MaskEdit.Top + MaskEdit.Height + 15;
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'OK';
ModalResult := mrOk;
Default := True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'Cancelar';
ModalResult := mrCancel;
Cancel := True;
SetBounds(MulDiv(92, DialogUnits.X, 4), MaskEdit.Top + MaskEdit.Height + 15,
ButtonWidth, ButtonHeight);
Form.ClientHeight := Top + Height + 13;
end;
if ShowModal = mrOk then
begin
Value := MaskEdit.Text;
Result := True;
end;
finally
Form.Free;
end;
end;


Esta função não é nada mais nada menos que a propria função nativa do Delphi, só que rescrita com o MaskEdit!

Só isso...

Att,

Cadastro de senha mais segura!

Bem, vou mostrar agora uma função que obriga a senha possuir o primeiro caracter maiusculo e conter números.

Veja logo abaixo esta função:

function fValidaSenhaEspecial(const senha: string): boolean;
var
i, y: integer;
_s : string;
begin
// Inicia a função do falsa...
result := false;
// Verificando se a primeira letra é maiúscula.
if (pos(uppercase(copy(senha,1,1)),senha) = 1) then
for y := 1 to 9 do
for i := 1 to Length(senha) do
begin
_s := copy(senha,i,1);
// Verificando se há algum numero na string.
if (_s = inttostr(y)) then
// Todas validações foram feitas com sucesso.
result := true;
end;
end;


Simples não!?

Vamos ver agora como utiliza-la.

procedure Form1.Buttononclick(Sender: TObject);
begin
// Desta forma ele retorna FALSE
if (ValidaSenhaEspecial('elias10')) then
showmessage('Senha deve conter carecter o primeiro maiusculo e numeros!');

// Desta forma ele retorna TRUE
if (ValidaSenhaEspecial('Elias10')) then
showmessage('Senha OK!');
end;


Então pessoal, foi esta minha dica de hoje. Espero que ajude em algum lugar do seu código.

Att,

segunda-feira, 18 de maio de 2009

Vou mostrar aqui um pequeno exemplo da tecnologia REFLECTION

Vamos lá.

A primeira cousa a se fazer é criar um projeto em File -> New -> Project, lá vão ter algumas opções, escolha Console Application.

Proxímo passo é fazer o using do Reflecton. Logo no inicio do .CS faça o using System.Reflection;.

Agora, para exemplificar, vamos criar uma classe chamada Funcionario, veja como abaixo:
class Funcionario
{
public Funcionario(int codigo, string nome)
{
Codigo = codigo;
Nome = nome;
}

public int Codigo { get; set; }
public string Nome { get; set; }
public event EventHandler PegarValor;
}


Feito isso, já posso passar para a utilização propriamente dito do reflection. O primeiro passo é criar o objeto Funcionario passando os valores para seu construtor.
Funcionario FUNC = new Funcionario(123, "Elias Medeiros");

Agora, vamos atribuir os tipos referente ao objeto Funcionario para uma variavel do tipo Type. Com isso, vamos conseguir retorna qualquer tipo que o objeto possua.
Type Tipos = FUNC.GetType();

Vamos agora percorrer os tipos do objeto Funcionario.

1º - Propriedades: Reparem que estou criando uma variavel (PI) do tipo PropertyInfo para retornar as propriedades do objeto Funcionario. Para isso eu passo a variavel Tipos.GetProperties()...
foreach (PropertyInfo PI in Tipos.GetProperties())
{
Console.WriteLine(string.Format("Propriedade: {0} - Valor: {1}", PI.Name, PI.GetValue(FUNC, null)));
}


2º - Construtores e parametros: Neste caso, vamos criar um variavel (CI) do tipo ConstructorInfo. Para isso eu passo a variavel Tipos.GetConstructors().... Da mesmo forma, para pegar seus paametros, sendo que a variável será do tipo ParameterInfo. Para isso eu passo a variavel CI.GetParameters()....
foreach (ConstructorInfo CI in Tipos.GetConstructors())
{
Console.WriteLine(string.Format("Construtor: {0}", CI.Name));
foreach (ParameterInfo PI in CI.GetParameters())
{
Console.WriteLine(string.Format(" Parametros: {0}", PI.Name));
}
}


3º - Eventos: Para o caso de eventos, segui o mesmo princípio. Sendo que a variável será do tipo EventInfo. Para isso eu passo a variável Tipos.GetEvents()....
foreach (EventInfo EI in Tipos.GetEvents())
{
Console.WriteLine(string.Format("Eventos: {0}", EI.Name));
}


Então pessoal, esse foi um pequeno exemplo de Reflection. Espero que ajude...

Att,

sábado, 10 de janeiro de 2009

Erro de permissão ao acessar DLL no servidor.

Olá pessoal,

vou postar estar dica, pois me deu um trabalhão para descobre... rsrsrsr
Vamos lá:

recentemente me deparei com um erro (That assembly does not allow partially trusted callers), que ainda não tinha visto no .NET. Ai, começou pra mim, um saga de 26 horas para tentar colocar o site do meu cliente no ar novamente. Fiz de tudo, mas nada tinha explicação, pois na minha maquina (localhost) funcionava perfeitamente. Com isso, ficava difícil descobri o erro se não podia debbuga-lo. Até que de muito pesquisar, descobri de tinha algo há ver com permissão no servidor (provedor) na minha bin (pasta aonde ficam as dlls). A parti daí, já passei a ter um luz no final do túnel, rsrsrs. Passei então, a procurar por permissões em servidores, até descobrir, que alguma das minhas DLLs não tinha permissão para ser executada no meu provedor, pois por default de configuração deles o trust level era igual a medium (trust level="medium" (importante: Abra e feche a tag trust)), com isso, eu não consegui acessar uma das DLLs da minha aplicação.

Agora, vamos ver o que tive que fazer para contornar essa situação. Depois de pronto é bem simples, mas saber do zero o que fazer é bem diferente rsrsrs. Vamos lá.

A primeira coisa é editar o AssemblyInfo.cs que se encontar na pasta properties do projeto. Lá, você vai por esta linha de código: [assembly: AllowPartiallyTrustedCallers], vai saber aonde... Está pronto, esta parte...

Agora, vamos a segunda coisa a fazer. Abra seu web.config, em seguida coloque esta linha (trust level="Full" (importante: Abra e feche a tag trust)) de código logo abaixo do .Pronto, agora você passou a ter esta permissão no seu provedor.

Vou explicar o que significa "level=Full". Geralmente, nos provedores, esta opção vem definida como "medium", com isso em alguns casos (geralmente dlls acesso a banco) você passa a não ter mais permissão (ainda não descobri o por que disso). Colocando level igual a Full, você falar que sua aplicação tem total direito de acesso as DLLs. Com isso, este erro não acontecerá mais nas suas aplicações.

Importante: Não sei informar até que ponto isso pode ser bom. Mas por enquanto resolveu meu problema. Vou pesquisar se isso pode trazer algum problema ou não. Quando descobri, posto aqui no meu blog.

No mais, espero ter ajudado

Parceria