- •Программирование для Windows
- •Литература
- •Вам необходимо знать и уметь
- •Первая программа
- •Соглашения операционной системы Windows
- •Вызовы функций Windows
- •Идентификаторы, написанные прописными буквами
- •Новые типы данных
- •Описатели
- •Венгерская нотация
- •Точка входа программы
- •Оконная процедура
- •Регистрация класса окна
- •Создание окна
- •Отображение окна
- •Цикл обработки сообщений
- •Оконная процедура
- •Обработка сообщений
- •Воспроизведение звукового файла
- •Сообщение wm_paint
- •Сообщение wm_destroy
- •Сложности программирования для Windows
- •Синхронные и асинхронные сообщения
- •Думайте о пользователе
- •Лекция3. Приступаем с изучению компонент
- •Урок 4. Класс tObjectи его потомки
- •Урок 5. Работа с кнопками
- •Урок 6. Компонент ActionList
- •Урок 7. Работаем с меню (класс tMainMenu)
- •Урок 8. Работаем с контекстным меню (класс tPopupMenu)
- •Урок 9. Компонент Edit
- •Урок 10. Работаем с двумя формами
- •Урок 11. Текст (компоненты tLabel и tStaticText)
- •Урок 12. Компонент ListBox
- •Урок 13. Компонент ComboBox
- •Урок 14. Используем api-функции
- •Урок 15. Разные MessageBox'ы
- •Урок 16. Компонент CheckBox
- •Урок 17. Компонент RadioButton
- •Урок 18. Класс tStrings
- •Урок 19. Класс tStringList
- •Урок 20. Работаем с сетью. Клиент (класс tClientSocket)
- •Урок 21. Работаем с сетью. Сервер (класс tServerSocket)
- •Урок 22. Компонент ImageList
- •Урок 23. Пересчитываем компоненты на форме
- •Урок 24. Форма - добавление методов
- •Урок 25. Форма - добавление полей
- •Урок 27. Значок на панели задач (компонент tTrayIcon)
- •Урок 28. Работаем со сплиттером
- •Урок 29. Компонент Panel
- •Урок 30. Совместное использование сплиттера и Panel'ей
- •Урок 31. Компонент HotKey
- •Урок 32. Компонент StatusBar
- •Урок 33. Установка главной формы приложения
- •Урок 34. Рисование на форме
Урок 8. Работаем с контекстным меню (класс tPopupMenu)
Компонент PopupMenu расположен на вкладке Standard Палитры компонентов:
Перенесите его двойным щелчком на форму. Добавление пунктов для него происходит точно так же, как и для главного меню, рассмотренного на прошлом уроке. Добавление обработчиков тоже делается точно так же.
Для того, чтобы приписать контекстное меню к какому-нибудь компоненту на форме, мы молжны задать у последнего свойство PopupMenu:
После чего при щелчке правой кнопкой мыши на компоненте контекстное меню и появится.
При необходимости контекстное меню можно вызывать и другим способом. Например, нам надо, чтобы оно появлялось не всегда, а только при выполнении некоторого условия (скажем, если мы щелкнули на определенном месте формы). В этом случае нам надо для показа меню вызвать его метод Popup. У этого метода два параметра - X и Y того места, где контекстное меню должно появится. Вот пример использования этого метода:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if (X<30)
{
//Преобразовываем кооринаты
TPoint point = ClientToScreen(Point(X, Y));
//Показываем меню
PopupMenu1->Popup(point.x, point.y);
}
}
В приведенном примере контекстное меню появится только если мы щелкнули на форме на расстоянии не больше чем 30 пикселов от левого края. Еще раз обратите внимание, что параметры X и Y у метода Popup контекстного меню - это координаты относительно всего экрана. В метод же FormMouseDown передаются координаты щелчка мыши относительно формы. Для преобразования одних координат в другие используем метод ClientToScreen.
Урок 9. Компонент Edit
Компонент Edit предназначен для ввода текста. Расположен он на вкладке Standard Палитры компонентов:
Основное его свойство - это Text. Оно позволяет читать и записывать некоторый текст в Edit. Обратите внимание, что это свойство имеет строковый тип (вернее тип AnsiString, но сейчас это уточнение не столь важно). Это означает, что если пользователь вводит в edit некоторое число, то необходимо дополнительное преобразование. Делается это приблизитетльно так:
int z= StrToInt(Edit1->Text);
Кроме функции StrToInt есть обратная к ней IntToStr. Они переводят строку в целое число и целое число в строку соответственно. Кроме этой пары функций имеется пара StrToFloat и FloatToStr, котрые работают с вещественными числами.
Основное событие для edit'а - это Change. Возникает при изменении свойства Text.
Кроме того, часто используются такие события как KeyPress (возникает при вводе каждого символа), KeyDown и KeyUp (возникают при нажатии и отпускании клавиши). Вот так, например, можно ограничить пользовательский ввод только символами из некоторого набора:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if (Key!='a' && Key!='b' && Key!='c')
{
Key=0x0; //Обнуляем символ
MessageBeep(-1); //Звуковой сигнал
}
}
В этом примере пользователь сможет ввести только символы a, b и c. При любом другом символе раздастся звуковой сигнал. Параметр Key тут передается по ссылке, что и позволяет нам изменить его. Событие KeyPress возникает принажатии алфавитно-цифровых клавиш. Если же вам надо отследить нажатие других клавиш (например, F1 или клавиш со стрелочками), то используйте события KeyDown и KeyUp. Они, крроме того, позволяют определить нажатие клавиш-модификаторов (Atl, Ctrl и Shift).
Из полезных свойств отметим еще некоторые.
Свойство CharCase. Возможные значения для него - ecNormal (вводимый текст автоматически не преобразуется), ecLowerCase (текст преобразуется к нижнему регистру) и ecUpperCase (текст преобразуется к верхнему регистру).
Свойство MaxLenght. Задает максимально возможное число символов в edit'е. По умолчанию равно нулю, что означает, что количество вводимых символов не ограничено.
Свойство ParentFont. Может принимать значение true (в edit'е будет использоваться шрифт формы) и false (edit будет использоваться собственный шрифт).
Свойство PasswordChar. Позволяет задать символ-заменитель для ввода пароля. Чаще всего для этих целей используют звездочку. Свойство text при этом все равно будет содержать вводимый пользователем пароль.