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.


sábado, 4 de outubro de 2008

Pegar nome do usuário na rede

Pegar nome do usuário na rede

Colocar na chamada de Uses de sua Unit as seguintes DCUs : DBITYPES, DBIPROCS, DBIERRS e DB.

function TForm1.usuario : string;
var
szNetName: Array[0..48] of Char;
iResult: DBIResult;
begin
iResult:= DBIGetNetUserName(szNetName);
if iResult <> DBIErr_None then
DBIError( iResult )
else
Result:= StrPas(szNetName);
end;

Criando um instalador do seu aplicativo.

{Supondo que você fez um sistema, que está no diretório C:\Contas, deixe apenas o Arquivo executável .exe e as suas tabela .db (para Arquivoc Paradox) e os arquivos de índice que são de extensão *.PX e *.XG0. Se você possui imagens coloque as também. Supondo ainda que você queira instalar o seu programa no diretório C:\ContasNew.

1) Na primeira tela, escolha a opção Create a new Setup Project

2) Na segunta tela (New Project), na caixa Project Name escreva o nome que quer dar em seu Projeto (Ex. ContasNew)

3) Clique em Create

4)Na lista que irá aparecer clique no 1º botão (Application Informatio)

5)Clique no botão Browse, e escolha o executável, no meu caso será o Contas.exe que está dentro do diretório C:\Contas

6)Na opção Defalt Destination Directory deixe apenas C:\ContasNew, se quizer que seja instalado dentro do diretório Arquivos de Programa deixe como ao lado \ContasNew

7)Clique em OK

8)Clique na opção General Options, clique no DBE (Borland DataBase Engine)

9)Irá aparecer uma segunda tela, clique em avançar.

10) Se no seu programa você utiliza um alias para se referenciar as suas tabelas, clique em New você terá que digitar o nome

do seu Alias e depois clique em OK

11) Clique em Avançar, escolha (marque a opção) Save .CFG file for.......

12) Clique em Avançar. No campo Path digite o caminho de suas tabelas (C:\ContasNew)

13) No campo Type, escolha o tipo de Tabela que você usou (Paradox)

14) Clique em avançar, depois em Concluir e depois em OK.

15) Clique no botão Groups and Files.

16) Clique sobre a pasta Program Files.

17) Clique em Launch Explorer, irá aparecer o Explorer do windows. Entre no diretório que estão os seus arquivos *.exe, *.db, *.PX e etc)

18) Selecione todos os Arquivos (Tecla Shift pressionada)

19) Após selecionados os arquivos, arraste-os para a barra de tarefas, em cima do Icone do InstallShield, ele será maximizado e você colocará os arquivos no espaço em branco do File Groups .

20) Clique em OK (neste monento, o DBE e todos os seus arquivos já estão configurados).

21) Clique no botão Dialog Boxes. Iremos montar as telas que irão fazer a interface com o usuário na hora da instalação.

22) Selecione apenas a opção Welcome Message (2º), Select Program Folder e a opção Setup Complete (Última opção)

23) Clique em OK.

24) No final da página clique em Click Here for page 2

25) Clique no botão de Disk Builder

26) Escolha o tamanho dos disquetes Disk Syze (1.44), depois clique em Build

27) Depois de pronto o disco, clique em Close. (Criamos no mínimo 3 discos, pois o DBE ocupa 3 discos e mais o nosso programa).

28) Se você quiser testar se a instalação está correta, clique em Test Run.

29) Para copiar os discos de instalação, clique em Copy to Floppy.

30) Selecione o disco que você quer copiar ou selecione todos os discos em Copy All Disk ..... E selecione para que drive será copiado os discos de instalação.

31) Pronto. Os seus discos de instalação já estão copiados. }

Retornando o abono salarial.

Esta é uma função para calcular de modo progressivo um abono (de uma folha de pagamento, por exemplo) sem cometer injustiça. Digamos que todos os funcionários que ganham até R$ 299,99 recebam um abono de R$ 50,00 e acima deste valor, um abono de R$ 30,00.


Se não aplicarmos a fórmula, poderá acontecer que, quem ganha, por exemplo, R$ 290,00 receberá R$ 340,00 (e o correto seria ganhar R$ 324,00) passando a ganhar mais de que quem ganhava R$ 300,00, pois este terá apenas um abono de R$ 30,00, recebendo R$ 330,00. A função a seguir corrige estas distorções e pode ser aplicada num banco de dados para diversas faixas salariais:


