|
...make a plain text editor |
Top Previous Next |
|
How to make a plain text editor based on TRichViewEdit
procedure TMyForm.MyRichViewEditPaste(Sender: TCustomRichViewEdit; var DoDefault: Boolean); var s: String; begin if Clipboard.HasFormat(CF_TEXT) then begin s := Clipboard.AsText; Sender.InsertText(s, False); end; DoDefault := False; end; How to make ONE LINE plain text editor
uses Clipbrd, ActiveX; // Returning one line string made from s. // This function replaces all line breaks with ' | '. // You can change this function, for example to return the first line function MakeOneLineString(const s: String): String; var p: Integer; begin Result := AdjustLineBreaks(s); while True do begin p := Pos(#13#10, Result); if p=0 then break; Delete(Result, p, 2); Insert(' | ', Result, p); end; end;
procedure TMyForm.MyRichViewEditOleDrop(Sender: TCustomRichView; const DataObject: IDataObject; Shift: TShiftState; X, Y: Integer; PossibleDropEffects: TRVOleDropEffects; var DropEffect: TRVOleDropEffect; var DoDefault: Boolean); var FmtEtc: TFormatEtc; StgMedium: TStgMedium; ptr: Pointer; s: String; p: Integer; begin DoDefault := False;
FillChar(StgMedium, sizeof(StgMedium), 0); FillChar(FmtEtc, sizeof(FmtEtc), 0); FmtEtc.cfFormat := CF_TEXT; FmtEtc.dwAspect := DVASPECT_CONTENT; FmtEtc.lindex := -1; FmtEtc.tymed := TYMED_HGLOBAL; if DataObject.GetData(FmtEtc, StgMedium)<>S_OK then exit; if StgMedium.tymed=TYMED_HGLOBAL then begin ptr := GlobalLock(StgMedium.HGlobal); try SetLength(s, GlobalSize(StgMedium.HGlobal)); Move(ptr^, PChar(s)^, Length(s)); finally GlobalUnlock(StgMedium.HGlobal); end; p := Pos(#0, s); if p>0 then s := Copy(s, 1, p-1); MyRichViewEdit.InsertText(MakeOneLineString(s), False); end; ReleaseStgMedium(StgMedium); end;
procedure TMyForm.MyRichViewEditPaste(Sender: TCustomRichViewEdit; var DoDefault: Boolean); var s: String; begin if Clipboard.HasFormat(CF_TEXT) then begin s := Clipboard.AsText; Sender.InsertText(MakeOneLineString(s), False); end; DoDefault := False; end; |