Программирование на Delphi - обмен опытом / Прочее

© Зайцев Олег 1998-2004
Лучшая портативная техника. Плееры Камеры Телефоны Компьютеры
Покупателям, пришедшим на www.porta.ru по этой ссылке - дополнительная скидка 1%
Железо | Система | WEB | Компоненты | Графика | Ссылки | Мультимедиа | Сети | Прочее | Реестр | Литература

Статистика

Прочее

Раздел "прочее" содержит советы, которые трудно отнести к существующим в настройщий момент категориям

Рекомендую:
Главная страница \ Прочее

  • Тонкости работы с ListBox
  • Прочие советы
  • Тонкости работы с 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