function Abono (S, F, A1, A2: Double) : Double;
begin
If S>=F then
begin
Result:=S+A2
end
else
begin
If S>F-A1 then
Result:=(100-(((F-S)/A1)*100))*A2/100+F
else
Result:=S+A1
end;
end;

Onde S = Salário (No nosso exemplo R$ 290,00 ou R$ 300,00).
F = Faixa do Abono (No nosso exemplo R$ 300,00).
A1 = 1º Abono (Valor mais alto, no nosso exemplo R$ 50,00).
A2 = 2º Abono (Valor mais baixo, no nosso exemplo R$ 30,00).
Result = Retorno da função com o calculo do novo salário.

Para utilizar basta chamar a função passando as variáveis ou campos do banco de dados exatamente como na ordem acima. Como exemplo, veja como ficaria o código do botão "Calcular Novo Salário" na interface abaixo:


procedure TForm1.Button1Click(Sender: TObject);
begin
Edit5.Text := FloatToStr(
Abono( StrToFloat(Edit4.Text), //Salário
StrToFloat(Edit1.Text), //Faixa
StrToFloat(Edit2.Text), //Aumento 1
StrToFloat(Edit3.Text) //Aumento 2
)
); //FloatToStr();
end;

Evento para deixar um grid zebrada.

Evento para deixar um grid zebrada.

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;

até a próxima pessoal.

INÍCIO E FIM DE UMA TRANSAÇÃO

INÍCIO E FIM DE UMA TRANSAÇÃO
Toda transação tem um ponto de partida, normalmente uma chamada ao método StartTransaction. O término da transação, por sua vez, é definido por uma chamada ao método Commit (confirma) ou Rollback (cancela). Portanto, em termos de código, seria algo assim:

var t : TTransactionDesc;
begin
// dbExpress
try
t.IsolationLevel := xilREADCOMMITTED;
SQLConnection.StartTransaction( t );
// Aqui seriam feitos os updates, deletes e inserts
SQLConnection.Commit( t );
except
SQLConnection.Rollback( t );
end;

// ADO
try
ADOConnection.BeginTrans;
// Aqui seriam feitos os updates, deletes e inserts
ADOConnection.CommitTrans;
except
ADOConnection.RollbackTrans;
end;

// BDE
try
Database.StartTransaction;
// Aqui seriam feitos os updates, deletes e inserts
Database.Commit;
except
Database.Rollback;
end;

// IBX
try
IBTransaction.StartTransaction;
// Aqui seriam feitos os updates, deletes e inserts
IBTransaction.Commit;
except
IBTransaction.Rollback;
end;
end;

Como não deixar um programa executar mais de uma vez.

Evitar que um programa seja executado mais de uma vez
{ Muitos programas Windows permitem apenas uma cópia em
execução de cada vez. Isto é interessante principalmente
quando é um grande aplicativo, pois duas cópias ao mesmo
tempo usuaria muito mais memória. Em aplicativos
desenvolvidos em Delphi podemos ter esta característica.
Vejamos:

- Crie um novo projeto;
- Mude o "Name" do Form1 para DPGFormPrinc;
- Altere o código-fonte do arquivo Project1.dpr
conforme abaixo: }

program Project1;

uses
Forms, Windows,
Unit1 in 'Unit1.pas' {DPGFormPrinc};

{$R *.RES}

var
Handle: THandle;
begin
Handle := FindWindow('TDPGFormPrinc', nil);
if Handle <> 0 then begin { Já está aberto }
Application.MessageBox('Este programa já está aberto. A cópia ' +
'anterior será ativada.', 'Programa já aberto', MB_OK);
if not IsWindowVisible(Handle) then
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
Exit;
end;
Application.Initialize;
Application.CreateForm(TDPGFormPrinc, DPGFormPrinc);
Application.Run;
end.

