Тонкости работы с TMemo Тонкости работы с ListBox
Как получить горизонтальную прокрутку (scrollbar) в ListBox? |
*
| *
|
| |
Так же как в случае с TMemo, здесь можно использовать сообщения. Например,
сообщение может быть отослано в момент создания формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Perform(LB_SETHORIZONTALEXTENT, 1000, Longint(0));
end;
Второй параметр в вызове - ширина прокрутки в точках.
Поиск строки в ListBox |
*
| *
|
| |
Есть функция API Windows, позволяющая искать строку в ListBox с указанной
позиции.
Например, поиск строки, что начинается с '1.' От текущей позиции курсора в
ListBox. Т.о., нажимая на кнопку Button1, будут перебраны все строки,
начинающиеся на '1.'
procedure TForm1.Button1Click(Sender: TObject);
var S : string;
begin
S:='1.';
with ListBox1 do
ItemIndex := Perform(LB_SELECTSTRING, ItemIndex, LongInt(S));
end;
Более подробную информацию о работе команды LB_SELECTSTRING можно узнать из
справки Win32
Прочие советы
Как сделать так, что при нажатии на Enter происходил переход к следующему элементу формы |
*
| *
|
| |
Ставите у формы KeyPreview = true и создаете событие KeyPress
следующего вида:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
Следует заметить, что в реальном приложении стоит проверить, какой компонент в фокусе ввода.
Для компонент, допускающих многострочный ввод, данный пример недопустим - он не позволит им
нормально работать. Пример:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then
if not (ActiveControl is TMemo) then // проверка типа компонента
begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
Тонкости работы с TMemo
Функция Undo в TMemo |
*
| *
|
| |
В компоненте TMemo предусмотрена функция отмены
последней правки (Undo). Ее можно вызвать следующим
образом:
Memo1.Perform(EM_UNDO,0,0);
Узнать о том, возможна ли отмена (т.е. есть ли что
отменять) можно следующим образом:
UndoEnabled:=(Memo1.Perform(EM_CAUNDO,0,0)<>0);
Как прокрутить текст в Tmemo или в TRichEdit |
*
| *
|
| |
Для прокрутки текста следует применить следующий вызов (в данном случае
прокрутка идет в конец текста)
SendMessage(Memo1.Handle, EM_LINESCROLL, 0, Memo1.Lines.Count-1);
Пример получения позиции курсора компоненты TMemo. |
*
| *
|
| |
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Memo1Click(Self);
end;
procedure TForm1.Memo1Click(Sender: TObject);
VAR
LineNum : LongInt;
CharNum : LongInt;
begin
// Получение номера строки
LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
// Получение номера символа в строке
CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0);
// Их отображение
Label1.Caption := IntToStr(LineNum+1)+' : '+IntToStr((Memo1.SelStart-CharNum)+1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1Click(Self);
end;
© Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта
необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA -
Хостинг от AGAVA.ru