• 0
Sign in to follow this  
acss

(Resolvido) Selecionando e criando arquivos de textos atraves de mais de um RadioGroup

Question

Bom dia estou encontrando dificuldades no Lazarus  e agradeço desde de já a qualquer ajuda.

Tenho alguns arquivo de textos  txt em  pastas diferentes, gostaria de saber como faço para juntar todos esses arquivos em um só, usando RadiosGroups com 6 itens cada e cada RadioGroup tem uma opção (nenhum)para desabilita-lo

Share this post


Link to post
Share on other sites

15 answers to this question

Recommended Posts

  • 0

Como vai Jhonas, estou passando uma imagem anexada de um protótico de exemplo que fiz agora com esta explicação por ser um pouco diferente a idéia.

Você podendo me explicar o básico da interligaçao de uns dois ou tres os outros vou fazendo aos poucos.

Obrigado.

Obs.Os nomes do itens vão ser outros e nomes das pastas também

---------------------

Os nomes nos RadioGroup se repentem porque são do mesmo assunto, mais com textos diferentes.
Assim posso juntar apenas os trechos de textos que preciso, com Caracteristicas desejadas.

Se alguma destas caracteristicas não precisar na hora clico na opção nenhum que desabilita o RadioButton's.

Todos itens são nomes de arquivos de textos comuns (bloco de notas) da pasta Principal correspondente.

Vai ser então 12 itens de cada RadioGroup x 10 = 120 arquivos de textos comuns (bloco de notas) diferentes.

 

Depois de selecionados os itens desejado clico no botão criar que irá gerar um único arquivo de textos.

prototico.jpg

Share this post


Link to post
Share on other sites
  • 0

Você podendo me explicar o básico da interligaçao de uns dois ou tres os outros vou fazendo aos poucos.

ok... vou te passar o básico, para o resto voce modifica

supondo que voce já determinou todos os nomes dos arquivos Txt, vou colocar aqui para teste 3 arquivos Txt criados com o bloco de notas.

Texto1.Txt   conteudo  ....( Este Texto pertence ao arquivo Texto1.Txt )

Texto2.Txt   conteudo  ....( Este Texto pertence ao arquivo Texto2.Txt )

Texto3.Txt   conteudo  ....( Este Texto pertence ao arquivo Texto3.Txt )

Cada item do RadioGroup ( com exceção do primeiro = Nenhum ) vai receber o caminho onde se encontra o arquivo.

voce vai fazer a leitura dos arquivos e jogar o conteudo em um componente Memo

depois é só salvar o conteudo do Memo em outro arquivo

exemplo:

unit ULerTexto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    SaveDialog1: TSaveDialog;
    Label1: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Arquivo : TextFile;
  Arquivo1 : TextFile;
  Line : string;
  num : integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
   Memo1.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   if SaveDialog1.Execute then
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Line: string;  Caminho: string;
begin

   case RadioGroup1.ItemIndex of
      0: ShowMessage('Nenhum texto selecionado');
      1: Caminho := 'C:\Texto1.Txt';
      2: Caminho := 'C:\Texto2.Txt';
      3: Caminho := 'C:\Texto3.Txt';
   end;

  AssignFile(Arquivo, Caminho);
  Reset(Arquivo);

  if (IOResult <> 0) // verifica o resultado da operação de abertura
     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')
  else
  begin
      while not EOF(Arquivo) do
      begin
         ReadLn(Arquivo, Line);
         Memo1.Lines.add( Line );
         Inc(num);
         Label1.Caption := 'Total de Textos Anexados = ' + inttostr(num);
      end;
  end;
  CloseFile(Arquivo);

end;

end.

wm0yaf.jpg

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas agradeçido ficou muito bom, obrigado.


Montei o programa para simular, carregou os textos e salvou corretamente,

 Deu um erro quando se escolhe a opção "Nenhum", e clica em executar o Button1 algumas vezes, mostra a mensagem 'Nenhum texto selecionado' e trava o programa.

 

É possivel substituir a linha codigo ShowMessage('') , por outra linha de instrução sem ser do tipo ShowMessage('') para botão (nenhum) habilitar ou não o processamento daquele RádioGroup.

 

----------------------

Jhonas, fiz assim para colocar o segundo RadioGroup e ia seguir o mesmo raciocinio para os outros, está correto?

 

procedure TForm1.Button1Click(Sender: TObject);

  var Line: string;  Caminho: string;
begin

   case RadioGroup1.ItemIndex of
      0: ShowMessage('Nenhum texto selecionado');
      1: Caminho := 'Texto1.Txt';
      2: Caminho := 'Texto2.Txt';
      3: Caminho := 'Texto3.Txt';
   end;

  case RadioGroup2.ItemIndex of
      0: ShowMessage('Nenhum texto selecionado');
      1: Caminho := 'Texto4.Txt';
      2: Caminho := 'Texto5.Txt';
      3: Caminho := 'Texto6.Txt';
   end;


  AssignFile(Arquivo, Caminho);
 Reset(Arquivo);

  if (IOResult <> 0) // verifica o resultado da operação de abertura
     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')
  else
  begin
      while not EOF(Arquivo) do
      begin
         ReadLn(Arquivo, Line);
         Memo1.Lines.add( Line );
         Inc(num);
         Label1.Caption := 'Total de Textos Anexados = ' + inttostr(num);
      end;
  end;
  CloseFile(Arquivo);
