Jump to content

Recommended Posts

Posted

Nos últimos 40 dias comecei a desenvolver um sistema web em uniGUI tendo como base um software desktop desenvolvido em Delphi XE2.

 

Basicamente eu crio um novo form uniGUI utilizando o form desktop como modelo.

 

Quando me deparei com o form de cadastro de clientes ( e de fornecedores) que possuíam dezenas de campos.

Bateu aquela preguiça.

Pensei então em criar uma rota alternativa.

 

Abri o .PAS e o DFM no bloco de notas e fazia a substituição de, por exemplo, Label para UniLabel, etc.

Testei e deu certo.

 

Mas havia outro problema, eu uso quase 80 componentes da paleta standart, data controls e ainda do Jedi.

Os componentes do dbexpress e do report buider seriam reaproveitados.

Seriam 80 busca/substituição para cada .PAS  e a mesma quantidade no .DFM.

A preguiça voltou.

 

E teriam mais de 100 forms.

 

Foi quando pensei, porque não existe um conversor ?

 

Basicamente ele teria que abrir o .PAS e o .DFM por fora do delphi e fazer as substituições.

 

Foi isso que eu fiz, e funcionou com relativo sucesso me poupando bastante tempo, pois precisava  converter mais de 100 forms.

 

Ao abrir  o form convertido no sistema uniGUI ele vai dar um aviso relativo as propriedades que não existem, deve-se ignorar tudo e depois ao salvar ele adiciona as classes nas uses automaticamente.

 

O que está faltando é um modo de retirar as classes não mais utilizadas da uses. Para adiantar eu mantenho a primeira linha da minha uses:   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, uniGUIForm; e apago todo o resto. Peço para salvar e as classes corretas aparecem novamente.

 
Sim, no meu conversor eu consegui incluir a uniGUIForm.
 
Faltou ainda substituir o:
var form1 : TForm1
 
por:

function form1 : TForm1 

 

 Não posso fazer a busca pelo "var" pois existem outros "var" nas minhas functions e procedures
Além disso o form1 pode ser form10, form40, etc
 
 
Falta também incluir o código a seguir logo abaixo da linha {$R *.dfm}:
 
function Form1: TForm1;
begin
  Result := TForm1(DM.GetFormInstance(TForm1));
end;
 

 

Posso afirmar que adianta muito o processo de conversão. Por isso disponibilizo em anexo.

 

 

Conversor.zip

  • Upvote 1
Posted

eu fiz esse aplicativo no final de semana, e com certamente pode melhorar muito e por isso conto com auxílio de quem se interessar.

 

segue o código fonte:

 

 

// conversor  vcl ==> uniGUI

// beta 1

// 20/Out/2013

// Nirlan E. Fundão

// MTG Softwares Ltda.

 

unit Prog001;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Mask, JvExMask, JvToolEdit, Vcl.Buttons;
 
type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    frFileName: TJvFilenameEdit;
    GroupBox2: TGroupBox;
    Memo1: TMemo;
    BotaoOK: TBitBtn;
    GroupBox3: TGroupBox;
    Memo2: TMemo;
    procedure BotaoOKClick(Sender: TObject);
  private
    { Private declarations }
    vArray : array[1..70 , 1..70] of String;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BotaoOKClick(Sender: TObject);
var
  vPasFile : String;
  vDfmFile : String;
  I        : Integer;
 
