Delphi World - Как сделать так, чтобы в Memo переносилось не слово целиком, а только та часть слова, которая не помещается
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как сделать так, чтобы в 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;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования