Autor Beitrag
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Di 24.09.02 18:22 
Zuerst eine Unit.

ausblenden volle Höhe 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:
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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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



BeitragVerfasst: Di 24.09.02 19:38 
Hm. Interessante Lösung Sven. Aber was sagst du dazu:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: 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