Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SynEdit der aktuellen Seite abspeichern (https://www.delphipraxis.net/98765-synedit-der-aktuellen-seite-abspeichern.html)

XPLOSIV 31. Aug 2007 21:14


SynEdit der aktuellen Seite abspeichern
 
Also, ich will das der Inhalt der SynEdit (von der aktuellen Seite) gespeichert wird.


Hier mein Code:

Delphi-Quellcode:
begin
  SaveDialog1.Filter := 'NPC-Scripte (.d)|*.d';
  SaveDialog1.Execute;
  if SaveDialog1.FileName <> '' then
    begin
      TSynEdit(PageControl1.ActivePage.Controls[0]).Lines.SaveToFile(SaveDialog1.FileName);
    end;
end;
Hoffe jemand kann mir da helfen, also bei den per Knopfdruck erstellten SynEdit klappt das speichern wunderbar, doch ich habe noch einen SynEdit (Name= "SynEdit") in TabSheet2, wenn man den Code also so anpassen könnte das wenn die ActivePage TabSheet2 ist, er die Lines von "SynEdit" speichern soll ;)


Danke im Vorraus

XPLOSIV 2. Sep 2007 18:04

Re: SynEdit der aktuellen Seite abspeichern
 
So habe nun Marabus "Geschenk" angeguckt und ein wenig kapiert, Dateien in neuen Tabs öffnen klappt wunderbar, doch wie siehts mit abspeichern aus, - nicht gut :zwinker:

Hier habe ich mal den Source:

Deklaration:
Delphi-Quellcode:
 procedure FileSaveAsActionAccept(Sender: TObject);
    private
    Files: TStrings;
    procedure DoFileSaveAs(fn: TFileName);
Code:
Delphi-Quellcode:
procedure TDemoForm.FileSaveAsActionAccept(Sender: TObject);
begin
  with Sender as TFileSaveAs do
    DoFileSaveAs(FileSaveAsAction.Dialog.FileName);
end;

procedure TDemoForm.DoFileSaveAs(fn: TFileName);
var
  se: TSynEdit;
  i: Integer;
begin
  with PageControl do
    i := ActivePageIndex;
  se := TSynEdit(Files.Objects[i]);
  se.Lines.SaveToFile(fn);
  Files[i] := fn;
  if se.Modified then
    se.Modified := False;
end;
Wenn ich Datei abspeichere (beim SaveDialog) kommt ne Fehlermeldung...

Wenn noch was fehlt, bescheid sagen. Wird dann umgehend gepostet ;)

EDIT: Sry für Doppelpost :wall: :angel:

MfG XPLOSIV

marabu 2. Sep 2007 18:34

Re: SynEdit der aktuellen Seite abspeichern
 
Hallo,

wenn du Probleme beim Speichern von Dateien hast, dann dürfte es eine Frage von Zugriffsrechten sein. Meine Demo speichert die Daten anstandslos. Ich sehe eine Änderung, die du an meinem Code gemacht hast und die da nicht hingehört:

Delphi-Quellcode:
procedure TDemoForm.FileSaveAsActionAccept(Sender: TObject);
begin
  with Sender as TFileSaveAs do
    DoFileSaveAs({FileSaveAsAction.}Dialog.FileName);
end;
FileSaveAsAction ist identisch mit Sender, deshalb sollte jeder Verweis auf die Instanzvariable aus OnAccept() heraus unterbleiben. Die Eigenschaft Dialog wird durch das WITH-Statement zuerst bei der Action gesucht und dort auch gefunden!

Wenn du Fehlermeldungen erhältst, dann musst du die auch wörtlich angeben oder einen ScreenShot der Nachricht anhängen. Noch besser ist es, wenn du die Werte der beteiligten Variablen auch noch angibst - hier z.B. fn, den vollständigen Dateinamen.

Freundliche Grüße

XPLOSIV 5. Sep 2007 11:43

Re: SynEdit der aktuellen Seite abspeichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die Fehlermeldung (Im Anhang) und dann kommt son blauer Pfeil auf:

