Вот, держи исходник. Выделяешь текст, а потом нажимаешь на кнопку (она сразу под текстом, ее не видно, но она существует ) Извини за не аккуратность, мне завтра рано вставать, думаю ты разберешься 
Код | program SelectTextInRichEdit ;
uses QDialogs, Windows, SysUtils, Classes, Controls, Forms, Dialogs, Messages, Variants, Graphics, Buttons, StdCtrls, ComCtrls, ImgList, RichEdit;
const RichId = 10;
var wc : TWndClassEx; MainWnd, RichWnd : HWND; Mesg : TMsg; hRichDll: HINST; CharFormat: TCharFormat; Button1:HWND;
function WindowProc(wnd:HWND; Msg : Integer; wParam:wParam; lParam:lParam):lResult; stdcall; begin case msg of WM_DESTROY: begin PostQuitMessage(0); Exit; Result:=0; end; WM_SIZE: begin MoveWindow(RichWnd, 0, 0, LoWord(lParam), HiWord(lParam), False); Result:=DefWindowProc(wnd,msg,wparam,lparam); end; WM_ACTIVATE: begin Result:=DefWindowProc(wnd,msg,wparam,lparam); SetFocus(RichWnd); end;
WM_COMMAND: begin
//********************** // òóò ìû è ìåíÿåì öâåò //********************* if LoWord( wParam ) = 0 then begin
LockWindowUpdate(RichWnd);
SendMessage(RichWnd,EM_GetCharFormat,Integer(true),longint(@CharFormat)); CharFormat.cbSize :=sizeof(charformat); CharFormat.dwMask :=CFM_Color; CharFormat.crTextColor :=clRed; SendMessage(RichWnd,em_setcharformat,SCF_WORD or SCF_SELECTION,longint(@Charformat)); SendMessage(RichWnd,em_exsetsel,0,longint(@Charformat)); SendMessage(RichWnd,em_hideselection,0,0); LockWindowUpdate(0); end; end;
else Result:=DefWindowProc(wnd,msg,wparam,lparam); end;
End;
var R: tRect; begin hRichDll := LoadLibrary('RICHED20.DLL'); if hRichDll = 0 then exit; try with wc do begin cbSize := sizeof(wc); style := cs_hredraw or cs_vredraw; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := HInstance; hIcon := LoadIcon(0,idi_application); hCursor := LoadCursor(0,idc_arrow); hbrBackground := COLOR_BTNFACE+1; lpszMenuName := nil; lpszClassName := 'WinMin : Main'; end;
RegisterClassEx(wc); MainWnd := CreateWindowEx (0,'WinMin : Main','Win Min', WS_OVERLAPPEDWINDOW,500,100,400,100,0,0,Hinstance,nil); GetClientRect(MainWnd, R);
Button1 := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Button1', WS_VISIBLE or WS_CHILD, 10, 20, 90, 40, MainWnd, 0, hInstance, nil );
RichWnd := CreateWindowEx (WS_EX_STATICEDGE,'RichEdit20W','idjkjhfdhsf dhfkdh kdsh fkdsh fkdsfd', WS_VISIBLE or WS_CHILD, 100, 100,100, 100,MainWnd,RichID,Hinstance,nil);
ShowWindow(MainWnd,SW_NORMAL); ShowWindow(Button1,SW_NORMAL); SetFocus(Button1);
//******************** //if (Mesg.message = WM_CHAR) and (Mesg.hwnd = REWnd) then begin
//end; //******************** while GetMessage(Mesg,0,0,0) do begin
TranslateMessage(Mesg); DispatchMessage(Mesg); end;
finally FreeLibrary(hRichDll); end; end.
| |