Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Funktion / Stream in Richmemo laden ( Lazarus ) (https://www.delphipraxis.net/186595-funktion-stream-richmemo-laden-lazarus.html)

mkinzler 16. Sep 2015 08:18

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Man könnte auch direkt die TField-Instanz übergeben:

Delphi-Quellcode:
procedure TDM.rtf_stream_load( aField: TField; ARichMemo: TCustomRichMemo);
Delphi-Quellcode:
DM.rtf_stream_load(tbl_testimony.FieldByName('TESTIMONY'),frm_testimony.RichMemo1);

manfred_h 16. Sep 2015 08:48

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Hört sich gut an.
Danke für den Tipp.

Shalom
Manfred

manfred_h 16. Sep 2015 09:05

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Noch eine Frage

Habe eben diesen Post gefunden:
http://www.delphipraxis.net/107884-m...eichern-2.html

Bietet TReader, TWriter vorteile gegenüber meiner gefundenn Lösung?

Delphi-Quellcode:
procedure TForm1.ButtonLadenClick(Sender: TObject);
Var Stream:TFilestream;
begin
  Stream:=TFileStream.Create('D:\TestStream',fmOpenRead or fmShareDenyNone);
  try
    //TReader objekt erstellen und Daten aus den Stream laden
    with TReader.create(Stream,1024) do
      try
        Memo1.Text := ReadString;
        Edit1.Text := ReadString;
        SpinEdit1.Value := ReadInteger;
        CheckBox1.Checked := ReadBoolean;
      finally
        free;
      end;
   finally
     Stream.free;
   end;
end;
Delphi-Quellcode:
procedure TForm1.ButtonSpeichernClick(Sender: TObject);
Var Stream:TFilestream;
begin
  Stream:=TFileStream.Create('D:\TestStream',fmcreate);
  try
    //TWriter objekt erstellen und Daten in den Stream speichern
    with TWriter.create(Stream,1024) do
      try
        WriteString(Memo1.Text);
        WriteString(Edit1.Text);
        WriteInteger(SpinEdit1.Value);
        WriteBoolean(CheckBox1.Checked);
      finally
        free;
      end;
   finally
     Stream.free;
   end;
end;

Perlsau 16. Sep 2015 13:20

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Manfred, wieso probierst du nicht einfach die Universal-Lösung, die ich oben bereits gepostet hatte, einmal aus? Diese beiden Methoden kannst du für alle Blob-To-Stream- und Stream-To-Blob-Aufgaben einsetzen. Du mußt lediglich den Stream und das Feld übergeben. Das Feld legst du in der aufrufenden Methode fest:
Delphi-Quellcode:
Procedure TForm1.AufrufendeMethode(Sender : TObject);
Var
  Feld : TField;
  S : TMemoryStream;
begin
  S := TMemoryStream.Create;
  Try
    Feld := DatenModul.MyQuery.FieldByName('MeinBlobFeld'); // oder wie auch immer deine Tabellenkomponente und dein Blobfeld benannt sind
    Memo.Lines.SaveToStream(S);
    If Not DatenModul.StreamToBlob(S,Feld) Then
       ShowMessage('Fehler'); // oder eben ein globaler Fehlerstring, wie ich ihn verwende
  Finally
    S.Free;
  End;
end;
Wenn du das Feld angibst, mußt du weder Tabellenname noch sonstwas übergeben, denn das Feld führt ja ein Property mit, welches das Dataset beinhaltet: Feld.Dataset. Du mußt also nicht mit der Kirche ums ganze Dorf fahren :)

Ungetestet, da nur schnell als Beispiel reingetippt ...

manfred_h 16. Sep 2015 14:30

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Hallo Perlsau

Hab Deinen Vorschlag nicht vergessen und auch schon ausprobiert.
"Meine" urspründliche Lösung war für mich nur verständlicher.
Aber ich versuche auch gerne die von Dir nochmals angepasste Version.
Danke Nochmals für Deinen Tipp. :thumb:

Zitat:

Du mußt also nicht mit der Kirche ums ganze Dorf fahren
Immer gut wenn man die Kirche im Dorf lässt. ;-)

Shalom
Manfred

Sir Rufo 16. Sep 2015 16:01

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Ich weiß ja nicht, ob das unter Lazarus auch geht, aber ein ganz simples
Delphi-Quellcode:
RichMemo1.Lines.Assign( DBField1 );
macht das unter Delphi genauso (ist nur kürzer in der Schreibweise).

Und zurück geht das mit
Delphi-Quellcode:
DBField1.Assign(RichMemo1.Lines);
.

manfred_h 16. Sep 2015 17:24

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Delphi-Quellcode:
RichMemo1.Lines.Assign( DBField1 )
Sieht ja super kurz aus. :-D
Erhalte aber den Fehler :
Cannot assign a TDAField to a TWin32RichMemoString.

Muss das Morgen mal anschauen.

mkinzler 16. Sep 2015 17:25

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Funktioniert es mit RichMemo1.Lines.Assign( DBField1.asString ) ?

Sir Rufo 16. Sep 2015 17:29

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Voraussetzung dafür ist natürlich das Lines ein Nachfahr von
Delphi-Quellcode:
TStrings
ist und das Feld ein
Delphi-Quellcode:
TBlobField
.

So geht es auf jeden Fall mit Delphi, dort findet man das in den Sourcen bei
Delphi-Quellcode:
TBlobField.Assign
und
Delphi-Quellcode:
TBlobField.AssignTo
.

manfred_h 17. Sep 2015 10:20

AW: Funktion / Stream in Richmemo laden ( Lazarus )
 
Habe es getestet:
Delphi-Quellcode:
frm_testimony.RM_Testimony.Lines.Assign( tbl_testimony.FieldByName('TESTIMONY').AsString)
Erhalte aber leider die Fehlermeldung:
Error: Incompatible type for arg no. 1: Got "WideString", expected "TPersistent"


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

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