Delphi-Quellcode:
procedure TForm1.FileSaveAsActionAccept(Sender: TObject);
begin
  with Sender as TFileSaveAs do
    DoFileSaveAs(Dialog.FileName);
end;

Ohne weitere Erklärung.

MfG XPL0SIV

XPLOSIV 8. Sep 2007 11:49

Re: SynEdit der aktuellen Seite abspeichern
 
*push*

Kommt schon, kann mir einer helfen ? :( Marabu hat den Editor doch gebaut, evtll. weißt du ja die Lösung...

marabu 8. Sep 2007 11:55

Re: SynEdit der aktuellen Seite abspeichern
 
Hallo,

der Fehler wird in der Meldung ja genau beschrieben. Wenn du selbst keine Idee hast, an welcher Stelle er auftritt, dann musst du mal den Call-Stack betrachten. Irgendwo greifst du mit einem ungültigen Index eine StringList zu. Sollte der Fehler mit meiner unveränderten Demo auftreten, dann musst du mir genau die Schritte beschreiben, wie ich ihn nachstellen kann und dann kann ich ihn auch beheben.

Freundliche Grüße

XPLOSIV 8. Sep 2007 13:41

Re: SynEdit der aktuellen Seite abspeichern
 
hmm, ich dahcte ich hätte alles richtig nunja, hier viele angaben.

1.
Delphi-Quellcode:
  private
    Files: TStrings;
    function CanFileClose(index: Integer): Boolean;
    procedure DoFileOpen(fn: TFileName);
   [b] procedure DoFileSaveAs(fn: [/b]TFileName);
In der Action List hab ich FileSaveAsAction

2. Bei der On Accept hab ich folgendes:
Delphi-Quellcode:
procedure TForm1.FileSaveAsActionAccept(Sender: TObject);
begin
  with Sender as TFileSaveAs do
    DoFileSaveAs(Dialog.FileName);
end;
3. Hab ich noch DoFileSaveAs

Delphi-Quellcode:
procedure TForm1.DoFileSaveAs(fn: TFileName);
var
  se: TSynEdit;
  i: Integer;
begin
  with PageControl1 do
    i := ActivePageIndex;
  se := TSynEdit(Files.Objects[i]);
  se.Lines.SaveToFile(fn);
  Files[i] := fn;
  if se.Modified then
    se.Modified := False;
end;
4. Hab ich oben noch
Delphi-Quellcode:
resourcestring
  S_DATALOSS
    = 'Text wurde verändert und noch nicht gespeichert.'#13
    + 'Alle Änderungen gehen verloren!'
    ;
Genügt das ? Wenn was fehlt poste ich umgehend ;)

marabu 8. Sep 2007 13:51

Re: SynEdit der aktuellen Seite abspeichern
 
Stoppe doch mal den Code per Haltepunkt (F5) bevor der Fehler auftritt. Die in Frage kommende Stelle findest du über den Call Stack. Der Fehler kann zwar in den gezeigten Code-Zeilen auftreten, verursacht wird er aber bestimmt woanders.

XPLOSIV 8. Sep 2007 13:59

Re: SynEdit der aktuellen Seite abspeichern
 
Hmm, was ist der CallStack ?

Manno, das Ding versaut mein Ganzes Projekt...

marabu 8. Sep 2007 14:43

Re: SynEdit der aktuellen Seite abspeichern
 
Bei den Debugger-Optionen machst du ein Häkchen bei "Bei Delphi-Exceptions stoppen", dann startest du dein Programm und wenn der Fehler auftritt, dann kannst du über den Menüeintrag "Ansicht :: Debug-Fenster :: Aufruf-Stack" die fehlgeschlagenen Funktionsaufrufe und ihre Verschachtelung betrachten. Damit kannst du abschätzen, an welcher Stelle du einen Haltepunkt setzen musst um den Inhalt der fehlerhaften Indexvariable zu untersuchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz