Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Salvar conteudo do RichEdit ativo dentro do TabSheet


fxsoftware

Pergunta

Estou aqui mais uma vez para tentar resolver um problema que estou tendo com meu projeto.

Tenho um pagecontrol e as Tabsheet são criado em runtime, dentro de cada Tabsheet tambem são criado o RichEdit, gostaria de saber como salvar o conteudo do RichEdit quando ele estiver ativo, pois a unica forma que estou conseguindo e salvar o conteudo do ultimo RichEdit criado.

Obs: Tenho um edit tambem criado dentro de casa Tabsheet com o caminho de onde vai ser salvo.

Desde já agradeço a todos que ajudarem.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

exemplo

// Ao ativar o Form verifica qual tabsheet esta ativo

procedure TForm1.FormActivate(Sender: TObject);
begin
   Edit1.Text := PageControl1.ActivePage.Caption;
end;

// Quando clicar em outro Tabsheet 

procedure TForm1.PageControl1Change(Sender: TObject);
begin
   Edit1.Text := PageControl1.ActivePage.Caption;
end;

// Testar o Tabsheet ativo e salvar o conteudo do RichEdit

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   if tabsheet1.Showing then
      RichEdit1.Lines.SaveToFile('C:\RichEdit1.txt');

   if tabsheet2.Showing then
      RichEdit2.Lines.SaveToFile('C:\RichEdit2.txt');

   if tabsheet3.Showing then
      RichEdit3.Lines.SaveToFile('C:\RichEdit3.txt');
end;


// Testar o Tabsheet ativo e salvar o conteudo do RichEdit

procedure TForm1.BitBtn2Click(Sender: TObject);
var
   i: integer;
   Arquivo : TextFile;
begin
   if tabsheet1.Showing then
      begin
         AssignFile(Arquivo, 'C:\RichEdit1.txt');
         Rewrite(Arquivo);
         for i := 0 to RichEdit1.Lines.Count -1 do
         begin
            Write(Arquivo, RichEdit1.Lines.Strings[i]);
         end;
         Append(Arquivo);
      end;

   if tabsheet2.Showing then
      begin
         AssignFile(Arquivo, 'C:\RichEdit2.txt');
         Rewrite(Arquivo);
         for i := 0 to RichEdit2.Lines.Count -1 do
         begin
            Write(Arquivo, RichEdit2.Lines.Strings[i]);
         end;
         Append(Arquivo);
      end;

   if tabsheet3.Showing then
      begin
         AssignFile(Arquivo, 'C:\RichEdit3.txt');
         Rewrite(Arquivo);
         for i := 0 to RichEdit3.Lines.Count -1 do
         begin
            Write(Arquivo, RichEdit3.Lines.Strings[i]);
         end;
         Append(Arquivo);
      end;
end;

OBS: A diferença entre as duas maneiras, seria: ( Supondo que o conteudo da linha fosse somente a palavra RichEdit1 )

usando o comando RichEdit1.Lines.SaveToFile('C:\RichEdit1.txt');

o conteudo do arquivo sera

{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\f0\fs16 RichEdit1
\par
\par }

usando o comando Write(Arquivo, RichEdit1.Lines.Strings);

o conteudo do arquivo sera

RichEdit1

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas obrigado por responder, conseguir realmente pegar o caption do tabsheet com seu codigo o unico problema e o name do RichEdit, como descrevir na pergunta, pois como ele e criado em tempo de execução fica dificil eu saber qual RichEdit é o ativo, pois no programa vai ter um MainMenu com a opção de salvar o conteudo, mas ele esta salvando so o conteudo do ultimo RichEdit criado e não o RichEdit ativo, se poder dar mas uma ajuda vou te agradecer muito, mas desde já agradeço pelo seu codigo pois foi de grande ajuda.

Editado por fxsoftware
Link para o comentário
Compartilhar em outros sites

  • 0

mas ele esta salvando so o conteudo do ultimo RichEdit criado e não o RichEdit ativo

o ultimo RichEdit criado é o que será ativo...

isso ocorre, porque voce não consegue pegar o nome do componente RichEdit ...

exemplo

se voce quiser pegar o RichEdit que foi criado no Tabsheet 3 ( vamos supor que o nome criado para o RichEdit seja RichEdit3 )

e voce definir em algum lugar do seu programa RichEdit3.Lines.SaveToFile('C:\RichEdit3.txt');

vai ocorrer um erro, pois o nome desse componente não foi declarado em nenhum lugar ( ele foi criado dinamicamente ) e dinamicamente voce deve procurar pelo nome que o componente foi criado.

a solução seria... ao clicar no evento OnChange do PageControl voce pegar o nome do componente RichEdit ou o conteudo que esta no componente RichEdit criado, para então depois salva-lo.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Caso não tenha entendido o que falei .... vai ai um exemplo de como fazer

unit UTabSheet00;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  TabSheet, TabSheetx : TTabSheet;
  RichEdit : TRichEdit;
  NumTabs: integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  TabSheet := TTabSheet.Create(SELF);
  TabSheet.PageControl := PageControl1;
  TabSheet.Name := 'TabSheet' + IntToStr(NumTabs);
  TabSheet.Caption := TabSheet.Name;
  Edit1.Text := TabSheet.Name;

  RichEdit := TRichEdit.Create(SELF);
  RichEdit.Parent := TabSheet;
  RichEdit.Name  := 'RichEdit' + IntToStr(NumTabs);
  RichEdit.Align := alClient;
  RichEdit.ScrollBars := ssBoth;
  RichEdit.Text := 'Incluindo Texto no RichEdit'+IntToStr(NumTabs);
  Edit2.Text := RichEdit.Name;

  Inc(NumTabs);
  PageControl1.ActivePageIndex := PageControl1.PageCount - 1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin

 showmessage('Salvando o Arquivo '+ PageControl1.ActivePage.Caption+'.txt');

 for i := 0 to ComponentCount-1 do // navega por todos os componentes
  begin
   if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit1') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       TRichEdit(Components[i]).Lines.SaveToFile('C:\RichEdit1.txt');
       break;
       end;


  if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit2') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       TRichEdit(Components[i]).Lines.SaveToFile('C:\RichEdit2.txt');
       break;
       end;


   if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit3') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       TRichEdit(Components[i]).Lines.SaveToFile('C:\RichEdit3.txt');
       break;
       end;

  end;


end;


procedure TForm1.PageControl1Change(Sender: TObject);
Var
 i : INTEGER;
begin
 Edit1.Text := PageControl1.ActivePage.Caption;

 for i := 0 to ComponentCount-1 do // navega por todos os componentes
  begin
   if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit1') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       Edit2.Text := TRichEdit(Components[i]).name;
       break;
       end;


  if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit2') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       Edit2.Text := TRichEdit(Components[i]).name;
       break;
       end;


   if (Components[i] is TRichEdit) and (TRichEdit(Components[i]).Name = 'RichEdit3') and
      (TRichEdit(Components[i]).CanFocus = true) then
       begin
       Edit2.Text := TRichEdit(Components[i]).name;
       break;
       end;

  end;

   showmessage(TRichEdit(Components[i]).Text);
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...