begin
  //  VCL
  vArray[ 01, 01 ] :=  'TForm';
  vArray[ 01, 02 ] :=  'TUniForm';
  vArray[ 02, 01 ] :=  'TEdit';
  vArray[ 02, 02 ] :=  'TUniEdit';
  vArray[ 03, 01 ] :=  'TMaskEdit';
  vArray[ 03, 02 ] :=  'TUniEdit';
  vArray[ 04, 01 ] :=  'TPanel';
  vArray[ 04, 02 ] :=  'TUniPanel';
  vArray[ 05, 01 ] :=  'TLabel';
  vArray[ 05, 02 ] :=  'TUniLabel';
  vArray[ 06, 01 ] :=  'TBitBtn';
  vArray[ 06, 02 ] :=  'TUniBitBtn';
  vArray[ 07, 01 ] :=  'TGroupBox';
  vArray[ 07, 02 ] :=  'TUniGroupBox';
  vArray[ 08, 01 ] :=  'TSpeedButton';
  vArray[ 08, 02 ] :=  'TUniSpeedButton';
  vArray[ 09, 01 ] :=  'TCheckBox';
  vArray[ 09, 02 ] :=  'TUniCheckBox';
  vArray[ 10, 01 ] :=  'TButton';
  vArray[ 10, 02 ] :=  'TUniButton';
  vArray[ 11, 01 ] :=  'TListBox';
  vArray[ 11, 02 ] :=  'TUniListBox';
  vArray[ 12, 01 ] :=  'TComboBox';
  vArray[ 12, 02 ] :=  'TUniComboBox';
  vArray[ 13, 01 ] :=  'TImage';
  vArray[ 13, 02 ] :=  'TUniImage';
  vArray[ 14, 01 ] :=  'TMemo';
  vArray[ 14, 02 ] :=  'TUniMemo';
  vArray[ 15, 01 ] :=  'TTabControl';
  vArray[ 15, 02 ] :=  'TUniTabControl';
  vArray[ 16, 01 ] :=  'TPageControl';
  vArray[ 16, 02 ] :=  'TUniPageControl';
  vArray[ 17, 01 ] :=  'TSpinEdit';
  vArray[ 17, 02 ] :=  'TUniSpinEdit';
  vArray[ 18, 01 ] :=  'TScrollBox';
  vArray[ 18, 02 ] :=  'TUniScrollBox';
  vArray[ 19, 01 ] :=  'TRadioGroup';
  vArray[ 19, 02 ] :=  'TUniRadioGroup';
 
  //  VCL DB
  vArray[ 30, 01 ] :=  'TDBEdit';
  vArray[ 30, 02 ] :=  'TUniDBEdit';
  vArray[ 31, 01 ] :=  'TDBLookupComboBox';
  vArray[ 31, 02 ] :=  'TUniDBLookupComboBox';
  vArray[ 32, 01 ] :=  'TDBGrid';
  vArray[ 32, 02 ] :=  'TUniDBGrid';
  vArray[ 33, 01 ] :=  'TDBNavigator';
  vArray[ 33, 02 ] :=  'TUniDBNavigator';
  vArray[ 34, 01 ] :=  'TDBListBox';
  vArray[ 34, 02 ] :=  'TUniDBListBox';
  vArray[ 35, 01 ] :=  'TDBComboBox';
  vArray[ 35, 02 ] :=  'TUniDBComboBox';
  vArray[ 36, 01 ] :=  'TDBImage';
  vArray[ 36, 02 ] :=  'TUniDBImage';
  vArray[ 37, 01 ] :=  'TDBMemo';
  vArray[ 37, 02 ] :=  'TUniDBMemo';
 
  //  Jedi Components
  vArray[ 50, 01 ] :=  'TJvCalcEdit';
  vArray[ 50, 02 ] :=  'TUniNumberEdit';
  vArray[ 51, 01 ] :=  'TDBJvCalcEdit';
  vArray[ 51, 02 ] :=  'TUniDBNumberEdit';
  vArray[ 52, 01 ] :=  'TJVDateEdit';
  vArray[ 52, 02 ] :=  'TUniDateTimePicker';
  vArray[ 53, 01 ] :=  'TJVDBDateEdit';
  vArray[ 53, 02 ] :=  'TUniDBDateTimePicker';
  vArray[ 54, 01 ] :=  'TJvDBLookupCombo';
  vArray[ 54, 02 ] :=  'TUniDBLookupComboBox';
  vArray[ 55, 01 ] :=  'TJvSpinEdit';
  vArray[ 55, 02 ] :=  'TUniSpinEdit';
 
  //  Diversos
  vArray[ 60, 01 ] :=  'Forms,';
  vArray[ 60, 02 ] :=  'Forms, uniGUIForm,';
  vArray[ 61, 01 ] :=  'Buttons,';
  vArray[ 61, 02 ] :=  '';
  vArray[ 62, 01 ] :=  'Mask,';
  vArray[ 62, 02 ] :=  '';
 
  //  Valida preenchimento
  if Trim(frFileName.Text) = '' then
    begin
      Application.MessageBox('O arquivo .PAS a ser convertido deve ser informado.',
                             'Atenção', mb_ok + mb_IconError );
      Exit;
    end;
 
  vPasFile := LowerCase(frFileName.Text);
  vDfmFile := StringReplace(vPasFile, 'pas', 'dfm', [rfReplaceAll, rfIgnoreCase]);
 
  //  Carrega arquivos
  GroupBox2.Caption := ' ' + vPasFile + ' ';
  GroupBox3.Caption := ' ' + vDfmFile + ' ';
  Memo1.Lines.Clear;
  Memo2.Lines.Clear;
  Memo1.Lines.LoadFromFile(vPasFile);
  Memo2.Lines.LoadFromFile(vDfmFile);
 
  for I := 1 to 70 do
   begin
     Memo1.Text := StringReplace(Memo1.Text, vArray[ I , 01], vArray[ I , 02 ], [rfReplaceAll, rfIgnoreCase]);
     Memo2.Text := StringReplace(Memo2.Text, vArray[ I , 01], vArray[ I , 02 ], [rfReplaceAll, rfIgnoreCase]);
   end;
 
  //  Grava arquivos
  Memo1.Lines.SaveToFile(vPasFile);
  Memo2.Lines.SaveToFile(vDfmFile);
 
  ShowMessage('Arquivo convertido com sucesso.');
