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



BeitragVerfasst: Mi 23.05.12 09:27 
Hallo liebe Delphi-Helfer :)

Für eines meiner Programme benötige ich ein RichEdit, dem erst wärend des Programmlaufs die Daten gegeben werden,
weil erst dann der Ursprung der Daten bekannt ist.
Ich habe schon einiges versucht, bekomme aber immer Fehlermeldungen wenn er das DataField zuweisen soll.

Die Funktion muss nicht so bleiben, das RichEdit muss nur zwingend die Daten selbst ziehen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function TFuP_R._Funktion(Query: TIBQuery; Datenfeld: String): String;
var
  RichEdit : TDBRichEdit;
  DataSource : TDataSource;
begin
  DataSource:= TDataSource.Create(Self);
  DataSource.DataSet:= Query;
  RichEdit:= TDBRichEdit.Create(Self);
  RichEdit.DataSource:= DataSource;
  ShowMessage('1');
  RichEdit.DataField:= ?;
  ShowMessage('2');
  Result:= RichEdit.Text;
end;

Hoffe jemand hat eine Idee :)

Danke im voraus.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Sybok Factor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50
Erhaltene Danke: 5

Win XP, Win Vista
Delphi 2010 Professional
BeitragVerfasst: Mi 23.05.12 09:49 
Also wenn du eine Delphi Version > Delphi 2010 hast, dann ist DataField als WideString definiert. Daher kann das so nicht funktionieren.
Wenn du Richedit tatsächlich zur Runtime erzeugt, musst du es dann nicht noch irgendwie in der Größe einrichten?

_________________
Jetzte michse verstehen dein Problem.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mi 23.05.12 10:00 
user profile iconSybok Factor hat folgendes geschrieben Zum zitierten Posting springen:
Also wenn du eine Delphi Version > Delphi 2010 hast, dann ist DataField als WideString definiert. Daher kann das so nicht funktionieren.
Wenn du Richedit tatsächlich zur Runtime erzeugt, musst du es dann nicht noch irgendwie in der Größe einrichten?


Ich habe Delphi 5.
Wie in der Größe einrichten?
Wenn ich ein RichEdit auf mein Formular packe und DataSource und DataField manuell zuweise klappt alles.
Mehr braucht er nicht um dann zu tun was er soll.
Aber ich will nicht immer ein RE auf meinem Formular haben.
Sybok Factor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50
Erhaltene Danke: 5

Win XP, Win Vista
Delphi 2010 Professional
BeitragVerfasst: Mi 23.05.12 11:57 
Falls das nachfolgende nicht hilft, dann poste bitte die genaue Fehlermeldung.

1. Größe einrichten:
Damit meinte ich, dass du nach dem Erzeugen des RE doch ein Platzierung vornehmen musst, oder nicht?
ausblenden Delphi-Quelltext
1:
2:
3:
RichEdit.Left := 8;
ReichEdit.Top := 86;
...


2. Fehler:
Was mir noch einfällt:
Kann es sein, dass der Fehler durch query hervorgerufen wird und nicht durch DataField?
Ansonsten versuche das:
ausblenden Delphi-Quelltext
1:
2:
3:
If query.active then query.Close;
RichEdit.DataField := Datenfeld;
query.open;


Sonst s.o.

_________________
Jetzte michse verstehen dein Problem.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Do 24.05.12 07:28 
Ich habe beides ausprobiert, bekomme den Fehler aber immernoch :(

"Im Projekt xxx.exe ist eine Exception der Klasse EInvalidOperation aufgetreten. Meldung: 'Element '' hat kein übergeordnetes Fenster'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Sybok Factor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50
Erhaltene Danke: 5

Win XP, Win Vista
Delphi 2010 Professional
BeitragVerfasst: Do 24.05.12 08:17 
Deine Fehlermeldung hat ü b e r h a u p t nichts mit der Datenanbindung zu tun! Beim nächsten Mal bitte gleich die Fehlermeldung mitliefern.
Du bekommst die Fehlermeldung weil eine der von dir zur Laufzeit erzeugten Komponenten keinen Parent (oder Owner) zugewiesen bekommt. Vermutlich ist es das Richedit.
Abhilfe sollte sein:
ausblenden Delphi-Quelltext
1:
RichEdit.Parent := Self;					


Self ggf. gegen das Control ersetzen, auf dem RichEdit abgelegt werden soll.

_________________
Jetzte michse verstehen dein Problem.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 24.05.12 09:09 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich will nicht immer ein RE auf meinem Formular haben.

Ähm, dann kann man auch die Eigenschaft Visible auf false setzen.

Alerdings frage ich mich, warum du überhaupt ein TDBRichEdit benötigst. Deine Funktion liefert doch nur den String zurück. Kannst du nicht einfach den String direkt aus dem Datenfeld lesen?
ausblenden Delphi-Quelltext
1:
DeineVariable := DeinQuery.FieldByName('DeinDatenfeld').AsString;					
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 25.05.12 14:50 
user profile iconSybok Factor hat folgendes geschrieben Zum zitierten Posting springen:
Deine Fehlermeldung hat ü b e r h a u p t nichts mit der Datenanbindung zu tun! Beim nächsten Mal bitte gleich die Fehlermeldung mitliefern.
Du bekommst die Fehlermeldung weil eine der von dir zur Laufzeit erzeugten Komponenten keinen Parent (oder Owner) zugewiesen bekommt. Vermutlich ist es das Richedit.
Abhilfe sollte sein:
ausblenden Delphi-Quelltext
1:
RichEdit.Parent := Self;					


Self ggf. gegen das Control ersetzen, auf dem RichEdit abgelegt werden soll.


Auf die Idee kam ich schon selbst, aber das hilft auch nicht. Weder Self noch der Name des Formulars.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich will nicht immer ein RE auf meinem Formular haben.

Ähm, dann kann man auch die Eigenschaft Visible auf false setzen.

Alerdings frage ich mich, warum du überhaupt ein TDBRichEdit benötigst. Deine Funktion liefert doch nur den String zurück. Kannst du nicht einfach den String direkt aus dem Datenfeld lesen?
ausblenden Delphi-Quelltext
1:
DeineVariable := DeinQuery.FieldByName('DeinDatenfeld').AsString;					


Wenn ich es auf Visible:= False setzte ist das RE trotzdem auf dem Formular auch wenn ich es nicht sehe.
Das mit dem String ist zwar richtig, aber das RE entfernt dabei die RTF Formatierung, die manche Datenbankfelder haben.

Und eine wirklich effektive und sichere Möglichkeit die RTF Formatierung zu entfernen habe ich nicht gefunden, ausser das Arbeiten für RE.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 25.05.12 15:48 
ich würde es so umsetzen ....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
Function GetRichEditFieldAsString(f:TField):String;
var
 re:TrichEdit;
 ms:TMemoryStream;
begin
   if f is TBlobField then
      begin
       re := Trichedit.Create(nil);
       re.Visible := False;
       re.Parent := Application.MainForm;
       ms:=TMemoryStream.Create;
       try
         TBlobField(f).SaveToStream(ms);
         ms.Position := 0;
         re.Lines.LoadFromStream(ms);
         Result := re.Lines.Text;
       finally
         re.Free;
         ms.Free;
       end;
      end;
end;


procedure TForm5.Button1Click(Sender: TObject);

begin
   Showmessage(GetRichEditFieldAsString(Adodataset1.FieldByName('Einleitung')));
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

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



BeitragVerfasst: Di 29.05.12 07:52 
Funktioniert, danke :)