Observações
Para testar este programa você deverá compilar o projeto e fechar o Delphi. Depois, procure o
Project1.exe (projeto compilado) usando o Windows Explorer e tente executá-lo mais de uma vez e veja
o que acontece. Mas porque alterar o name do form principal para "DPGFormPrinc"? Este poderia ser
qualquer outro nome, mas preferi usar as iniciais do meu nome (DPG). Procurei deixar um nome bem
pessoal para não correr o risco de colocar um nome que possa ser encontrado em outro aplicativo do Windows.
Por exemplo: se deixar Form1, será bem fácil encontrar outro aplicativo feito em Delphi que possua uma
janela com este nome, o que causaria problema.

Como conectar utilizando arquivo .ini?

Um dos maiores problemas do programador está quando temos de colocar o caminho do banco de dados no sistema. Nossa proposta é simplificar o máximo esta tarefa.

Acrescente ao projeto os arquivos “CaminhoBanco”. (Clique aqui para fazer o download).
Acrescente ao uses do Datamodule o frmCaminhoBanco.


No datamodule coloque:

//Na sessão USES:
//INIFiles, Forms;

No DataModuleCreate:

const
AliasName = 'Nome do Programa';
FileName = 'Config.ini';
var
ServerName: String;
IniFileName: TIniFile;
ListaParms: TStringList;
begin
DM.Banco.Connected := False;
//Lê arquivo.ini no diretório da aplicação
IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName);
try
ServerName:= Trim(IniFileName.ReadString(Application.ExeName,'Banco',''));
finally
IniFileName.Free;
end;
//Termina a aplicação se o servidor não foi fornecido
if ServerName = '' then
Begin
frmCaminhoBanco := TfrmCaminhoBanco.Create(Application);
frmCaminhoBanco.ShowModal;
frmCaminhoBanco.Free;
end;
//Cria lista de Parâmetros
ListaParms:= TStringList.Create;
With ListaParms do
begin
add('user_name=SYSDBA');
add('password=masterkey');
end;
//Define conexão
try
try
Banco.DatabaseName := ServerName;
Banco.Params := ListaParms;
except
Begin
frmCaminhoBanco := TfrmCaminhoBanco.Create(Application);
frmCaminhoBanco.ShowModal;
frmCaminhoBanco.Free;
end;
end;
finally
ListaParms.Free;
end;

no DataModuleDestroy:

Banco.Connected := False;

Pronto! Agora é só executar o sistema e ele abrirá uma janela solicitando o caminho do banco toda vez que o arquivo Config.ini não existir no mesmo diretório do sistema ou quando o sistema for executado pela primeira vez.

terça-feira, 23 de setembro de 2008

Manipular datas no Microsoft Visual Studio

Olá pessoal, vamos ver uma dica muito legal para manipular formato de datas no C#.
Abaixo veremos como é simples coloca em um formato (DD/MM/YYYY). Não precisa de criar função nem nada.

lblData1.Text = date.ToString("d"); // isso vai retorna a data atual no formato DD/MM/YYYY.
lblData2.text = date.ToString("D"); // neste caso, a data retornada vai ser no formato português...Na próxima vou deixar muito mais sobre este assunto. Até mais e fiquem com Deus.

quinta-feira, 18 de setembro de 2008

Função para formatar um texto em C#

Função para formatar um texto em C#

Esta função serve para colocar todas as primeiras letras em maiúscula. Ela pede um texto como parametro.

public string Initcap (string palavra)
{
string novaPalavra = null;
if (! string.IsNullOrEmpty(palavra))
{
novaPalavra += palavra.Substring(0, 1).ToUpper().Trim(); // primeira posição com maiúsculo
for (int i = 1; i < palavra.Length; i++) //Loop no tamanho da palavra
{
if (palavra.Substring(i, 1) == " ") //Verificação do espaço
{
novaPalavra += " " + palavra.Substring(i + 1, 1).ToUpper(); //Coloca-se letra maiúscula para a letra posterior ao espaço em branco.
i++; //Incrementa o contator do loop pois já foi tratado a posição posterior do espaço em branco.
}
else
{
novaPalavra += palavra.Substring(i, 1).ToLower(); //Tratamento de minúsculo para as letras que não estão posterior ao espaço em branco.
}
}
}
return novaPalavra;
}

sexta-feira, 12 de setembro de 2008

Como apagar todos os edits e uma só vez?

Como apagar todos os edits e uma só vez?É muito simpples com o scripts abaixo.

reset($this->components->items);
while (list($k,$v)=each($this->components->items)){
if ( $v->ClassName() == 'Edit' )
$v->Text = '';
}

Agora é só deixar a imaginação fluir.

quarta-feira, 10 de setembro de 2008

Problemas ao conectar com oracle?

Um erro muito com ao conectar no oracle é esse: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.

Aqui vai uma forma de resolver isso rápidinho. Acesse o esse link: http://www.oracle.com/technology/software/tech/windows/odpnet/utilsoft.html , e faça o downloads do ODP. Básicamente é isso, instale e tente novamente...

terça-feira, 9 de setembro de 2008

Exemplo de cast no C#

Veremos abaixo um exemplo de cast no C#.

static void TestCasting()
{
int i = 10;
float f = 0;
f = i;
f = 0.5F;
i = (int)f;
}

Outro exemplo:

class Test
{
static void Main()
{
double x = 1234.7;
int a;
a = (int)x; // cast double to int
System.Console.WriteLine(a);
}
}

Outro...

Code Snippetstring Numero = reader["numero"].tostring();

Agora, se numero fosse numérico :
Code Snippetint Numero = (int)reader["numero"];

Ou, outra forma de fazer com string :

Code Snippetstring Numero = Convert.Tostring(reader["numero"]);

domingo, 7 de setembro de 2008

Estou muito feliz com a Comunidade Delphi so PHP.

Cada vez mais tem crescido em mim a vontade de continuar aprendendo Delphi for PHP. Quando penso que não dá para fazer algo com está excelente ferramenta, descubro que existe sim uma forma de resolver os problemas. Começei a utiliza-la a pouco mais de 8meses e posso dizer que estou gostando muito. O melhor de tudo é que eu não sabia programar em PHP, mais gostei tanto da IDE que fiquei disposto a aprender. Já que a IDE era praticamente igual a do Delphi Desktop, tive só que me dedicar a aprender PHP. Agora, em 8 meses que aprendi Delphi for PHP, fazer uma comunidade do nível da Comunidade Delphi so PHP, é muito satisfatório para mim!

Posso garantir que no futuro esta ferramenta será muito utilizada, como já está sendo...

No mais até uma próxima e sucesso á todos.

segunda-feira, 1 de setembro de 2008

Propriedade Caption do LABEL do Delphi for PHP

Aqui vai uma dica muito interessante sobre a propriedade Caption do label.

Ex:

Existe um editor nesta propriedade aonde você pode editar um texto como se estivesse em um editor HTML. Mas claro que ele é bem mais simples que um editor completo. Por isso o legal deste componente é que você pode copiar seu script direto para a propriedade Caption e pronto. Veja a imagem abaixo:


Esse é uma exemplo bem simples, claro que pode ser mais complexo que isso, podendo colocar uma página inteira lá dentro. Qualquer dúvida pode acessa a comunidade Delphi so PHP ou me manda um e-mail para: medeiros_29@hotmail.com.

No mais até uma próxima.

sexta-feira, 29 de agosto de 2008

Delphi tour


Caso não deseje receber mais este e-Journal clique aqui.

Em breve, você poderá se escrever...

Veja mais informações sobre o evento:

O que é o Global Assembly Cache (GAC) ?

O Global Assembly Cache nada mais é do que um pasta de disco especial onde todos os assemblys compartilhados deverão ser colocados. No Windows XP ele esta localizado na pasta : :\Windows\assembly , conforme figura abaixo.


Novamente podemos fazer uma comparação com o modelo COM de registro de componentes.
Se o componente não é encontrado no mesmo diretório da aplicação, a aplicação procura-o no GAC, do mesmo modo com o COM pesquisa o registro.

Nota:os componentes .NET não precisam ser registrados no registro do WIndows como no modelo COM.

Desta forma os componentes .NET não precisam ser registrados como os componentes COM , e , se você tiver um assembly que será usado por múltiplas aplicações ele é armazenado no GAC. (Isto somente é possível se eles tiverem um nome compartilhado)

Se o assembly não for localizado no diretório local nem no GAC você ainda pode ter um endereço de localização no arquivo de configuração. A CLR pode então fazer o download do assembly e armazenar o assembly no cache de download.

Para colocar e remover assemblies do GAC você tem que ter privilégios de administrador do sistema por questão de segurança.

Você pode ter diferentes versões do mesmo assembly carregadas no GAC ao mesmo tempo , e, mesmo se um componente estiver rodando no GAC você pode incluir outra versão do mesmo componente.

