Autor |
Beitrag |
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 24.09.02 18:16
Hallo
Wie kann ich bestimmten Text an Cursorposition einfügen (RichEdit)?
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Sven
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: Di 24.09.02 18:22
Zuerst eine Unit.
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: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73:
| unit DirectRTF;
interface
uses Windows, Types, Classes, RichEdit, RxRichEd;
// Stream Callback function type TEditStreamCallBack = function(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall;
TEditStream = record dwCookie: Longint; dwError: Longint; pfnCallback: TEditStreamCallBack; end;
// RichEdit Type type TMyRichEdit = TRxRichEdit;
function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream);
implementation
// EditStreamInCallback callback function function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte; cb: Longint; var pcb: Longint): DWORD; stdcall; // by P. Below var theStream: TStream; dataAvail: LongInt; begin theStream := TStream(dwCookie); with theStream do begin dataAvail := Size - Position; Result := 0; if dataAvail <= cb then begin pcb := read(pbBuff^, dataAvail); if pcb <> dataAvail then Result := UINT(E_FAIL); end else begin pcb := read(pbBuff^, cb); if pcb <> cb then Result := UINT(E_FAIL); end; end; end;
// Insert Stream into RichEdit procedure PutRTFSelection(RichEdit: TMyRichEdit; SourceStream: TStream); // by P. Below var EditStream: TEditStream; begin with EditStream do begin dwCookie := Longint(SourceStream); dwError := 0; pfnCallback := EditStreamInCallBack; end; RichEdit.Perform(EM_STREAMIN, SF_RTF or SFF_SELECTION, Longint(@EditStream)); end;
end. |
In dem folgenden Codefragment füge ich einen Seitenumbruch ein. Funktioniert aber auch mit beliebigen anderen Text
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TMainForm.ManuellerWechsel1Click(Sender: TObject); var Child : TForm; SS : TStringStream; Pt : integer; begin Child := MainForm.ActiveMDIChild; with (Child as TMDIChild) do begin if Editor.SelStart < Length(Editor.Text) then SS := TStringStream.Create('{\rtf1\par\page}') else SS := TStringStream.Create('{\rtf1\par\page\par}'); end; try //Jetzt wird der RTF-Text eingefügt PutRTFSelection((Child as TMDIChild).Editor, SS); finally SS.Free end; Pt := (Child as TMDIChild).Editor.SelStart; PageBreaks(true); (Child as TMDIChild).Editor.SelStart := Pt+Length(PAGETEXT) end; |
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
Chatfix 
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 24.09.02 18:26
Ich habe nur ein "normales" RichEdit woher bekomme ich ein RichEdit deiner sorte und was bietet es für vorteile gegenüber dem normalen RcihEdit und wo finde ich es?
*grins* Danke schonmal im Vorraus
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 24.09.02 19:38
Hm. Interessante Lösung Sven. Aber was sagst du dazu:
Quelltext 1:
| RichEdit1.SelText := 'bla'; |
Wenn kein Text markiert ist, wird der Text an der Position des Cursors eingefügt, ansonsten wird der markierte Text ersetzt.
|
|
Chatfix 
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 24.09.02 19:46
das is genau das was ich suche DANKE!!!!
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 24.09.02 19:52
Das habe ich mir schon gedacht, dass Sven's Lösung nicht die Lösung für dein Problem ist.
|
|
Sven
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: Mi 25.09.02 07:44
Ok, ok,
hab da wohl etwas mißverstanden. Mit meiner Lösung ist es aber möglich direkt RTF-Text (mit den Token), wie man am Beispiel sieht, einzufügen. Vielleicht kann das ja jemand gebrauchen.
Gruß Sven
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
|