end;      

 

 

 

Sem título 3.jpg

Share this post


Link to post
Share on other sites
  • 0

para colocar o segundo RadioGroup e ia seguir o mesmo raciocinio para os outros, está correto?

sim ... esta correto

É possivel substituir a linha codigo ShowMessage('') , por outra linha de instrução sem ser do tipo ShowMessage('') para botão (nenhum) habilitar ou não o processamento daquele RádioGroup ?.

sim...  voce coloca o comando que quiser  ( Para que não ocorra erro voce pode criar um arquivo de texto vazio ou não deixar que seja executado a leitura se a opção do TRadioGroup for "Nenhum" )

veja que no código, modifiquei para que quando clicar na opção ( Nenhum ) o RadioGroup seja desabilitado ( faça a mesma coisa para todos os TRadioGroup )

e só será novamente habilitado quando voce salvar o conteudo do Memo ( veja as modificações no código )

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
   if RadioGroup1.ItemIndex = 0 then
      RadioGroup1.Enabled := false;
end;
unit ULerTexto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    SaveDialog1: TSaveDialog;
    Label1: TLabel;
    procedure Libera;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Arquivo : TextFile;
  Arquivo1 : TextFile;
  Line : string;
  num : integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Libera;
var i : integer;
begin
  /// Habilitar todos os TRadioGroup
  for i := 0 to ComponentCount -1 do
    begin
      if Components[i] is TRadioGroup then
         TRadioGroup(Components[i]).Enabled := true;
    end;

end;


procedure TForm1.Button2Click(Sender: TObject);
begin
   Memo1.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   if SaveDialog1.Execute then
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);

   Libera;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Line: string;  Caminho: string;
begin

   case RadioGroup1.ItemIndex of
      0: Caminho := 'C:\Texto0.Txt';
      1: Caminho := 'C:\Texto1.Txt';
      2: Caminho := 'C:\Texto2.Txt';
      3: Caminho := 'C:\Texto3.Txt';
   end;

  AssignFile(Arquivo, Caminho);
  Reset(Arquivo);

  if (IOResult <> 0) // verifica o resultado da operação de abertura
     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')
  else
  begin
      while not EOF(Arquivo) do
      begin
         ReadLn(Arquivo, Line);
         Memo1.Lines.add( Line );
         Inc(num);
         Label1.Caption := 'Total de Textos Anexados = ' + inttostr(num);
      end;
  end;
  CloseFile(Arquivo);

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
   if RadioGroup1.ItemIndex = 0 then
      RadioGroup1.Enabled := false;
end;

end.

Abraço

 

Share this post


Link to post
Share on other sites
  • 0

Olá Jhonas como vai, agradeçido ficou muito bom fiz todas as modificações aqui e correu tudo certo para os dois RadiosGroups para desabilitar quando selecionado (nenhum)

Tem possibilidade de usar um só Memo na primeira página de um TPageControl e os RadiosGroups ficarem em outras páginas.

Porque teram muitos mais RadiosGroups, como naquela imagem que te passei e seram várias páginas, e queria linkar todos os RadiosGroups das várias páginas do TPageControl para usar somente um memo.

Apenas um pedaço de código para não te dar trabalho se existir possibilidade de fazer tal ligação.

 


Obrigado tenha uma boa tarde.

Share this post


Link to post
Share on other sites
  • 0

Tem possibilidade de usar um só Memo na primeira página de um TPageControl e os RadiosGroups ficarem em outras páginas ?

sim ... não precisa fazer modificação alguma no código 

marque todos os componentes do Form e de um CTRL + X  ( Cortar )

adicione  o TPageControl e alinhe ele com o Form, depois com o botão direito nele, adicione os TabSheets

selecione um deles e cole os componentes usando o CTRL + V  ( Colar )

tire o Memo de um TabSheet e passe para outro e pronto

abraço

 

Share this post


Link to post
Share on other sites
  • 0

Jhonas obrigado consegui copiar e colar o memo como você explico

Só tenho mais estas dúvidas antes de começar montar o programa

 

1 Quando eu precisar um RadioGroup numa página é só usar a paleta da barra de  componentes, ou terei de copiar de uma página onde já existe um

2 O botão que carrega os arquivos selecionados para o memo, posso copiar e colar nas outras páginas

3 Como faço para visualizar o mesmo conteúdo do memo padrão em outras páginas para ir visualizando os textos

4 Tem como insirir um botão em cada página para escolha de onde virão os dados dos arquivos de textos para serem carregados naquela página, em vez de eu marcar um caminho fixo no código.

Agradeçido

Share this post


Link to post
Share on other sites
  • 0

ok...  vamos as respostas

1 Quando eu precisar um RadioGroup numa página é só usar a paleta da barra de  componentes, ou terei de copiar de uma página onde já existe um ?

tanto faz ... no entanto voce deve lembrar que, se voce copiar de uma pagina, o que estiver configurado nos eventos dos componentes serão os mesmos, embora  nome do TRadioGroup tenha mudado.

2 O botão que carrega os arquivos selecionados para o memo, posso copiar e colar nas outras páginas ?

sim ...  mas vale tambem a explicação anterior para o botão, ou seja, o mesmo evento será executado em todos os botões se voce não alterar o código

3 Como faço para visualizar o mesmo conteúdo do memo padrão em outras páginas para ir visualizando os textos ?

voce pode colocar um memo em cada pagina, e para visualizar o mesmo conteudo em todos eles basta alterar o código

procedure TForm1.Button1Click(Sender: TObject);
var Line: string;  Caminho: string; i : Integer;
begin

   case RadioGroup1.ItemIndex of
      0: Caminho := 'C:\Texto0.Txt';
      1: Caminho := 'C:\Texto1.Txt';
      2: Caminho := 'C:\Texto2.Txt';
      3: Caminho := 'C:\Texto3.Txt';
   end;

  AssignFile(Arquivo, Caminho);
  Reset(Arquivo);

  if (IOResult <> 0) // verifica o resultado da operação de abertura
     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')
  else
  begin
      while not EOF(Arquivo) do
      begin
         ReadLn(Arquivo, Line);
         Memo1.Lines.add( Line );
         Inc(num);
         Label1.Caption := 'Total de Textos Anexados = ' + inttostr(num);
      end;
  end;
  CloseFile(Arquivo);
  
  /// Colocar o mesmo conteudo do Memo1 nos outros Memos 
  for i := 0 to ComponentCount -1 do
    begin
      if (Components[i] is TMemo) then
         if TMemo(Components[i]).Lines.Text <> ''  then
            TMemo(Components[i]).Lines.Text := Memo1.Lines.Text;

    end;
end;

 

4 Tem como insirir um botão em cada página para escolha de onde virão os dados dos arquivos de textos para serem carregados naquela página, em vez de eu marcar um caminho fixo no código ?

sim, mas ficaria muito mais trabalhoso e demorado voce ficar escolhendo de onde virão os dados.

o melhor é especificar o caminho dos arquivos textos nos TRadioGroup e pronto

case RadioGroup1.ItemIndex of
      0: Caminho := 'C:\Texto0.Txt';
      1: Caminho := 'C:\Texto1.Txt';
      2: Caminho := 'C:\Texto2.Txt';
      3: Caminho := 'C:\Texto3.Txt';
   end;

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas agradeçido por suas explicações.

Tenho alguns códigos delphi e C e dicas que fui garimpando na internet tem alguns com mais de 800 códigos e dicas , caso queira para colocar para ajudar o pessoal você me passa um link onde posso deixar eles e você vê o que pode te interessar ai. Ok

Então,  muito obrigado, vou bater agora no programa e preparar aquele monte de textos.

Apesar de gostar bastante de programação ainda estou no inicio e suas dicas e explicações que me passou vão me ajudar muito.

Obrigado a você e a todos aqui.

Share this post


Link to post
Share on other sites
  • 0

Eu vou estudar e me esforçar bastante e práticar tenho bastante coisa para aprender ainda uma hora chego lá, conto com a ajuda dentro das possibilidades dos amigos do fórum agradeço sinceramente pelo apoio, bom trabalho para você que a Criação ilumine sempre a a você e a todos do fórum e suas familias.


Obrigado por tudo.

Share this post


Link to post
Share on other sites
  • 0

Boa Tarde o programa está funcionando corretamente e estou agradeçido pela ajuda, estou ainda criando os textos aqui, e precisando de orientação se tiver condições.

Quando clico num RadioGroup para selecionar e clico no botão carregar texto (Button1) ele joga o texto selecionado que ficará armazenado no Memo para ser imprimido.

Estou tendo dificuldades quando preciso selecionar mais algum item deste RadioGroup não consigo, enquanto não imprimir primeiro para liberar o RádioGroup.

Seria possível colocar um único botão para liberar todos RadiosGroups quando precisar escolher mais de um item, sem perder os dados ali armazenados no Memo e sem precisar imprimir antes.

Obrigado

Share this post


Link to post
Share on other sites
  • 0

Se voce não quiser alterar nada no seu código, é só não  escolher a opção  " Nenhum " que voce consegue escolher qualquer outra opção de Texto.

ou coloque outro botão para habilitar os RadioGroups

procedure TForm1.Button5Click(Sender: TObject);
begin
   Libera;
end;

abraço

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Answer this question...

×   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.

Sign in to follow this