AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Funktion / Stream in Richmemo laden ( Lazarus )
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion / Stream in Richmemo laden ( Lazarus )

Ein Thema von manfred_h · begonnen am 15. Sep 2015 · letzter Beitrag vom 17. Sep 2015
Antwort Antwort
Seite 2 von 3     12 3      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 09:18
Man könnte auch direkt die TField-Instanz übergeben:

procedure TDM.rtf_stream_load( aField: TField; ARichMemo: TCustomRichMemo); DM.rtf_stream_load(tbl_testimony.FieldByName('TESTIMONY'),frm_testimony.RichMemo1);
Markus Kinzler
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#12

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 09:48
Hört sich gut an.
Danke für den Tipp.

Shalom
Manfred
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#13

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 10:05
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;
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#14

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 14:20
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 ...
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#15

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 15:30
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 17:01
Ich weiß ja nicht, ob das unter Lazarus auch geht, aber ein ganz simples RichMemo1.Lines.Assign( DBField1 ); macht das unter Delphi genauso (ist nur kürzer in der Schreibweise).

Und zurück geht das mit DBField1.Assign(RichMemo1.Lines); .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#17

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 18:24
RichMemo1.Lines.Assign( DBField1 ) Sieht ja super kurz aus.
Erhalte aber den Fehler :
Cannot assign a TDAField to a TWin32RichMemoString.

Muss das Morgen mal anschauen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 18:25
Funktioniert es mit RichMemo1.Lines.Assign( DBField1.asString ) ?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 16. Sep 2015, 18:29
Voraussetzung dafür ist natürlich das Lines ein Nachfahr von TStrings ist und das Feld ein TBlobField .

So geht es auf jeden Fall mit Delphi, dort findet man das in den Sourcen bei TBlobField.Assign und TBlobField.AssignTo .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#20

AW: Funktion / Stream in Richmemo laden ( Lazarus )

  Alt 17. Sep 2015, 11:20
Habe es getestet:
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"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
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