![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Вобщем, такая проблема. В данной проге я пытаюсь сделать следующее: при нажатии на одну кнопку текст из TEdit заносится в файл. При нажатии на другую кнопку текст, наоборот, читается из файла и заносится в TEdit. И вроде работает, но при чтении в Edit записывается не тот текст, который я вводил ранее, а какие-то каракули. Кто нибудь может подсказать, как исправить? Исходники прилагаются (код см. ниже + архив см. в аттачменте).
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tf: TFileStream;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
tf:=TFileStream.Create('1.trololo',fmCreate);
tf.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var s: string;
begin
s:=Edit1.Text;
tf:=TFileStream.Create('1.trololo',fmOpenWrite);
tf.Write(s,SizeOf(s));
tf.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
var s: string;
begin
tf:=TFileStream.Create('1.trololo',fmOpenRead);
tf.Seek(0,soFromBeginning);
tf.Read(s,SizeOf(s));
Edit1.Text:=s;
tf.Free;
end;
end.ЗЫ. Возможно, надо что-то намутить с указателями, но я не знаю, что именно... |
|
#2
|
|||
|
|||
|
Код из моих проектов:
Код:
function TModelItemBase.ReadString(AStream: TStream): String; var ALen : Integer; begin ALen := ReadInt(AStream); SetLength(Result,ALen); If ALen > 0 Then AStream.Readbuffer(Result[1],ALen); end; procedure TModelItemBase.WriteString(AStream: TStream; AValue: String); var ALen : Integer; begin ALen := Length(AValue); WriteInt(AStream,ALen); If ALen > 0 Then AStream.WriteBuffer(AValue[1],ALen); end; |
|
#3
|
||||
|
||||
|
Что ты пытаешься указать?
Код:
tf.Write(s,SizeOf(s)); tf.Read(s,SizeOf(s)); |
|
#4
|
||||
|
||||
|
Так ещё можно попробовать:
Код:
//запись
procedure TForm1.Button1Click(Sender: TObject);
Var
S: String[32];
F: TFileStream;
begin
S:= Edit1.Text;
F:= TFileStream.Create('1.trololo', fmCreate);
F.Write(s, 32);
F.Free;
end;
//чтение
procedure TForm1.Button2Click(Sender: TObject);
Var
S: String[32];
F: TFileStream;
begin
F:= TFileStream.Create('1.trololo', fmOpenRead);
F.Position:= 0;
F.Read(S, 32);
Edit1.Text:= S;
F.Free;
end; |
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Можно закодировать "страшным" алгоритмом)
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
S: String[32];
F: TFileStream;
i: Integer;
begin
S:= Edit1.Text;
F:= TFileStream.Create('1.trololo', fmCreate);
For i:= 0 To 31 Do S[i]:= Chr(Not(Ord(S[i]) Xor $4F));
F.Write(S, 32);
F.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
S: String[32];
F: TFileStream;
i: Integer;
begin
F:= TFileStream.Create('1.trololo', fmOpenRead);
F.Position:= 0;
F.Read(S, 32);
For i:= 0 To 31 Do S[i]:= Chr(Not(Ord(S[i]) Xor $4F));
Edit1.Text:= S;
F.Free;
end; |