Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Salvar conteudo do RichEdit ativo dentro do TabSheet


fxsoftware
 Share

Question

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 to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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.

Edited by fxsoftware
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

Jhonas muito obrigado por tudo mesmo com esse seu exemplo concluir essa parte do meu projeto e só tenho que te agradecer, eu tinha feito algo parecido com esse seu exemplo mas tava dando erro, mas agora esta tudo OK, grande abraço jhonas e boa noite.

Link to comment
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.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...