Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RichEdit [D5]


Sergey-ZZZ ©   (2002-11-13 09:14:00) 

Подскажите, кто знает, как у RichEdit взять не только его Text, но и все служебные символы, т.е. то, что копируется при SaveToFile и LoadFromFile. Заранеее благодарен.


KoluChi   (2002-11-13 16:15:00) [1]

Проследи логику - при записи вставляется новая строка.
А при чтении берется первая запись запроса. А кто сказал что она одна? "SELECT Text,Komu FROM Main WHERE"+OpenForm.Edit1.Text+""""
Посмотри в DBGrid что возвращает этот запрос. По-поводу моего адреса смотри почту.


Sergey-ZZZ   (2002-11-13 15:21:00) [2]

procedure TMainForm.FileSaveAs(Sender: TObject);
var S: String;
Stream: TStringStream;
begin
if Memo1.Text="" then
begin
ShowMessage("Необходимо заполнить все поля");
end;
{Создаем и показываем форму сохранения файла}
If not Assigned(SaveForm) then
SaveForm :=TForm1.Create(Self);
SaveForm.ShowModal;
if SaveForm.ModalResult=mrOk then
begin
With DataModule1 do
begin

{Извлекаем и формируем названия сохраненных файлов на сервере}
ADOQuery1.SQL.Text:=
"SELECT FileName FROM Main WHERE FileName="""+SaveForm.Edit1.Text+"""";
ADOQuery1.Open;
if VarType(ADOQuery1.Fields[0].Value)=varString then
if MessageDlg(Format(sOverWrite, [SaveForm.Edit1.Text]),
mtConfirmation, mbYesNoCancel, 0) <> idYes then
begin
ADOQuery1.Close;
Exit;
end
else
ADOQuery1.Close
else ADOQuery1.Close;

Stream := TStringStream.Create("");
Editor.Lines.SaveToStream(Stream);
S := Stream.DataString;

{Устонавливаем название сохраненного файла }
SetFileName(SaveForm.Edit1.Text);
ADOQuery1.SQL.Text:=
"INSERT INTO Main([Text],FileName,UserName,CompName,DateOut,In_Out,Komu) "+
"Values(:Text,:FileName,:UserName,:CompName,:DateOut,:In_Out,:Komu)";
ADOQuery1.Parameters[0].Value := S; //Editor.Lines.Text;
ADOQuery1.Parameters[1].Value := SaveForm.Edit1.Text;
ADOQuery1.Parameters[2].Value := UserName;
ADOQuery1.Parameters[3].Value := CompName;
ADOQuery1.Parameters[4].Value := Date;
if CheckBox1.Checked then ADOQuery1.Parameters[5].Value := True
else ADOQuery1.Parameters[5].Value := False;
ADOQuery1.Parameters[6].Value := Memo1.Text;
ADOQuery1.ExecSQL;
End;
Editor.ReadOnly := true;
Stream.Free();
Editor.Modified := False;
SetModified(False);
end;
end;

{Открытие файла}
procedure TMainForm.PerformFileOpen(const AFileName: string);
Var
Stream: TStringStream;
begin
With DataModule1 do
begin
ADOQuery1.SQL.Text:="SELECT Text,Komu FROM Main WHERE FileName="""+OpenForm.Edit1.Text+"""";
ADOQuery1.Open;

Stream := TStringStream.Create(ADOQuery1.FieldByName("Text").Value);
Editor.Lines.LoadFromStream(Stream);
Stream.Free();
Memo1.Text:=(ADOQuery1["Komu"]);
ADOQuery1.Close;
end;
SetFileName(AFileName);
Editor.SetFocus;
Editor.Modified := False;
SetModified(False);
end;

Напиши свой адрес. Так будет проще общаться. И большое спасибо, что помогаешь. Sergey-ZZZ@mail.ru


KoluChi   (2002-11-13 13:26:00) [3]

VarChar - нормально. Приведи код записи и чтения из базы.
думаю разберемся, не все так сложно.


Sergey-ZZZ   (2002-11-13 12:32:00) [4]

Я храню MSSQL2000. До этого хранил в VarChar. Только что попробовал VarBinary - тот же результат. Форматирование не сохраняется.


KoluChi   (2002-11-13 12:25:00) [5]

А поле Text какого типа?


KoluChi   (2002-11-13 12:24:00) [6]

Извини, что-то не то сказал.
В базе точно RTF строка? VarToStr тут не причем.
Посмотри
ShowMessage(VarToStr(ADOQuery1.FieldByName"Text").Value)));
- должен быть текст в RTF формате


KoluChi   (2002-11-13 12:17:00) [7]

Stream := TStringStream.Create(VarToStr(ADOQuery1.FieldByName("Text").Value));
Stream.Position := 0;
RichEdit1.Lines.LoadFromStream(Stream);
Stream.Free();


Sergey-ZZZ   (2002-11-13 12:06:00) [8]

Хрен там. Не работает. Я думаю, что VarToStr форматирование и отбрасывает ????????


KoluChi   (2002-11-13 11:54:00) [9]

Посмотри что сохранено в базе.
А извлечь можно так:
Stream := TStringStream.Create(VarToStr(ADOQuery1.FieldByName("Text").Value));
RichEdit1.Lines.LoadFromStream(Stream);
Stream.Free();
Должно работать.


Sergey-ZZZ   (2002-11-13 11:45:00) [10]

Большое спасибо!!! Нужна еще помощь по извлечению из базы. Я сохраняю...
var
S: String;
Stream: TStringStream;
begin
Stream := TStringStream.Create("");
RichEdit1.Lines.SaveToStream(Stream);
S := Stream.DataString;
Stream.Free();
end;

а потом извлекаю

ADOQuery1.SQL.Text:="SELECT Text FROM Main WHERE ...";
ADOQuery1.Open;
Stream := TStringStream.Create("");
Stream:= VarToStr(ADOQuery1["Text"]);
RichEdit1.Lines.LoadFromStream(Stream);
ADOQuery1.Close;

И в RichEdit1 опять не форматированный текст :(((


KoluChi   (2002-11-13 11:17:00) [11]

получить RTF строку:
var
S: String;
Stream: TStringStream;
begin
Stream := TStringStream.Create("");
RichEdit1.Lines.SaveToStream(Stream);
S := Stream.DataString;
Stream.Free();
end;


Sergey-ZZZ   (2002-11-13 10:03:00) [12]

Фишка в чем... У меня PlainText=False. Я беру Editor.Lines.Text и кладу в базу данных, а когда извлекаю его опять в RichEdit, то он уже не форматированн. А мне нужен форматированный.


Song   (2002-11-13 09:38:00) [13]

Вообще Lines.Text и содержит rft если PlainText не уставновлено в True


Sergey-ZZZ   (2002-11-13 09:36:00) [14]

Ну да. Размер шрифта, цвет и прочая лобуда.


Song   (2002-11-13 09:15:00) [15]

А какие там служебные символы? Теги ртф?


Наверх

Титульная страница Поиск, карта сайта Написать письмо