08. marts 2003 - 20:22Der 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?
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
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;
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
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.
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;
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.
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);
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??
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;
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
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.