нього символу для пошуку (cpMax: = cpMin + Length). Потім встановлюється прапор пошуку. Далі встановлюється посилання на Pchar рядок-зразок. І, нарешті, надсилається повідомлення EM_FINDTEXT самому собі .. Add додає рядок у кінець тексту
Клас TRichEdit успадковує метод Add від класу TStrings, тому що саме такий тип має властивість Lines. З файлу Source VCL classes.pas:
function TStrings.Add (const S: string): Integer;: = GetCount; (Result, S);
end;
запитувані кількість рядків у тексті і викликаємо метод Insert для вставки рядка в кінець тексту. Обидві використовувані функції описані там же, як:
= class (TPersistent)
protectedGetCount: Integer; virtual; abstract; Insert (Index: Integer; const S: string); virtual; abstract;
Тобто, абстрактні і віртуальні, а значить, в обов'язковому порядку повинні бути перевизначені в нащадках. Таким нащадком є ​​клас TRichEditStrings, конструктор якого і викликається для створення властивості Lines в конструкторі TCustomRichEdit, найближчому батьку TRichEdit. p align="justify"> З файлу Source VCL comctrls.pas = class (TStrings) GetCount: Integer; override; Insert (Index: Integer; const S: string); override; TRichEditStrings.GetCount: Integer;: = SendMessage (RichEdit.Handle, EM_GETLINECOUNT, 0, 0); SendMessage (RichEdit.Handle, EM_LINELENGTH, SendMessage (RichEdit.Handle, EM_LINEINDEX, Result - 1, 0), 0) = 0 then Dec (Result);
end;
запитувані кількість рядків у тексті і зберігаємо його у службовій змінної Result. Якщо довжина останнього рядка дорівнює нулю (тобто порожній) віднімаємо її з результату (Result). br/>
procedure TRichEditStrings.Insert (Index: Integer; const S: string);: Integer;: TCharRange;: PChar;: string; Index> = 0 then.cpMin: = SendMessage (RichEdit.Handle , EM_LINEINDEX, Index, 0); Selection.cpMin> = 0 then Fmt: = '% s' # 13 # 10begin.cpMin: = SendMessage (RichEdit.Handle, EM_LINEINDEX, Index - 1, 0); Selection.cpMin < ; 0 then Exit;: = SendMessage (RichEdit.Handle, EM_LINELENGTH, Selection.cpMin, 0), L = 0 then Exit; (Selection.cpMin, L);: = # 13 # 10 '% s';;. cpMax : = Selection.cpMin; (RichEdit.Handle, EM_EXSETSEL, 0, Longint (@ Selection));: = Format (Fmt, [S]); (RichEdit.Handle, EM_REPLACESEL, 0, LongInt (PChar (Str))) ; RichEdit.SelStart <> (Selection.cpMax + Length (Str)) thenEOutOfResources.Create (sRichEditInsertError);;
end;
Використовуючи номер рядка, перед якою ми збираємося провести вставку, визначаємо номер символу, з якого починається рядок, і зберігаємо його в змінної Selection.cpMin. Якщо номер символу не негативний, то це означає, що рядок з таким номером існує і в кінець додається рядка необхідно включити ознака к...