end;
 
end.
Posted

Penso que na próxima versão do conversor, eu possa carregar o que vai ser substituído a partir de um arquivo txt, para evitar ter que recompilar o programa após cada alteração. Sugestões (com código fonte) são bem vindas !!

Posted
Maybe can help : download  ExtPascal-0.9.8.zip     from  code.google.com/p/extpascal/
 
There is a Sample program (source code) of how to convert from Delphi or Lazarus   to  Extpascal.
 

Regards.

Posted

Olá Nirlan.

 

Teve uma vez que precisei fazer algo parecido e encontrei no próprio jedi a ferramenta para fazer a conversão, na época convertir do rxlib para o jedi.

Você abre um arquivo dat, onde tem os parâmetros tipo label para unilabel, no caso dos uses, fiz a mesma coisa, o que precisava remover, deixei no "from" o nome e no "to" vazio.

 

Bom vou deixar em anexo os fontes e o executável para você dar uma olhada e ter novas ideias no que está fazendo. Para compilar vai precisar do jedi.

 

Obrigado por compartilhar.

 

Abraços

JVCLConvert.rar

post-1507-0-49089900-1382610799_thumb.jpg

Posted

Já pensei realmente em fazer esse conversor.

Só que de uma forma diferente, seria dois clientdataset em memoria que salvaria os dados em arquivos .DAT.

O segundo, teria relação com o primeiro, indicando para cada tipo de objeto, aquelas propriedades que seriam removidas ou definidas como padrão.

Depois em cada form, seria incluso as classes do unigui. Para retirar as classes que não seriam mais necessárias, aí é mais complicado pois poder ter dezenas, então poderia sim ter uma configuração para listar as que seriam removidas.

Por fim, recriaria a cláusula de inicialização, basta localizar a clausula de inicialização, colocar antes a variavel (corrigir a que estava) e depois da inicialização incluir o codigo que instância a variavel.

Basicamente é isso. Se você quiser ver dessa forma, posso te dar uma mão. Não é tão difícil assim, nada que vários loops em um objeto memo que carregou os dados não resolva.

Ou então fica como uma ideia. Abração..

  • 1 year later...
Posted

estou problemas em fazer heranca, pois algumas vezes os componentes não funcionam, entao deixei de usar a mesma.

gostei desse forum.

estou aberto a dicas e sugestões

wesleytcno@hotmail.com

wesleytcno@gmail.com

 

Posted

eu uso herança dos forms em meus sistemas  e não tenho tido problemas. Qual o erro que acontece com você ?

  • 7 months later...
Posted

voce já conseguiu usar herança com frame?, estava tentando fazer um projeto usando a ideia de tabs, onde cria-se os frames em paginas de um pagecontrol

porem como cada frame e herdado de um base, nao consegui fazer rodar..

tive que usar form padrao mesmo.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...