błędy przy wklejaniu ze schowka i zapisywaniu pliku tekstowego

0

Opiszę na czym polega błędne działanie mojego programu.
A więc mam tekst w oknie pewnej aplikacji.Aplikacja ma przycisk kopiuj, kopiuję więc
całą treść do schowka.
Pierwsza linia tekstu jest np: 'NAZWA'
Po wklejeniu zawartości schowka do RichEdit (RichEdit1.PasteFromClipboard;)
Zamiast otrzymać w pierwszej lini treść 'NAZWA' otrzymuję 'ęNAZWA'.
Następnie moj program wykonuje kod zapisu zawartości RichEdit do pliku
którego nazwą ma być pierwsza linia tekstu (czyli 'NAZWA').
Kod jest następujący:
NazwaPli:=RichEdit1.Lines[0];
RichEdit1.Lines.SaveToFile(ExtractFilePath

(Application.ExeName)+'\Folder1'+''+NazwaPli+'.txt');
I znowu efektem jest nieoczekiwane dodanie znaków na początku.
W końcu otrzymuję nazwę pliku 'ęęłęóNAZWA.txt' zamiast 'NAZWA' czy też 'ęNAZWA';

Proszę o zaproponowanie rozwiązania problemu.
Zazanaczam że przy wklejeniu zawartości schowka do WordPada pierwszy błąd nie występuje.

0

:| jestes pewien ze masz w kodzie wszystko ok?

0

Po pierwsze daj nam więciej kodu, z tego co widzimy niewiele wynika.

Po drugie, pobieranie zawartości pierwszej linijki z RichEdit powinno :D może wyglądać tak:

NazwaPliku := RichEdit1.Lines.Strings[0];

Po trzecie, sprawdź:

Caption := ExtractFilePath(Application.ExeName);

daje ścieżkę zakończoną znakiem \

a więc w twoim przypadku:

Caption := ExtractFilePath(Application.ExeName) + '\katalog';

ścieżka pod którą zapisujesz będzie miała postać np. C:\windows\\katalog

Więcej kodu - więcej informacji :D

0

TRichEdit przechwytuje formatowanie z pliku, więc pozostaje Ci, albo podejrzeć ukryte znaki w pliku tekstowym i je usunąć, albo wczytywać do TMemo.

0

Co do TMemo to jest z nim taki problem że skraca (a raczej zawija) linie pomimo wyłączenia wordWrap.
A pozostałe sugestie sprawdzę.

0

Wprowadziłem zmiany w kodzie zgodnie z sugestią:
(RichEdit1.Lines[0] na RichEdit1.Lines.Strings[0] oraz usunięciu '' po ExtractFilePath(Application.ExeName))
Niestety nie pomogło.
Wstawiłem więc procedurę usuwającą te ć,ł,ę itp choć takie rozwiązanie nie jest zbyt eleganckie.
Być może błędy wynikają z tego że są przenoszone znaki formatujące z początku dokumentu. Są one takie:
{\rtf1\ansi\ansicpg1250\deff0\deflang1045{\fonttbl{\f0\fswiss\fcharset0 Courier New;}{\f1\fswiss\fcharset0 Arial;}{\f2\froman\fcharset0 Times New Roman;}{\f3\fnil MS Sans Serif;}}
\viewkind4\uc1\pard\keepn\sb100\sa100\lang1033\f0\fs20\u281?\v\f1\fs16\u281?\u322?\u281?'f3\b\v0\f2\fs36

A to jest kod już po zasugerowanych zmianach. Tu zapisuje do pliku .rtf ale jeśli do .txt to jest tak samo.

var
Form1: TForm1;
var Linia0:string;
var NazwaPli:string;
implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin {procedura do zapisania pliku jeśli jeszcze nie istnieje}
RichEdit1.Clear;
RichEdit1.PasteFromClipboard;
If CheckBox2.Checked=true then
begin
RichEdit1.Lines.Add('Koniec dokumentu. MP');
end;
Form1.SpeedButton3.Click ;
If FileExists(ExtractFilePath(Application.ExeName)+'TekiTXT'+''+NazwaPli+'.rtf')
then ShowMessage('Plik o tej nazwie już istnieje')else
RichEdit1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'TekiTXT'+''+NazwaPli+'.rtf');
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
{procedura do zamiany pliku na nowy pod tą samą nazwą}
begin
If CheckBox1.Checked=true then
begin
RichEdit1.Clear;
RichEdit1.PasteFromClipboard;
If CheckBox2.Checked=true then
begin
RichEdit1.Lines.Add('Koniec dokumentu. MP');{wstawia linię tekstu na końcu dokumentu jeśli checkBox2 jest zaznaczony}
end;
Form1.SpeedButton3.Click ;
RichEdit1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'TekiTXT'+''+NazwaPli+'.rtf');
end else ShowMessage('aby zamienić plik musisz zaznaczyć okienko');
end;

procedure TForm1.CheckBox1Click(Sender: TObject);{zabezpiecza przed przypadkowym naciśnięciem SpeedButtona2}
begin
If CheckBox1.Checked=true then SpeedButton2.Visible:=true;
end;

procedure OczyscLinie0;{procedura usuwa niewłaściwe znaki }
var n:byte;
begin
Form1.LabeledEdit3.Text:= Form1.RichEdit1.Lines.Strings[0];
For n:=1 to 20
do begin
Linia0:=Form1.RichEdit1.Lines.Strings[0];
NazwaPli:=Linia0;
If ((Linia0[1]='ę')or(Linia0[1]='ł')or(Linia0[1]='ć')or(Linia0[1]='ś')or(Linia0[1]='ą')or(Linia0[1]='ź')or(Linia0[1]='ó'))
then
begin
Linia0:=Copy(Linia0,2,Length(Linia0)-1);
end;
Form1.RichEdit1.Lines.Strings[0]:=Linia0;;
end;
Form1.LabeledEdit2.Text:= Linia0;
NazwaPli:=Linia0;
Form1.LabeledEdit4.Text:= NazwaPli;
For n:=1 to 20
do begin
If ((NazwaPli[1]='ę')or(NazwaPli[1]='ł')or(NazwaPli[1]='ć')or(NazwaPli[1]='ś')or(NazwaPli[1]='ą')or(NazwaPli[1]='ź')or(NazwaPli[1]='ó'))
then
begin
NazwaPli:=Copy(NazwaPli,2,Length(NazwaPli)-1);
end;
end;
Form1.LabeledEdit1.Text:=NazwaPli;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);{procedura czyszcząca jest uruchamiana buttonem}
begin
OczyscLinie0;

end;

end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1