Nota : Você pode ver a hierarquia de assemblies contidos no GAC usando o comando : tree gac no prompt do DOS. O resultado é exibido na figura abaixo. Como você pode ver o GAC é uma estrutura complexa de diretório que permite múltiplas versões de qualquer grupo e usa nomes fortes especiais para garantir que não seja possível um conflito de nome. Um assembly é armazenado em um diretório especial que usa o número de versão e um ID gerado individualmente.

quinta-feira, 28 de agosto de 2008

Participe dos Eventos e Webcasts MSDN


O MSDN e a comunidade de usuários realizam centenas de eventos on-line e presenciais por ano. Localize eventos que serão realizados em breve, incluindo palestras, workshops, eventos de grupos de usuários, treinamentos especiais e Webcasts. Os Webcasts MSDN são transmissões ao vivo com duração de 60 a 90 minutos, realizadas por especialistas na plataforma Microsoft, que detalham recursos presentes em produtos, solucionam dúvidas de usuários e fazem demonstrações de novas tecnologias. O conteúdo dos webcasts é gravado e disponibilizado em até 15 dias depois do evento no Media Center do MSDN. O conteúdo dos eventos presenciais é disponibilizado também no Media Center, desde que as apresentações tenham sido cedidas pelos palestrantes.

Quer saber mais, clique aqui

quarta-feira, 27 de agosto de 2008

Abrindo um pop up no Delphi for PHP

Colocar este script no caption de um label. Isso você pode fazer dinâmicamente no clique do label...

...
function abrir(pagina,largura,altura) {
//pega a resolução do visitante
w = screen.width;
h = screen.height;
//divide a resolução por 2, obtendo o centro do monitor
meio_w = w/2;
meio_h = h/2;
//diminui o valor da metade da resolução pelo tamanho da janela, fazendo com q ela fique centralizada
altura2 = altura/2;
largura2 = largura/2;
meio1 = meio_h-altura2;
meio2 = meio_w-largura2;
//abre a nova janela, já com a sua devida posição
window.open(pagina,'','height=' + altura + ', width=' + largura + ', top='+meio1+', left='+meio2+'');
}
...

Função para obter IP Externo

Função para retornar o IP externo baseado em uma URL.

using System.IO;
using System.Net;
...
public static string GetIP(string _URL)
{
//Cria uma requisição para a URL
WebRequest rq = WebRequest.Create(_URL);

//obtém o response a partir do request
HttpWebResponse rp = (HttpWebResponse)rq.GetResponse();
//obtém um stream contendo a resposta retornada pelo servidor
Stream ds = rp.GetResponseStream();
//Cria um StreamReader para leitura
StreamReader rd = new StreamReader(ds);
//Lê os dados
string responseFromServer = rd.ReadToEnd();
//fecha os objetos
rd.Close();
ds.Close();
rp.Close();
//procura por indexafor fixo no resultado
string URL = "IP";
int i = responseFromServer.IndexOf(URL) + URL.Length + 2;
//captura o IP descoberto
URL = string.Empty;
while (!(responseFromServer[i].ToString() == "<"))
{
URL += responseFromServer[i];
i += 1;
}

return URL.Trim();
}

Percorrendo as Rows de um DataView

Existem duas maneiras mais práticas de ser percorrer um DataView. Veja como no código abaixo:

A Primeira seria utilizando o FOR

// Levando em conta que já estamos com um DataTable populado...tbPessoa
DataView dtView = new DataView(tbPessoa);
DataRowView drView;
for (int i = 0; i < dtView.Count; i++)
{
drView = dtView[i];
MessageBox.Show(drView["Nome"].ToString());
}

A Segunda seria utilizando o WHILE

// Levando em conta que já estamos com um DataTable populado...tbPessoa
DataView dtView = new DataView(tbPessoa);
DataRowView drView;
IEnumerator rowsEnum = dtView.GetEnumerator();
while (rowsEnum.MoveNext())
{
drView = (DataRowView)rowsEnum.Current;
MessageBox.Show(drView["Nome"].ToString());
}

Enviando Email a partir de uma aplicação Windows com C#

Crie uma aplicação C# e coloque 4 componentes txt(renomei respectivamente para txtServidorSmtp, txtRemetente, txtDestinatario, txtAssunto e um componente de texto com o nome txtTexto). Pronto, agora é só seguir o código abaixo:

//Definindo Remetente
MailAddress endRemetente = new MailAddress(txtRemetente.Text);

//Definindo Destinatário
MailAddress endDestinatario = new MailAddress(txtDestinatario.Text);

//Definindo Email
MailMessage msg;

msg = new MailMessage(endRemetente, endDestinatario);

msg.Subject = txtAssunto.Text;

msg.Body = txtTexto.Text;

//Definindo Envio
SmtpClient smtp = new SmtpClient(txtServidorSmtp.Text);
smtp.Send(msg);

Criando uma classe de conexão no C#

Abaixo uma classe de conexão bem simples...

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace Persistencia
{
public static class Banco
{

public static OleDbConnection conexao = new OleDbConnection();

public static void AbrirConexao()
{
conexao.ConnectionString = @"Aqui fica a string de conexão";
conexao.Open();
}

public static void FecharConexao()
{
if (conexao.State == ConnectionState.Open)
{
conexao.Close();
conexao.Dispose();
}
}

public static void ExecutarComando(string textoComando)
{
if (conexao.State != ConnectionState.Open)
{
AbrirConexao();
}
OleDbCommand comando = new OleDbCommand();
comando.CommandText = textoComando;
comando.Connection = conexao;
int registrosAfetados = comando.ExecuteNonQuery();
}

public static OleDbDataReader SelecionarRegistros(string textoComando)
{
if (conexao.State != ConnectionState.Open)
{
AbrirConexao();
}
OleDbCommand comando = new OleDbCommand();
comando.CommandText = textoComando;
comando.Connection = conexao;
return comando.ExecuteReader();
}
public static OleDbDataReader SelecionarUmRegistro(string textoComando)
{
if (conexao.State != ConnectionState.Open)
{
AbrirConexao();
}
OleDbCommand comando = new OleDbCommand();
comando.CommandText = textoComando;
comando.Connection = conexao;
return (OleDbDataReader)comando.ExecuteScalar();
}

}
}

terça-feira, 26 de agosto de 2008

Aguardem novas postagens sobre C#

Olá pessoal, aguardem que estou para postar algumas dicas sobre C# e ASP .Net logo logo...

No mais até breve.

Sugestões a Comunidade Delphi so PHP

Sugestões a Comunidade Delphi so PHP

Olá membros da Comunidade Delphi so PHP, estamos abertos a sugestões e dicas sobre novas funcionalidade na Comunidade. Quem quiser deixar alguma sugestão para melhorias e mudanças, é só entrar em contato com a administração .

No mais, agradecemos o apoio de todos.

Algumas funções que facilitam e muito...

Algumas funções que facilitam e muito o desenvolvimento do programador. Por exemplo:

Imagina que você tem 50 campos na tela e tem que desabilitar todos, já viu né...Assim você só vai fazer isso: HabilitaCampo(true ou false), simples assim... :D

procedure HabilitaCampo(Value: Boolean);
var
i: integer;
begin
for i := 0 to pred(ComponentCount) do
begin
// Se for Edit...
if (components[i] is TEdit) then
(Components[i] as TEdit).Enabled:= value;

// Se for TComboBox...
if (components[i] is TComboBox) then
(Components[i] as TComboBox).Enabled:= value;

// E assim por diante...
end;
end;

Da mesma forma segui para limpar todos os campos de uma só vez...

procedure LimpaCampos();
var
i: integer;
begin
try
for i := 0 to pred(ComponentCount) do
begin
// Se for Edit...
if (components[i] is TEdit) then
(Components[i] as TEdit).Clear;

// Se for TComboBox...
if (components[i] is TComboBox) then
(Components[i] as TComboBox).ItemIndex = -1;
end;
end;

Validar campo obrigatório segui o mesmo esquema...
Obs: A tag é utilizado para definir se o campo vai ser obrigatório ou não. Ex:
0 - Default do componente...
1 - para os campos que serão obrigatório.

function VerificaCampObrigatorio: Boolean;
var
i: integer;
begin
Result := true;
for i := 0 to (ComponentCount) do
begin
// Se for Edit...
if (components[i] is TEdit) then
begin
if ((Components[i] as TEdit).Tag = 1) and ((Components[i] as TEdit).Text = '')then
begin
MessageDlg((Components[i] as TEdit).Hint,mtInformation,[mbOK],0);
(Components[i] as TEdit).SetFocus;
Result := false;
exit;
end;
end;
end;
end;

Espero que ajude, até mais.

Validando email

Utilize para validar e-mail...

function fCheckEmail(Email : String): Boolean;
var
s : String;
ePos : Integer;
begin
ePos := pos('@',Email);
if (epos > 1) then
begin
s := copy(eMail, epos + 1, Length(eMail));
if (pos('.', s)> 1) and (pos('.', s) < length(s)) then Result := true
else Result := False;
end
else Result := False;
end;

Pode ser muito bem utlizado no evento onexit do Edit...

Até a próxima dica.

Manipulando hora/minuto minuto/hora

Veja abaixo duas função muito uteis no dia-á-dia...

function HoraMinutos(value: string) : integer;
var
iHoras, iMinutos : integer;
begin
iHoras := StrToInt(copy(value,1,2)) * 60;
iMinutos := StrToInt(copy(value,4,2));
Result := iHoras + iMinutos;
end;

function MinutosHora(value: integer) : string;
var
sHora, sMinutos : string;
begin
sHora := fnLPad(IntToStr(value div 60),2,'0');
sMinutos := fnLPad(IntToStr(value mod 60),2,'0');
Result := sHora + ':' + sMinutos;
end;

Criptografia de senha de banco de dados

Veremos agora uma excelente função de criptografia. Muito utilizado para criptografar senha de banco de dados.

function Criptografar(Mstr, Mchave, Moperacao: String): String;
var
i, iTamanhoString, iPos, IPosLetra, iTamanhoChave: Integer;
begin
Result := Mstr;
iTamanhoString := Length(Mstr);
iTamanhoChave := Length(Mchave);
for i := 1 to iTamanhoString do
begin
iPos := (i mod iTamanhoChave);
if iPos = 0 then iPos := iTamanhoChave; iPos := iPos + 7;
if Moperacao = 'DESCRIPTOGRAFAR' then iPosLetra := Ord(Result[i]) + iPos
else iPosLetra := Ord(Result[i]) - iPos;
Result[i] := Chr(iPosLetra);
end;
end;

Que tal utilizar o LPad e RPad no delphi?

Que tal utilizar o LPad e RPad no delphi?

function LPad(value:string; tamanho:integer; caractere:char): string;
var
i : integer;
begin
Result := value;
if(Length(value) > tamanho)then
exit;
for i := 1 to (tamanho - Length(value)) do
Result := caractere + Result;
end;

function RPad(value:string; tamanho:integer; caractere:char): string;
var
i : integer;
begin
Result := value;
if(Length(value) > tamanho)then
exit;
for i := 1 to (tamanho - Length(value)) do
Result := Result + caractere;
end;

Muito legal né? até a próxima.

Delphi - Converter uma valor em real

Olá pessoal, abaixo uma função simples para converter um valor. É muito utilizada para display na tela.

{ Functions }
function fConvertValue(Value: string): string;
begin
Result := '';
if (pos('.', Value) = 0) then
begin
if (Value <> '') then
begin
Value := FormatFloat('##,##0.00', StrToFloat(Value));
Result := Value;
end;
end
else
begin
Value := StringReplace(Value,'.','', [rfReplaceAll]);
Result := Value;
end;
end;

Como fechar uma janela GtkWindow ao clicar em um botão

Como fechar uma janela GtkWindow ao clicar em um botão

// função que será chamado ao clicar no botão
function fechar($janela){
$janela->destroy();
}

if(!class_exists('gtk')){
die("Por favor carregue o módulo php-gtk2
no seu php.ini\\r\\n");
}

$wnd = new GtkWindow();
$wnd->set_default_size(250, 150);
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));

// Cria um layout fixo
$layout = new GtkFixed();

// Cria um botão
$btn = new GtkButton("Fechar Janela");
// Define o tamanho do botão
$btn->set_size_request(100, 25); // define largura e altura
// Define o evento clicked para o botão
$btn->connect_simple('clicked', 'fechar', $wnd);
// Adiciona o botão ao layout
$layout->put($btn, 10, 10);

// Adiciona o layout à janela do aplicativo
$wnd->add($layout);

