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

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.

Parceria