Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как создать нестандартную процедуру разбиения слов при переносах для TEdit, TMemo или TRichEdit?

01.01.2007

В следующем примере создается процедура разбиения слов при переносах для TMemo. Заметьте, что реализованная процедура просто всегда разрешает перенос. Для дополнительной информации см.таже документацию к сообщению EM_SETWORDBREAKPROC.

              var 
               
OriginalWordBreakProc : pointer;
               
NewWordBreakProc : pointer;
 
             
function MyWordBreakProc(LPTSTR  : pchar;
                                      ichCurrent
: integer;
                                      cch
: integer;
                                      code  
: integer) : integer
               
{$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}
             
begin
               result
:=  0;
             
end;
 
             procedure TForm1
.FormCreate(Sender: TObject);
             
begin
               
OriginalWordBreakProc := Pointer(
                 
SendMessage(Memo1.Handle,
                             EM_GETWORDBREAKPROC
,
                             
0,
                             
0));
             
{$IFDEF WIN32}
               
NewWordBreakProc := @MyWordBreakProc;
             
{$ELSE}
               
NewWordBreakProc := MakeProcInstance(@MyWordBreakProc,
                                                     hInstance
);
             
{$ENDIF}
               
SendMessage(Memo1.Handle,
                           EM_SETWORDBREAKPROC
,
                           
0,
                           longint
(NewWordBreakProc));
 
             
end;
 
             procedure TForm1
.FormDestroy(Sender: TObject);
             
begin
               
SendMessage(Memo1.Handle,
                           EM_SETWORDBREAKPROC
,
                           
0,
                           longint
(@OriginalWordBreakProc));
             
{$IFNDEF WIN32}
               
FreeProcInstance(NewWordBreakProc);
             
{$ENDIF}
             
end;