Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 09.08.13 13:49 
Hallo liebe Delphi-Helfer :)

ich habe folgende Aufgabe bekommen:

Bei uns gibt es ein Datenbankfeld Vorspanntext, als Blob definiert und als TMemoField verwendet.
Wenn ein Vorspanntext ausgewählt wurde, soll geprüft werden:

Ist der Text leer, wird der gewählte Text einfach rein geschrieben
Ist aber schon etwas im Text drin, soll der ausgewählte Text angehangen werden.

In den Foren findet sich dazu nicht wirklich etwas was mir hilft das zu lösen :(

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Case MessageDlg('Möchten Sie den Vorspanntext...' + #10 +
       'Ja: hinzufügen.' + #10 +
       'Nein: ersetzen.', mtInformation, [mbYes, mbNo, mbAbort], 0of
  mrYes: _TMemos_Kombinieren(TMemoField(IBQAuftrag.FieldByName('VORSPANNTEXT')), 
                             TMemoField(IBQTextbaustein.FieldByName('VORSPANNTEXT1')), 
                             TMemoField(IBQTextbaustein.FieldByName('VORSPANNTEXT2')));
  mrNo: TMemoField(IBQAuftrag.FieldByName('VORSPANNTEXT')) := IBQTextbaustein.FieldByName('VORSPANNTEXT1').Value;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm._TMemos_Kombinieren(ZielMemo, Memo1, Memo2 : TMemoField);
var
  sRE1, sRE2 : TDBRichEdit;
begin
  sRE1 := TDBRichEdit.Create(Self);
  sRE1.Parent:= TWinControl(ZielMemo.Owner);
  sRE1.DataSource := Memo1.DataSet.DataSource;
  sRE1.DataField := Memo1.FieldName;

  sRE2 := TDBRichEdit.Create(Self);
  sRE2.Parent:= TWinControl(ZielMemo.Owner);
  sRE2.DataSource := Memo2.DataSet.DataSource;
  sRE2.DataField := Memo2.FieldName;

  ZielMemo.Text := sRE1.Text + sRE2.Text;
end;


Wollte das mit DBRichEdits machen, aber entweder bekomme ich ein leeres Feld zurück, oder nur den 1. Vorspann aber nicht dazu den 2.

Weiss jemand Rat, oder sogar eine andere Lösung?

Ich soll das heute eigendlich noch fertig kriegen :(

MfG Jaki
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 09.08.13 14:29 
Abgesehen davon, dass die Auswahl mit Ja oder Nein sehr abenteuerlich aussieht (wie wäre es mit CreateMessageDialog?):
Was siehst du denn im Debugger? Was ist an der Stelle der Zuweisung sRE1.Text, was sRE1.Text, was steht danach in ZielMemo.Text, ...?
Wird der neue Inhalt denn auch gepostet?
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 09.08.13 15:07 
meine RE's sind beide leer :-/ obwohl etwas in den Feldern drin steht...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 09.08.13 15:44 
Dann nimm doch normale RichEdits und pack den Feldinhalt manuell herein. Ist denn zumindest der Feldinhalt in Memo1.AsString im Debugger drin?
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 09.08.13 16:02 
Den Fehler mit den leeren RE's habe ich gefunden, jetzt bekomme ich auch beide Texte in einem Feld,

aber ohne Formatierung :(

diese brauche ich aber leider auch
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 09.08.13 16:23 
Dann musst du die Daten in einen Stream, z.B. einen TStringStream, speichern, sprich RichEdit.Lines.SaveToStream...
Anders bekommst du die RTF-Formatierung nicht mit.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.08.13 21:03 
Du suchst genau das hier!

Für diesen Beitrag haben gedankt: Jakane
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 11.08.13 07:18 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dann musst du die Daten in einen Stream, z.B. einen TStringStream, speichern, sprich RichEdit.Lines.SaveToStream...
Anders bekommst du die RTF-Formatierung nicht mit.

Lines.LoadFromStream kann er aber nicht einsetzen, wenn er den Text des Quell-RTF an den des Ziel-RTF anhängen will :roll:
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 09:59 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Du suchst genau das hier!


Die funktion ist geil und funktioniert, aber nur auf RichEdit.

Ich schaff es zwar, den Text mit Formatierung in die RichEdits zu bekommen, aber ich krieg den Inhalt des RE nicht mit Formatierung in das Memo zurück.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 12.08.13 10:02 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Du suchst genau das hier!


Die funktion ist geil und funktioniert, aber nur auf RichEdit.

Ich schaff es zwar, den Text mit Formatierung in die RichEdits zu bekommen, aber ich krieg den Inhalt des RE nicht mit Formatierung in das Memo zurück.


TMemo verfügt nicht über Formatierungseigenschaften. Du kannst zwar das Property Font des Memos einstellen, doch gelten diese Einstellungen dann für den gesamten Memo-Inhalt. Mit anderen Worten: In einem TMemo kannst du nicht verschiedene Font-Parameter einsetzen, es ist nicht für Schrift-Formatierungen vorgesehen, denn dafür gibt es TRichEdit.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 11:02 
Dieses Datenbankfeld kann aber sowohl Formatieren als auch Formatiert anzeigen.

Ich bekomme bei RichEdit.Text aber eben nur den Text und nicht die Formatierung zurück :(
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 12.08.13 11:05 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Dieses Datenbankfeld kann aber sowohl Formatieren als auch Formatiert anzeigen.

Ich bekomme bei RichEdit.Text aber eben nur den Text und nicht die Formatierung zurück :(

Ein Datenbankfeld kann nicht "anzeigen". Mit anderen Worten: Der Begriff "Datenbankfeld" steht nicht für irgend eine datensensitive Komponente, die den Inhalt von Datenbankfeldern anzeigt.

Um welche Komponente handelt es sich denn konkret?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.08.13 11:08 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Ich bekomme bei RichEdit.Text aber eben nur den Text und nicht die Formatierung zurück :(
Wie schon geschrieben... (und wie auch in dem von user profile iconPerlsau genannten Beispiel benutzt)
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dann musst du die Daten in einen Stream, z.B. einen TStringStream, speichern, sprich RichEdit.Lines.SaveToStream...
Anders bekommst du die RTF-Formatierung nicht mit.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 11:17 
Fehlermeldung: "Das Speichern des Streams ist misslungen"

Kenn mich mit Stream leider gar nicht aus :(

ausblenden Delphi-Quelltext
1:
2:
3:
 Stream := TStream.Create;
 sRE1.Lines.SaveToStream(Stream);
 qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream);
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 11:42 
ausblenden Delphi-Quelltext
1:
2:
3:
 Stream := qry_AufStamm.CreateBlobStream(qry_AufStammAUFBESTVORSPANN, bmReadWrite);
 sRE1.Lines.SaveToStream(Stream);
 qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream);


Das macht mein Feld komplett leer :(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.08.13 11:43 
Wie geschrieben, nimm einen TStringStream. Dann kannst du dessen Eingeschaft DataString nehmen und hast den RTF-Text oder du kannst den als Stream weiterverwenden.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 12.08.13 11:47 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
 Stream := qry_AufStamm.CreateBlobStream(qry_AufStammAUFBESTVORSPANN, bmReadWrite);
 sRE1.Lines.SaveToStream(Stream);
 qry_AufStammAUFBESTVORSPANN.LoadFromStream(Stream);

Das macht mein Feld komplett leer :(

Kann ich davon ausgehen, daß sRE1 vom Typ TMemo ist? Dann ist sRE1 vermutlich leer. Wieso verwendest du nicht TDBRichEdit für beides? Dann mußt du vor dem Einfügen ins Ziel-RichEdit nur dein Dataset auf Edit setzen und nach dem Reinkopieren posten.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 11:50 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie geschrieben, nimm einen TStringStream. Dann kannst du dessen Eingeschaft DataString nehmen und hast den RTF-Text oder du kannst den als Stream weiterverwenden.


Kannst du mir nicht ein Beispielcode geben.
Ich habe keine Ahnung von Streams (GAR NICHTS)

Ich probiere blind irgendwelche Codeteile aus und krieg entweder Fehlermeldungen oder leer zurück...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.08.13 12:25 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  Stream: TStringStream;

Stream := TStringStream.Create('');
try
  sRE1.Lines.SaveToStream(Stream);
  ShowMessage(Stream.DataString);
finally
  Stream.Free;
end;

Für diesen Beitrag haben gedankt: Jakane
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 12.08.13 12:41 
danke

funktioniert endlich