Memo как узнать позиции табуляции

от admin

Программирование на Delphi

Пошлите в Memo сообщение EM_SETTABSTOPS. Например установим первую позицию табуляции на 20-й пиксел. Пример:

Компоненты и Классы — TMemo и TRichEdit

Memo со своими шрифтами

Memo со свойствами Row и Col

RichEdit замена текста

RichEdit поиск текста

TDBMemo в TDBCtrlGrid

В TRichEdit или TMemo при нажатии Enter позиционирование курсора в позицию как в предыдущей строке

Взят RTF отформатированный текст из TRichEdit

Вставка рисунка в TRxRichEdit

Вставка текста в TMemo в текущую позицию

Выделить строку в Memo

Выделить строку в TMemo при щелчке на ней

Выполнить обратный поиск строки в TRichEdit

Выравнивание текста в TRichEdit

Добавить цветную строку в TRichEdit

Добавление строк в Memo

Загрузка нескольких RTF файлов в RichEdit

Задать расстояние между строк для TRichEdit

Изменение величины табуляции в Memo

Изменить цвет выделения для TRichEdit

Импортирование файла в компонент Memo

Использовать SubScript или SuperScript в TRichEdit

Использовать различные стили подчеркивания для TRichEdit

Исправление загрузки RTF текста через поток

Как в Memo прокрутить текст

Как в компоненте TMemo перехватить нажатие Ctrl+V и вставить специальный текст не из буфера обмена

Как вставить содержимое файла в текущую позицию курсора в компоненте TMemo

Как вставить содержимое файла в текущую позицию курсора в компоненте TMemo 2

Как выделить в RichEdit 4 строки

Как запихать в Мемо больше текста, чем оно может вместить по умолчанию

Как изменить стиль шрифта RichEdit нажатиями соответствующих клавиш (например включить курсив по нажатию Ctrl+I)

Как нарисовать что-нибудь на TMemo

Как настроить табуляцию в компоненте TMemo

Как получить определённую часть текста из RichEdit

Как прокрутить TRichEdit в конец

Как сделать окошко подсказки в редакторе как Delphi по CTRL-J

Как сделать отступ в Memo

Как сделать так, чтобы в Memo переносилось не слово целиком, а только та часть слова, которая не помещается

Memo и RichEdit – многострочные окна редактирования

Свойство Font компонента Memo одинаковый формат (шрифт и его атрибуты) для всего текста. Отредактированный текст при копировании из окна Memo не будет содержать элементы форматирования. Или отредактированный текст скопированный, например, из Word с элементами форматирования, то при вставке в окно Memo, будет вставлен как текст и к нему применяться те стили, которые указаны в свойстве Font.