$wnd->show_all();
$wnd->set_title("Estudos PHP-GTK");
Gtk::main();

Quer saber mais, clique aqui.

Entendendo o que são construtores

Entendendo o que são construtores

Um construtor é uma função definida na própria classe que é automaticamente chamada no momento em que a classe é instanciada (atráves do operador new). O construtor deve ter o memso nome que a classe a que pertence. Veja o exemplo:

class conta {
var $saldo;
function conta() {
$this->saldo = 0;
}

function saldo() {
return $this->saldo;
}

function credito() {
$this->saldo += $valor;
}
}

Podemos perceber que a classe conta possui um construtor, que inicializa a variavel $saldo com o valor zero(0).
Um construtor pode conter argumentos, que são opcionais, o que torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial dfa conta.
Vale observar que era para classes derivadas, o construtor da classe pai não é automaticamente herdado quando o construtor da classe derivada é chamado.

Quer saber mais, clique aqui

Utilizando a variável $this

Variavel $this
Na difinição de uma classe, pode-se utilizar a variavel $this, que é o próprio objeto. assim, quando uma classe é instanciada em um objeto, e uma função desse objeto na definição da classe utiliza a variavel $this, essa variavel signfica o objeto que estamos utilizando.

Como exemplo da utilização de classes e objetos, podemos utilizar a classe conta, que define uma conta bancária bastante simples, com funções para ver saldo e fazer um crédito.

Exemplo:
Class conta{
var $saldo;
function saldo(){
return $this->saldo;
}

function credito(){
$this->saldo += $valor;
}
}

// a variavel interna não foi inicializada, e não contém valor algum.
$minhaconta = new saldo;
$minhaconta->saldo();

// Retorna 50
$minhaconta->credito(100);
$minhaconta->saldo();

segunda-feira, 25 de agosto de 2008

Comunidade Delphi so PHP


Olá pessoal, é como muito alegria que estou publicando a nova cara da Comunidade Delph so PHP. A pedidos dos membros, fizemos algumas alteração e melhorias, como:
Uma área de publicação de vídeo-aulas, que os próprios membros poderão fazer...
Outra coisa que foi perdida pelos membros, foi um fórum próprio da Comunidade. Isso também foi feito e pode ser acessado, clique aqui para acessar o fórum da Comunidade Delphi so PHP. Com isso a área que existia as dúvidas, perdeu o sentido, já que possuímos um fórum!
A Comunidade está bem mais rápida e com um visual bem melhor que a anterior. Claro que a primeira Comunidade foi feita muito rápida, pois estávamos precisando de algum site feito em Delphi for PHP, já que estavam falando que não existia um desenvolvido em Delphi for PHP.

domingo, 24 de agosto de 2008

Dicas de Delphi for PHP.

Só para começar, aqui vão alguns dicas de Delphi for PHP:

---------------------------------------------------------------------
Estrutura da função switc no PHP.

switch($type) {
case 1: #GIF
$img = 'img1';
break;
case 2: #JPEG
$mg = 'img2';
break;
case 3: #PNG
$img = 'img3';
break;
default: #Unsupported format
return '';
}

---------------------------------------------------------------------
OOP - Classe de mensagem

Aqui vai uma classe básica de mensagem...

class TMensagem
{
function __construct($message)
{
$this->Message = strip_tags($message);
}

function GetMensagem()
{
return $this->Message;
}
}

---------------------------------------------------------------------
Pega extensão de um arquivo.

Um função para pegar a extensão de um determinado arquivo...

function pegaExtensao($file){
$ext = explode('.',$file);
$ext = array_reverse($ext);
return $ext[0];
}

---------------------------------------------------------------------
Frameworks Ajax, PHP + AJAX

XAJAX
http://xajax.sourceforge.net/

SAJAX (trabalha também com outras linguagens)
http://www.modernmethod.com/sajax/

Symfony
http://www.symfony-project.com/

AjaxAC
http://ajax.zervaas.com.au/

XOAD
http://www.xoad.org/

CPAINT (trabalha também com outras linguagens)
http://cpaint.booleansystems.com/

Muito simples né. No mais até uma póxima dica.

Seja bem vindo ao meu blog

Olá pessaol, estou muito feliz em poder compartilhar com vocês a nova cara da comunidade Delphi so PHP.

Parceria