Project source
Form header (C++)
Form source (C++)
Form source (DFM)
Project source: CPPRichEditDrag.cpp |
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("CPPRichEditDrag.res"); USEFORM("fmCPPRichEditDrag.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //---------------------------------------------------------------------------Back to top |
Form header: fmCPPRichEditDrag.h |
//--------------------------------------------------------------------------- #ifndef fmCPPRichEditDragH #define fmCPPRichEditDragH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "uoole.hpp" #include <ComCtrls.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TPanel *Panel1; TRichEdit *RichEdit1; TUOTextTarget *UOTextTarget1; void __fastcall UOTextTarget1Drop(TObject *Sender, TWinControl *Acceptor, const AnsiString dropText, int X, int Y); void __fastcall UOTextTarget1DragOver(TObject *Sender, TDropEffect effect, int X, int Y); private: // User declarations int __fastcall CharPosInRichEdit(TRichEdit* aRichEdit, int X, int Y); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifBack to top |
Form source: fmRichEditDrag.cpp |
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "fmCPPRichEditDrag.h" #include "uoutil.hpp" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "uoole" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::UOTextTarget1Drop(TObject *Sender, TWinControl *Acceptor, const AnsiString dropText, int X, int Y) { // Someone has dropped either text or rich text on us. If it's rich text, // make sure it shows up with all of its formatting intact. // AddContentToRichEdit is in uoutil. TUOTextTarget* uott; uott = (TUOTextTarget*) Sender; AddContentToRichEdit(dropText, (TRichEdit*) Acceptor, (uott->DroppedTextFormat == dtfRichText), TRUE); } //--------------------------------------------------------------------------- int __fastcall TForm1::CharPosInRichEdit(TRichEdit* aRichEdit, int X, int Y) // Get the current character position (0-based) in the TRichEdit aRichEdit // corresponding to the client coordinates X, Y. Returns -1 if there // is no corresponding character. // ****THERE IS A BUG IN THE MICROSOFT WIN32 HELP**** regarding this - the // parameters are passed differently from the EM_CHARFROMPOS of an edit (TMemo, // TEdit) control. Same goes for EM_POSFROMCHAR. See MS Knowledgebase // article PSS ID Number: Q137805 See PixelPosInRichEdit below for the inverse // function. { TPoint aPt; aPt.x = X; aPt.y = Y; return aRichEdit->Perform(EM_CHARFROMPOS, 0, (LPARAM) &aPt); } //--------------------------------------------------------------------------- void __fastcall TForm1::UOTextTarget1DragOver(TObject *Sender, TDropEffect effect, int X, int Y) // Handle keeping track of the caret location during dragging { int aCharPos; // Find the current character position. aCharPos = CharPosInRichEdit(RichEdit1, X, Y); // If it makes sense, then put the caret there. if (aCharPos != -1) { RichEdit1->SelStart = aCharPos; // Set the selection start RichEdit1->SelLength = 0; // No actual selection RichEdit1->SetFocus(); // Focus it, to see the caret } } //---------------------------------------------------------------------------Back to top |
Form source: fmCPPRichEditDrag.dfm |
object Form1: TForm1 Left = 233 Top = 225 Width = 453 Height = 282 Caption = 'Drag Rich Text to or from this TRichEdit control' Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] PixelsPerInch = 96 TextHeight = 13 object Panel1: TPanel Left = 0 Top = 0 Width = 445 Height = 255 Align = alClient BevelOuter = bvNone BorderWidth = 3 TabOrder = 0 object RichEdit1: TRichEdit Left = 3 Top = 3 Width = 439 Height = 249 Align = alClient TabOrder = 0 end end object UOTextTarget1: TUOTextTarget AcceptorControl = RichEdit1 AcceptTextFormats = [dtfRichText, dtfText] OnDragOver = UOTextTarget1DragOver OnDrop = UOTextTarget1Drop Left = 232 Top = 64 end endBack to top |