Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  152

•  TDictionary Custom Sort  3 332

•  Fast Watermark Sources  3 083

•  3D Designer  4 841

•  Sik Screen Capture  3 334

•  Patch Maker  3 548

•  Айболит (remote control)  3 654

•  ListBox Drag & Drop  3 011

•  Доска для игры Реверси  81 660

•  Графические эффекты  3 938

•  Рисование по маске  3 243

•  Перетаскивание изображений  2 623

•  Canvas Drawing  2 747

•  Рисование Луны  2 574

•  Поворот изображения  2 183

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 233

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 225

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 056

•  Игра HIP  1 282

•  Игра Go (Го)  1 228

•  Симулятор лифта  1 473

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 547

•  Проверка числового ввода  1 363

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


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

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



Delphi Sources

Великолепный метод Perform



Автор: Михаил Христосенко

В этой статье я постараюсь показать что можно делать с помощью метода Perform, и какие интересные вещи скрываются в VCL кодах (в частности messages.pas). Метод Perform дает вам возможность посылать сообщения различным компонентам. Все сообщения описаны в файле Messages.pas (настоятельно рекомендую вам его посмотреть!!!). Данный метод надо вызывать по такой схеме:


Имя_компонента.Perform(Сообщение, верхний параметр: Integer, нижний параметр: Integer);

Начнем с самого простого. Попробуем закрыть форму. Для этого поставьте на форму одну кнопку и в обработчике ее события OnClick напишите:


Form1.Perform(WM_CLOSE, 0, 0);

Теперь попробуем изменить иконку вашей программы. Поставьте на форму компонент Image и загрузите в него какую-нибудь иконку. Будем использовать сообщение WM_SETICON. А поскольку в качестве параметров необходима величина типа Integer, то мы воспользуемся указателем на иконку (handle). Теперь обработчик нажатия кнопки может иметь вид:


procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Perform(WM_SETICON, 0, image1.Picture.Icon.Handle);
end;

Теперь попробуем осуществить программный клик по кнопке 1. Поставьте на форму еще одну кнопку и в ее обработчике события OnClick, напишите:


Button1.Perform(WM_LBUTTONDOWN, 0, 0);
Button1.Perform(WM_LBUTTONUP, 0, 0);

А можно и попроще реализовать:


Button1.Perform(BM_CLICK, 0, 0);

Объясняю почему два обработчика. Вначале посылается сообщение, что кнопка нажата, затем сообщение - что отпущена, тогда то и происходит клик. Если вы все сделали правильно и ничего с формы не убирали, то иконка вашего приложения вновь поменяется.

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

Начнем с вырезания текста. Обработчик кнопки поменяйте на:


Memo1.SelectAll;
Memo1.Perform(WM_CUT, 0, 0);

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


Memo1.Perform(WM_PASTE, 0, 0);

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


Memo1.Perform(EM_UNDO, 0, 0);

Чтобы добавить символ в Memo нужно написать так:


Memo1.Perform(WM_CHAR, 192, 0);

где 192, номер символа 'A', этот вызов метода Perform, можно заменить на аналогичный:


Memo1.Perform(WM_CHAR, LongInt(char('A')), 0);

Здесь значение символа 'A' как тип Char преобразуется в тип LongInt, а затем добавляется в Memo.

Теперь будем разбираться с Listbox' ами. Для этого добавьте его на форму а событие OnClick кнопки замените на:


Listbox1.Perform(LB_ADDSTRING, 0, LongInt(Pchar('Эта строка появится в ListBoxe')));

Если заменить LB_ADDSTRING на LB_INSERTSTRING, то строка будет вставляться в зависимости от первого параметра, который равен 0 в первом случае.

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


Listbox1.Perform(LB_SELECTSTRING, 0, LongInt(pchar('текст строки, которую нужно найти')));

С помощью приведенной выше строчки кода можно реализовать поиск в ListBox'e, наподобие того, как это делается в FontDialog. В текстовом поле ввода вы вводите текст, и наиболее похожий по шрифт выделяется. Чтобы это осуществить поставьте на форму компонент Edit. А в обработчике его события OnChange напишите:


Listbox1.Perform(LB_SELECTSTRING, 0, LongInt(pchar(Edit1.Text)));

Ну вот кратенький обзор метода Perform подошел к концу. Хочется посоветовать только одного, смотрите файл Messages.pas, ищите новые решения и не бойтесь пробовать, а вдруг сработает!!!





Похожие по теме исходники

Сортировка методом Хоара

Метод Рунге-Кутта решения дифур

Метод Симпсона




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте