Avatar billede armena Nybegynder
08. marts 2003 - 20:22 Der er 17 kommentarer og
1 løsning

Gem Lines

jeg har en pagecontrol, som opretter nye TabSheets ved at klikke på en knap. Når den opretter en Tabsheet, er der en SynEdit på den. Det virker helt fint, men når jeg skal gemme dens lines, ved jeg ikke hvordan, fordi at den skal gøre sådan at den gemmer den aktive TabSheets SynEdit lines.

Bruger dette kode til at oprette et nyt TabSheet med en Synedit:

procedure TForm1.NytdokumentClick(Sender: TObject);
var
  TS: TTabSheet;
begin
  TS := TTabSheet.Create(Dokumenter);
  with TS do begin
    Inc(Number);
    Caption := 'Note '+IntToStr(Number);
    PageControl := Dokumenter;
  end;
  with TSynEdit.Create(TS) do begin
    Align := alClient;
    Text := '';
    Parent := TS;
    Gutter.Color :=$00DED9D5;
    Gutter.LeftOffset :=0;
    Gutter.RightOffset :=10;
    Gutter.ShowLineNumbers := true;
    Gutter.Font.name := 'Times New Roman';
    Gutter.Font.Size := 12;
    RightEdgeColor := clWhite;
  end;
end;

Synedit er et komponent i stil med Richedit, bare med flere funktioner.

Med hvilken kode kan jeg få den til at gøre det jeg søger hjælp om?

MVH.
armena
Avatar billede cautoo Nybegynder
08. marts 2003 - 22:09 #1
idé:
Hvilken TabSheet der er aktiv kan du finde ud af igennem grundkomponentet til alle dine tabsheets (Pagecontrol), hvis du når du opretter en ny tabsheet giver tag et nummer, og kalder din SunEdit navn(tagtal) så kan du søge efter din synedit ved hjælp af SynEdit('navn' + tag) eller noget i den retning
Avatar billede cautoo Nybegynder
08. marts 2003 - 22:43 #2
Eksempel:
procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TTabSheet;
begin
  antal := antal+1;
  TS := TTabSheet.Create(PageControl1);
  with TS do begin
    Caption := 'Note';
    PageControl := PageControl1;
    tag := antal
  end;
  TMEmo.Create(self).Name := 'min_memo_nr' + IntToStr(antal);
  with TMemo(FindComponent('min_memo_nr' + IntToStr(antal))) do begin
    Parent := TS;
    lines.Text := '';
    Font.name := 'Times New Roman';
    Font.Size := 12;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin
    if savedialog1.execute then
    begin
    try
      lines.SaveToFile(savedialog1.filename);
    except
      Showmessage('Kunne ikke gemme filen');
    end;
    end;
  end;
end;

Button1 er Nyt dokument
Button2 er Gem Som...
Avatar billede cautoo Nybegynder
08. marts 2003 - 22:45 #3
eksemplet er godt nok med TMemo men det burde ikk være så svært at lave om, DETTE eksempel bruger 2 knapper, en TPageControl kaldes PageControl1 og en Tsavedialog kaldet SaveDialog1 og så skal antal: Integer oprettes i var
Avatar billede armena Nybegynder
08. marts 2003 - 23:10 #4
når jeg bruger din kode til at oprette et nyt dokument, opretter den kun den første tabsheet.. når jeg opretter det andet, tredje... så siger den at min_memo_nr1 allready exists.
Avatar billede cautoo Nybegynder
08. marts 2003 - 23:31 #5
så lav en OnCreate form koden:
antal := 0;
Avatar billede cautoo Nybegynder
08. marts 2003 - 23:33 #6
antal variebel skal stå i den øverste var altså sammen med Form1: TForm1

var
  Form1: TForm1;
  Antal: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TTabSheet;
begin
  antal := antal+1;
  TS := TTabSheet.Create(PageControl1);
  with TS do begin
    Caption := 'Note';
    PageControl := PageControl1;
    tag := antal
  end;
  TMEmo.Create(self).Name := 'min_memo_nr' + IntToStr(antal);
  with TMemo(FindComponent('min_memo_nr' + IntToStr(antal))) do begin
    Parent := TS;
    lines.Text := '';
    Font.name := 'Times New Roman';
    Font.Size := 12;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin
    if savedialog1.execute then
    begin
    try
      lines.SaveToFile(savedialog1.filename);
    except
      Showmessage('Kunne ikke gemme filen');
    end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  antal := 0;
end;
Avatar billede armena Nybegynder
08. marts 2003 - 23:51 #7
nu virker det :)
Men der er lige 2 ting:
Når jeg fx. skriver "dskfk" i TabSheet 1 memo lines og opretter et nyt dokument, så er den nye memos lines ikke tomt men det samme som TabSheet 1's memo lines. Den nye memo's lines er tomt når man bladre en tabsheet frem og tilbage.

er der ikke en måde at få memoen Refreshed når man opretter?

Og den anden ting:
Hvordan loader jeg så? altså filer i den aktive (tabsheet)memo.
Avatar billede cautoo Nybegynder
09. marts 2003 - 00:01 #8
1: Det jeg tror som forvirer dig er at den ikke automatisk aktiverer den nye Tabsheet når du opretter den, men bliver på den samme som før du trykkede for at ændre det kan du skrive  PageControl1.ActivePage := TS; nedderst i button1click

2:
procedure TForm1.Button3Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin
    if opendialog1.execute then
    begin
    try
      lines.LoadFromFile(savedialog1.filename);
    except
      Showmessage('Kunne ikke gemme filen');
    end;
    end;
  end;
end;

du kan som grundting altid have:
procedure TForm1.Button2Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin


  end;
end;
derinde kan du så skrive din kode, eks. hvis du vil hente memoX.lines.text skriver du bare
eks.:
showmessage(lines.text);
Avatar billede cautoo Nybegynder
09. marts 2003 - 00:02 #9
Showmessage('Kunne ikke gemme filen');
skal ændre til
Showmessage('Kunne ikke åbne filen');
Avatar billede armena Nybegynder
09. marts 2003 - 00:08 #10
Jeg prøver de 2 ting imorgen, skal smutte for iaften! :)
Men husk lige at svare mig imorgen igen :)

Godnat!
Avatar billede armena Nybegynder
09. marts 2003 - 13:56 #11
Det med at Button1, virker fint, men når jeg skal loade, creater den ikke en ny TabSheet, med indholdet af filen i en ny Memo, men derimod sætter den den valgte fil fra opendialog1 ind i den aktive dokument's memo.
Hvordan gør jeg sådan at den creater en ny tabsheet og en memo i den, når jeg loader en fil??
Avatar billede cautoo Nybegynder
09. marts 2003 - 15:23 #12
prøver lige at lave et minieksempel
Avatar billede cautoo Nybegynder
09. marts 2003 - 16:13 #13
her er lidt at gå ud fra, indsæt 4 knapper, 1 PageControl, 1 opendialog og savedialog:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Antal: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TTabSheet;
begin
  antal := antal+1;
  TS := TTabSheet.Create(PageControl1);
  with TS do begin
    Caption := '(Nyt dokument)';
    PageControl := PageControl1;
    tag := antal
  end;
  TMemo.Create(self).Name := 'min_memo_nr' + IntToStr(antal);
  with TMemo(FindComponent('min_memo_nr' + IntToStr(antal))) do begin
    Parent := TS;
    Align := alClient;
    lines.Text := '';
    Font.name := 'Times New Roman';
    Font.Size := 12;
  end;
  PageControl1.ActivePage := TS;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin
    if SaveDialog1.execute then
    begin
    try
      lines.SaveToFile(SaveDialog1.filename);
    except
      Showmessage('Kunne ikke gemme filen');
      exit;
    end;
    end;
  end;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
  with TMemo(findcomponent('min_memo_nr' + IntToStr(PageControl1.ActivePage.Tag))) do
  begin
    if OpenDialog1.execute then
    begin
    try
      lines.LoadFromFile(OpenDialog1.filename);
    except
      Showmessage('Kunne ikke åbne filen');
      exit;
    end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Button1Click(Sender);
  Button3Click(Sender);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  opendialog1.Filter := 'Tekstfiler (*.txt)|*.txt|Alle Filer (*.*)|*.*';
  Savedialog1.Filter := 'Tekstfiler (*.txt)|*.txt|Alle Filer (*.*)|*.*';
  Button1.Caption := 'Ny';
  Button2.Caption := 'Åbn';
  Button3.Caption := 'Åbn i samme memo';
  Button4.Caption := 'Gem Som...';
  Button1Click(Sender);
end;

end.
Avatar billede armena Nybegynder
10. marts 2003 - 09:45 #14
Virker fedt :D
Siden du lige har lavet det, kunne du måske hjælpe mig med at lave:
Gem og Gem Alle

Den gem funktion du lavede er Gem Som.
Har leget med at lave det, men det lykkedes ik.
Avatar billede armena Nybegynder
10. marts 2003 - 14:33 #15
har lige afsat 50 point ekstra :) 100 point ialt får du hvis du lige hjælper med de 2 ting ;)
Avatar billede cautoo Nybegynder
10. marts 2003 - 17:25 #16
kan godt prøve at kigge lidt på det! vender lige tilbage lidt senere!, i stedet for at jeg hele tiden kunne du så ikke adde mig i din MSN hvis du har det: dennis.ssh@computer.dk
Avatar billede cautoo Nybegynder
10. marts 2003 - 17:25 #17
i stedet for at jeg hele tiden = i stedet for at jeg hele tiden at sende lange koder her på eksperten
Avatar billede armena Nybegynder
10. marts 2003 - 18:05 #18
Du får points.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester