Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Formatierter Text und String zusammenfügen (https://www.delphipraxis.net/188296-formatierter-text-und-string-zusammenfuegen.html)

Walter Landwehr 17. Feb 2016 15:33

Datenbank: Firbird • Version: 2,5,5 • Zugriff über: IBO / IBExpert

Formatierter Text und String zusammenfügen
 
Hallo,

stehe gerade so ein bisschen auf den Schlauch. Ich habe in einer Tabelle 2 Felder DATUM und TEXT. TEXT ist ein Blob Feld der formatierten RTF Text enthält. Gebt es eine Möglichkeit beide Felder in einem Feld zusammen zu führen ohne das die Formatierung verlorengeht.

Beispiel:

DATUM
16.02.2016

TEXT
Migräne --> (Hat Schriftattribute)

ZIEL
16.02.2016: Migräne --> (Schriftattribute sollen bleiben.

Danke für einen Tipp.

DeddyH 17. Feb 2016 15:58

AW: Formatierter Text und String zusammenfügen
 
Du könntest ein unsichtbares RichEdit erzeugen
Delphi-Quellcode:
RichEdit := TRichEdit.CreateParented(HWND_MESSAGE);
, dort Deinen Text hineinladen, ihn selektieren und im Anschluss SelText anpassen.

p80286 17. Feb 2016 16:01

AW: Formatierter Text und String zusammenfügen
 
Jain!
Du mußt nur an den Anfang des Textes des RTF das Datum als String einfügen :stupid:

Ein einfaches verketten der Felder geht auch aber das Ergebnis ist dann wohl nicht in Deinem Sinne.

die einfachste Lösung wäre es die RTF-Daten in ein Richedit zu übertragen und dann das Datum an den Anfang zu setzen. danach den Inhalt des Richedits wieder in das Blob-Feld der DB zurück speichern.

Gruß
K-H

DeddyH 17. Feb 2016 16:02

AW: Formatierter Text und String zusammenfügen
 
Meine Rede ;)

Walter Landwehr 17. Feb 2016 16:13

AW: Formatierter Text und String zusammenfügen
 
OK Danke werde ich probieren. Muss jetzt erst mal weg berichte aber dann vom Ergebnis.:-D

p80286 17. Feb 2016 16:42

AW: Formatierter Text und String zusammenfügen
 
Zitat:

Zitat von DeddyH (Beitrag 1330670)
Meine Rede ;)

Zitat:

Zitat von DeddyH (Beitrag 1330667)
.., dort Deinen Text hineinladen, ihn selektieren und im Anschluss SelText anpassen.

manchmal braucht's ein wenig ums zu verstehen:thumb:

Gruß
K-H

Sir Rufo 17. Feb 2016 16:45

AW: Formatierter Text und String zusammenfügen
 
Eine einfach zu handhabende Lösung wäre eine Klasse, die beide Felder aufnehmen kann und den Inhalt in einen Stream schreiben (und von dort auch wieder auslesen kann).

So etwas z.B.
Delphi-Quellcode:
unit Unit2;

interface

uses
  System.Classes;

type
  TDataObject = class( TInterfacedPersistent, IStreamPersist )
  private
    FDate: TDateTime;
    FText: TStrings;
    procedure SetText( const Value: TStrings );
  public { IStreamPersist }
    procedure LoadFromStream( Stream: TStream );
    procedure SaveToStream( Stream: TStream );
  public
    constructor Create;
    destructor Destroy; override;

    property Date: TDateTime read FDate write FDate;
    property Text: TStrings read FText write SetText;
  end;

implementation

{ TDataObject }

constructor TDataObject.Create;
begin
  inherited;
  FText := TStringList.Create;
end;

destructor TDataObject.Destroy;
begin
  FText.Free;
  inherited;
end;

procedure TDataObject.LoadFromStream( Stream: TStream );
var
  reader: TBinaryReader;
begin
  reader := TBinaryReader.Create( Stream );
  try
    FDate := reader.ReadDouble( );
  finally
    reader.Free;
  end;

  FText.LoadFromStream( Stream );
end;

procedure TDataObject.SaveToStream( Stream: TStream );
var
  writer: TBinaryWriter;
begin
  writer := TBinaryWriter.Create( Stream );
  try
    writer.Write( FDate );
  finally
    writer.Free;
  end;

  FText.SaveToStream( Stream );
end;

procedure TDataObject.SetText( const Value: TStrings );
begin
  FText.Assign( Value );
end;

end.
Um die Daten vom/zum Blob-Feld zu bekommen reicht dann
Delphi-Quellcode:
data := TDataObject.Create;

// Daten vom Feld holen
data.Assign( MyDataSet.FieldByName('BlobData') );

// Daten in das Feld schreiben
MyDataSet.FieldByName('BlobData').Assign( data );

himitsu 17. Feb 2016 17:34

AW: Formatierter Text und String zusammenfügen
 
RTF ist ein TEXT-Format (wie XML, JSON, CSV usw., aber zum Glück ohne Byte-Offsets), wenn du im RTF einen "Platzhalter" hast, der im RTF-Quellcode nicht "schlimm" kodiert ist, dann einfach den TEXT aus dem BLOB auslesen und ein StringReplace drüber.

TBx 18. Feb 2016 08:24

AW: Formatierter Text und String zusammenfügen
 
@Sir Rufo: Dem TE geht es wohl nicht darum, die Daten gemeinsam in einem Feld zu speichern, sondern um eine schöne formatierte Ausgabe der beiden Felder.

Wenn es nur um die Ausgabe in einem Report geht, würde ich mich in das BeforePrint-Ereignis der RTF-Elementes hängen und dort das Datumsfeld entsprechend injizieren.

Sir Rufo 18. Feb 2016 09:20

AW: Formatierter Text und String zusammenfügen
 
Zitat:

Zitat von TBx (Beitrag 1330706)
@Sir Rufo: Dem TE geht es wohl nicht darum, die Daten gemeinsam in einem Feld zu speichern, sondern um eine schöne formatierte Ausgabe der beiden Felder.

Jetzt, wo du es ansprichst, fällt es mir auch auf :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Seite 1 von 2  1 2      

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