Свойства Memo

  • Lines типа TStrings – содержит текст окна и представляет из себя список строк. Через «Инспектор Объектов» можно задать начальный текст в Lines. Lines имеет ряд параметров:
    • Add или Append – добавляет текст в конец строки;
    • Clear – очистка Memo от всего текста.
    • ssNone – скрывает полосу прокрутки;
    • ssHorizontal – устанавливает горизонтальную прокрутку;
    • ssVertical – устанавливает вертикальную прокрутку;
    • ssBoth – устанавливает и горизонтальную и вертикальную.
    • SelStart – указывает индекс текста, на котором установлен указатель мыши.
    • CaretPos – отображает структуру:
      • X – содержит индекс символа перед курсором мыши;
      • Y – отображает индекс строки, где расположен курсор.

      Пример добавления текста в Memo

      RichEdit

      Компонент RichEdit – это удобное многострочное окно редактирования текста. Компонент RichEdit имеет большинство функций компонентов Memo и Edit. Так же есть наличие комбинации «горячих» клавиш. Окно редактирования RichEdit обладает множеством сообщений Windows, которые позволяют управлять текстом.

      • Color – устанавливает цвет текста.
      • Name – устанавливает имя шрифта.
      • Size – устанавливает размер.
      • Style – определяет стиль текста.

      С помощью диалога выбора шрифта FontDialog можно легко менять атрибуты текста в RichEdit.

      TMemo/ru

      TMemo tmemo.png является элементом управления с многострочным полем для редактирования текста. Данный компонент доступен на вкладке Standard палитры компонентов.

      Contents

      Использование

      Для использования элемента TMemo на форме вам необходимо просто выбрать его на вкладке Standard палитры компонентов и разместить на форме с помощью щелчка мыши. В данном текстовом поле вы можете редактировать многострочный текст во время выполнения программы.

      Например, если вы добавили элемент TMemo с именем Memo1 на форму с именем Form1, то для того чтобы присвоить значение типа String данному элементу, вы можете использовать такую инструкцию Memo1.Text := ‘Это однострочный текст’; .

      Также вы можете использовать текст из элемента с именем Memo1 в любом месте исходного кода с помощью следующей инструкции myString := Memo1.Text; .

      Кроме того можно присвоить многострочный текст элементу с именем Memo1 с помощью такой инструкции Memo1.Text:=’This’+LineEnding+’is’+LineEnding+’a’+LineEnding+’multiline’+LineEnding+’text’; .

      Присваивание строк из TStrings или TStringList

      В общем, для присваивания текста элементу TMemo используется класс TStringList или его родительский класс — TStrings. Это показано в следующем примере (данный код располагается в обработчике события кнопки с именем Button1, расположенной на форме с именем Form1; также на форме должен быть расположен элемент TMemo с именем Memo1):

      Непосредственное добавление строк

      Вы можете непосредственно добавлять строки в элемент TMemo, как показано в следующем примере:

      Чтение стоки

      Если вы хотите узнать, что содержится в определенной строке, вы можете непосредственно проверить это с помощью такой инструкции myString:=Memo1.Lines[Index]; . Обратите внимание, что индексы строк в TMemo.Lines начинаются с 0, т.е. первая строка будет иметь индекс 0: myString:=Memo1.Lines[0];

      Добавьте ещё одну кнопку с именем Button2 к предыдущему примеру для того, чтобы отобразить содержимое третьей строки, как показано в следующем примере:

      Выделенный текст

      Вы можете отметить часть текста в режиме выполнения программы с помощью левой кнопки мыши или удерживать клавишу [Shift] и выбрать текст с помощью мыши или стрелок на клавиатуре. Выделенный текст (String) можно отобразить с помощью следующей инструкции:

      Поиск текста

      В отличие от предыдущего примера вы также можете искать текст (String) в элементе TMemo и определять место, где он находится: Position:=Memo1.SelStart;

      В следующем примере показано, как вы можете искать текст в элементе TMemo:

      • Создайте новое приложение со следующими элементами: TEdit с именем Edit1, TMemo с именем Memo1 и две кнопки с именами Button1 и Button2.
      • Добавьте в раздел Uses строки LCLProc, strutils и LazUTF8.
      • В обработчике события OnClick кнопки Button1 заполните строки элемента Memo1 любым текстом, как в примере Непосредственное добавление строк.
      • В редакторе исходного кода добавьте следующую функцию (основана на этом примере [1] с German Lazarusforum):
      • Добавьте следующий код в обработчик события OnClick кнопки Button2:
      • Теперь вы можете заполнить текстом элемент Memo1 в режиме выполнения программы с помощью кнопки Button1, вставить текст, который нужно найти в элемент Edit1 и найти его с помощью кнопки Button2.

      Сохранение и загрузка текста

      Вы можете довольно легко сохранять и загружать содержимое в элемент TMemo, используя методы SaveToFile и LoadFromFile класса TStrings.

      Memo как узнать позиции табуляции

      procedure TForm1.Button1Click(Sender: TObject);
      var
      h : THandle;
      begin
      Application.ProcessMessages;
      DbGrid1.SetFocus;
      DbGrid1.EditorMode := true;
      Application.ProcessMessages;
      h:= Windows.GetFocus;
      SendMessage(h, EM_SETSEL, 2, 2);
      end;

      Ответ:
      Можно использовать методы Delphi SelStart() и SelectLength().

      Ответ:
      В примере перехватывается сообщение WM_SYSCOMMAND. Если это сообщение говорит о
      минимизации или максимизации формы — пищит динамик.

      type
      TForm1 = class(TForm)
      private

      procedure WMSysCommand(var Msg: TWMSysCommand);
      message WM_SYSCOMMAND;
      public

      end;

      var
      Form1: TForm1;

      procedure TForm1.WMSysCommand;
      begin
      if (Msg.CmdType = SC_MINIMIZE) or (Msg.CmdType = SC_MAXIMIZE) then
      MessageBeep(0)
      else
      inherited;
      end;

      Ответ:
      В примере показывается не автосоздаваемая (non auto-created) форма, но фокус ввода ей
      не передается.

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      Form2 := TForm2.Create(Application);
      Form2.Visible := FALSE;
      ShowWindow(Form2.Handle, SW_SHOWNA);
      end;

      Ответ:
      В примере TDriveComboBox не показывает дисководы, которые не готовы. (not ready).
      Учтите что на многих компьютерах будет ощутимая задержка при поверке plug&play
      флоппи дисковода.

      procedure TForm1.FormCreate(Sender: TObject);
      var
      i : integer;
      OldErrorMode : Word;
      OldDirectory : string;
      begin
      OldErrorMode := SetErrorMode(SEM_NOOPENFILEERRORBOX);
      GetDir(0, OldDirectory);
      i := 0;
      while i <= DriveComboBox1.Items.Count — 1 do begin
      <$I->
      ChDir(DriveComboBox1.Items[i][1] + ‘:\’);
      <$I+>
      if IoResult <> 0 then
      DriveComboBox1.Items.Delete(i)
      else
      inc(i);
      end;
      ChDir(OldDirectory);
      SetErrorMode(OldErrorMode);
      end;

      Ответ:
      Один из способов — создать пользовательское сообщение и использовать метод preform
      чтобы разослать его всем формам из массива Screen.Forms.

      const
      UM_MyGlobalMessage = WM_USER + 1;

      type
      TForm1 = class(TForm)
      Label1: TLabel;
      Button1: TButton;
      procedure FormShow(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      private

      procedure UMMyGlobalMessage(var AMessage: TMessage); message
      UM_MyGlobalMessage;
      public

      end;

      var
      Form1: TForm1;

      procedure TForm1.FormShow(Sender: TObject);
      begin
      Form2.Show;
      end;

      procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage);
      begin
      Label1.Left := AMessage.WParam;
      Label1.Top := AMessage.LParam;
      Form1.Caption := ‘Got It!’;
      end;

      procedure TForm1.Button1Click(Sender: TObject);
      var
      f: integer;
      begin
      for f := 0 to Screen.FormCount — 1 do
      Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42);
      end;

      const
      UM_MyGlobalMessage = WM_USER + 1;
      type
      TForm2 = class(TForm)
      Label1: TLabel;
      private

      procedure UMMyGlobalMessage(var AMessage: TMessage);
      message UM_MyGlobalMessage;
      public

      end;

      var
      Form2: TForm2;

      procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage);
      begin
      Label1.Left := AMessage.WParam;
      Label1.Top := AMessage.LParam;
      Form2.Caption := ‘Got It!’;
      end;

      Совет взят с диска "All4Delphi" 14.10.2001
      Следующий пример вызывает защищенный (protected) метод класса TDriveComboBox
      BuildList() для регеирации списка дисков. (использовая так наз. "class cracer")

      type
      TNewDriveComboBox = class(TDriveComboBox) //это наш "class cracer"
      end;

      procedure TForm1.Button1Click(Sender: TObject);
      var
      Drive : char;
      begin
      Drive := DriveComboBox1.Drive;
      TNewDriveComboBox(DriveComboBox1).BuildList;
      //вызываем защищенный метод родительского класса
      DriveComboBox1.Drive := Drive;

      Совет взят с диска "All4Delphi" 15.10.2001
      В примере показано как показать меню и выбрать в нем какой-то пункт, эмулируя нажатие "быстрой кдавиши" пункта меню. Если у Вашего пункта меню нет "быстрой клавиши" Вы можете посылать комбинации VK_MENU, VK_LEFT, VK_DOWN, и VK_RETURN, чтобы программно "путешествовать" по меню.
      Пример:

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      //Allow button to finish painting in response to the click
      Application.ProcessMessages;

      keybd_Event(VK_MENU, 0, 0, 0);

      keybd_Event(ord(‘F’), 0, 0, 0);

      keybd_Event(ord(‘F’), 0, KEYEVENTF_KEYUP, 0);

      keybd_Event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);

      keybd_Event(ord(‘S’), 0, 0, 0);

      keybd_Event(ord(‘S’), 0, KEYEVENTF_KEYUP, 0);
      end;

      Добавлено 15.10.2001
      Возможный вариант — присвоить ссылку на этот компонент свойству FocusControl TLabel’а. В примере используется невидимый Label для создания "быстрой" клавиши (Alt+M) компонента Memo. Чтобы использовать пример, разместите на форме компонет TMemo, Label и несколько других компонентов, которые могут принимать фокус ввода. Запустите программу, перевидите фокус ввода куда-нибудь вне Memo и нажмите Alt+M — фокус ввода вернется в Memo.
      Пример:

      procedure TForm1.FormCreate(Sender: TObject);
      begin
      Label1.Visible := false;
      Label1.Caption := ‘&M’;
      Label1.FocusControl := Memo1;
      end;

      Добавлено 18.10.2001
      Если добавить флаг csOpaque (непрозрачный) к свойству ControlStyle компонента
      — то фон компонента перерисовываться не будет.

      constructor TMyControl.Create;
      begin
      inherited;
      ControlStyle := ControlStyle + [csOpaque];
      end;

      Поместите в конструктор компонента код, устанавливающий размеры по умолчанию.
      Переопределите метод SetBounds и проверяйте в нем "componentstate". Если компонет
      находится режиме "design-time" (csDesigning in ComponentState) просто передавайте
      значения ширины и высоты (width и heights) компонента по умолчанию (в нашем
      примере 50) методу класса-предка.

      procedure TVu.SetBounds(ALeft : integer; ATop : integer; AWidth : integer;
      AHeight : integer);
      begin
      if csdesigning in componentstate then
      begin
      AWidth := 50;
      AHeight := 50;
      inherited; //вызываем унаследованный от предка метод
      end;
      end;

      Да. Можно уничтожать обьекты, расположенные не на текущей странице TNotebook или
      TTabbedNotebook. В примере вызывается защищенный (Protected) метод путем создания
      так называемый "class cracer’ов".

      type TMyTabbedNotebook = class(TTabbedNotebook); //это наш "class cracer"
      type TMyNotebook = class(TNotebook);

      procedure TForm1.TabbedNotebook1Change(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
      begin
      with TabbedNotebook1 do //вызываем защищенный метод родительского класса
      TMyTabbedNotebook(TWinControl(Pages.Objects[PageIndex])).DestroyHandle;
      end;

      procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
      begin
      with Notebook1 do //вызываем защищенный метод родительского класса
      TMyNotebook(TWinControl(Pages.Objects[PageIndex])).DestroyHandle;
      NoteBook1.PageIndex := NewTab;
      AllowChange := true
      end;

      TSelectableTree — наследник от TCustomTreeView, обладает возможностью множественного выбора ( свойство MultiSelect ).
      Соответственно дополнительные методы —

      Так же как в случае с TMemo, здесь можно использовать сообщения. Например, сообщение может быть отослано в момент создания формы:

      Или я бы сделал метод рисования этой таблицы, а данные хранил бы в отдельном stringList-е, там есть методы вставки, а вообще-то для этих целей предпочитаю DrawGrid: переопределяю метод onDrawCell, всё же объектная модель лучше и данные проще контролировать.

      Как вставить иконку (или bitmap) в TRichEdit, причем так, чтобы пользователь мог ее удалить нажатием клавиши Del (как это сделано в Microsoft Word)?

      Memo1.Perform(EM_UNDO, 0, 0);
      Для переключения enable/disable опции undo:

      Undo1.Enabled := Memo1.Perform(EM_CANUNDO, 0, 0)<> 0;

      ComboBox1.DroppedDown := True;

      Естественно, False закроет его.

      1. Создать форму.
      2. Поместить компоненты TComboBox и TListbox на форму.
      3. Изменить свойство Style у TComboBox на csOwnerDrawVariable и lbOwnerDrawVariable для TListBox. Owner-Draw TListBox или TComboBox позволяют показать и объекты (например, картинку) и строки одновременно. В данном примере мы добавляем и графический объект и строку.
      4. Создать 5 переменных типа TBitmap в разделе var модуля для формы.
      5. Создать обработчики для событий OnCreate, OnDraw, OnMeasureItem, OnClose.

      unit Ownerdrw;

      uses
      SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

      Читать:
      Файл z01 что это

Похожие статьи