Как сделать так, чтобы в Memo переносилось не слово целиком, а только та часть слова, которая не помещается
Сначала нужно объявить две глобальных переменные:
OriginalWordBreakProc: pointer;
NewWordBreakProc: pointer;
|
Затем описываем в разделе implementation следующую процедуру:
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;
|
|