AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Formatierter Text und String zusammenfügen

Formatierter Text und String zusammenfügen

Ein Thema von Walter Landwehr · begonnen am 17. Feb 2016 · letzter Beitrag vom 23. Feb 2016
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Formatierter Text und String zusammenfügen

  Alt 17. Feb 2016, 16:45
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 );
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#2

AW: Formatierter Text und String zusammenfügen

  Alt 17. Feb 2016, 17:34
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.904 Beiträge
 
Delphi 12 Athens
 
#3

AW: Formatierter Text und String zusammenfügen

  Alt 18. Feb 2016, 08:24
@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.
Thomas Breitkreuz
  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
 
#4

AW: Formatierter Text und String zusammenfügen

  Alt 18. Feb 2016, 09:20
@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
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
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Formatierter Text und String zusammenfügen

  Alt 18. Feb 2016, 10:56
Sir Rufo,

das Thema ist etwas komplexer. Ich will schon die beiden Felder in einem Feld zusammenführen und zusätzlich noch mit : und ; ergänzen. Es können nämlich mehrere Diagnosen vorhanden sein die alle in ein Blob Feld gespeichert werden sollen. Ich hatte versucht Dir eine private Nachricht zu senden ist aber nicht möglich. Hätte gerne mit Dir mal dieses Thema besprochen, weil es doch komplexer ist als hier die Lösungen aufzeigen. Es dürfen auf keinen Fall die Schriftattribute verloren gehen. Im Reportgenerator zu realisieren ist unmöglich.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
405 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Formatierter Text und String zusammenfügen

  Alt 18. Feb 2016, 11:13
Hier mal meine Procedure wie ich es bislang gelöst habe. Leider verlieren ich hier alle Schriftattribute.

Delphi-Quellcode:
procedure TRechnungsSerienDruckFrm.AktualisiereRechnungDiagnose;
  var Satz : String;
      Suchwort : String;
      LetztesDatum : String;
begin
  TempQry.Close;
  TempQry.SQL.Text := 'Select BEHANDLUNGSDATUM, GebuehNr, Suchwort, Text from tbl_Rechnungspositionen '
                  + 'where RechnungNr = :RechnungNr and Typ = ''D'' ';
  TempQry.ParamByName('RechnungNr').AsInteger := RechnungQry.FieldByName('RechnungNr').AsInteger;
  TempQry.Open;
  DiagnoseEdit.Clear; //
  LetztesDatum := '';
  While not TempQry.Eof do
  begin
    satz := '';
    if dmMain.ibqryOptionen.FieldByName('DIAGNOSEDATUM').AsString = 'Jthen
      if LetztesDatum <> FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime) then
      begin
        LetztesDatum := FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime);
        Satz := FormatDateTime('dd.mm.yyyy', TempQry.FieldByName('Behandlungsdatum').AsDatetime) + ': ';
      end;

    ManuelleDiagnoseEdit.AsString := TempQry.FieldByName('Text').AsString;
    Suchwort := StringReplace(ManuelleDiagnoseEdit.Text, #13#10, ' ', [rfReplaceAll]);
    if Suchwort = 'then
       Suchwort := TempQry.FieldByName('Suchwort').AsString;
    if dmMain.ibqryOptionen.FieldByName('DIAGNOSE').AsString = 'Diagnose einfügenthen
       satz := Satz + Suchwort + '; '
    else
    if dmMain.ibqryOptionen.FieldByName('DIAGNOSE').AsString = 'Nur ICD 10 Code einfügenthen
       satz := Satz + TempQry.FieldByName('GebuehNr').AsString + '; '
    else
    begin
     if TempQry.FieldByName('GebuehNr').AsString > 'then
        satz := Satz + TempQry.FieldByName('GebuehNr').AsString + ', ' + Suchwort + '; '
     else
        satz := Satz + Suchwort + '; '
    end;

    DiagnoseEdit.CPPosition := MaxInt;
    DiagnoseEdit.InputString(Satz);
    TempQry.Next;
  end;
  if TempQry.IsEmpty then
    DiagnoseEdit.AsString := PatientQry.FieldByName('PatDiagnose').AsString; //Abwärtskompatibilität
  TempQry.Close;
  DiagnoseEdit.SelectAll;
  DiagnoseEdit.CurrAttr.FontName := ProgOptions.Texteditor.FontName;



// DiagnoseEdit.CurrAttr.Size := ProgOptions.Texteditor.FontSize;
// if ProgOptions.Texteditor.Bold then
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsBold]
// else
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsBold];
// if ProgOptions.Texteditor.Italic then
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsItalic]
// else
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsItalic];
// if ProgOptions.Texteditor.Underline then
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style + [afsUnderline]
// else
// DiagnoseEdit.CurrAttr.Style := DiagnoseEdit.CurrAttr.Style - [afsUnderline];


    if pgcRechnungen.ActivePage = TabEinzel_Rechnungen then
    begin
      RechnungQry.Edit;
      RechnungQry.FieldByName('Diagnose').asString := DiagnoseEdit.AsString;
      RechnungQry.Post;
    end;
    if pgcRechnungen.ActivePage = TabSammelRechnungen then
    begin
      if PatientQry.FieldByName('PATIENTNR').Value = Patientnr then
      begin
        UpdateSammeldiagnoseQry.ParamByName('RECHNUNGNR').Value := RechnungQry.FieldByName('RECHNUNGNR').Value;
        UpdateSammeldiagnoseQry.ParamByName('PATIENTNR').Value := Patientnr;
        UpdateSammeldiagnoseQry.ParamByName('DIAGNOSE').AsString := DiagnoseEdit.AsString;
        UpdateSammeldiagnoseQry.ExecSQL;
      end
      else
      begin
        InsSammeldiagnose.ParamByName('SAMMELDIAGNOSENR').Value := dmMain.GetGeneratorWert('GEN_TBL_SAMMELDIAGNOSE');
        InsSammeldiagnose.ParamByName('RECHNUNGNR').Value := RechnungQry.FieldByName('RECHNUNGNR').Value;
        InsSammeldiagnose.ParamByName('PATIENTNR').Value := PatientQry.FieldByName('PATIENTNR').Value;
        InsSammeldiagnose.ParamByName('DIAGNOSE').AsString := DiagnoseEdit.AsString;
        InsSammeldiagnose.ExecSQL;

        Patientnr := PatientQry.FieldByName('PATIENTNR').Value;
      end;
    end;
end;
Walter Landwehr
Mfg

Walter
  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
 
#7

AW: Formatierter Text und String zusammenfügen

  Alt 18. Feb 2016, 12:15
Brechen wir das mal herunter:

Du hast mehrere RTF-Dokumente* und diese möchtest du in einem RTF-Dokument zusammenfassen, ohne das die Formatierungen der einzelnen Dokumente verloren gehen.

* Den noch zu formatierenden Teil sehe ich jetzt auch mal als RTF-Dokument an, bzw. ich lasse den Teil aus der Betrachtung heraus, denn das löst man dann separat.

Richtig soweit?
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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:15 Uhr.
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