скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Как сделать так, чтобы в 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;






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook