При нажатии левой кнопки мыши открываются свойства а не файл
Программированию нельзя научить, можно только научится
Главная » Уроки по ООП » Урок 7. Свойства компонентов. События мыши и клавиатуры
Критерии оценки:
На «3» - прочесть и законспектировать конспект
На «4» - ответить на вопросы и выполнить часть заданий
На «5» - ответить на вопросы и выполнить задания, при этом обязательно задания 5, 7
Обращение к свойству объекта в программе
В программе к свойству объекта можно обратиться так:
<имя объекта>.<имя свойства>
Например: Label1.Caption.
Иногда свойство объекта является в свою очередь объектом. Тогда в обращении к этому свойству указывается через точки вся цепочка предшествующих объектов.
Например, метки имеют свойство Font — шрифт, которое в свою очередь является объектом. У этого объекта имеется множество свойств, в частности, свойство Color — цвет шрифта. Чтобы сослаться на цвет шрифта метки Label1, надо написать Label1.Font.Color.
Аналогично для доступа к методам объекта.
<имя объекта>.<имя метода>
Например: Label1.Free.
Оператор With
Оператор with используется для сокращения записи при обращении к полям записи или к свойствам и методам объекта. В этих случаях применение with позволяет избежать повторных ссылок на объект в последующих операторах. Например, группу операторов:
с помощью with можно записать короче:
with Form1.Label1 do begin
left:=left+10;
font.color:=clRed;
end;
События
Приложения Delphi используют управляемые событиями методы для организации взаимодействия между программой и пользователем. Большая часть кода, которую Вы будете писать в Delphi, будет инициироваться событиями. В принципе событием может быть изменение любой величины. Происхождение события заставляет работать определенный объект, при этом объект получает заранее определенные параметры для своей настройки на работу.
Процедура, инициируемая событием, называется обработчиком события.
События делятся на три основные категории:
- события мыши,
- события клавиатуры и
- системные события.
Все действия пользователя при взаимодействии с приложением сводятся к перемещению мыши, нажатию кнопок мыши и нажатию клавиш клавиатуры. Рассмотрим обработку в приложении событий, связанных с этими манипуляциями пользователя.
События мыши
Событие onClick - щелчок мыши на компоненте и некоторые другие действия пользователя
Задание 1: Напишите приложение, которое при щелчке левой кнопкой мыши по форме перекрашивает ее в красный цвет.
Ход работы:
Создайте обработчик события OnClick: для этого в объектном инспекторе перейдите на страницу Events, найдите событие onClick и выполните двойной щелчок мышью в правой колонке, напротив этого события.
На переднем плане появится окно редактора с помещенной в нужное место модуля заготовкой обработчика события OnClick.
Для изменения цвета формы в обработчике события OnClick напишите:
Form1.Color:=clRed;
Задание 2. Напишите приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленого на красный, и, наоборот, с красного — на зеленый.
Ход работы:
В соответствии с условием задачи в обработчике события OnClick формы необходимо проанализировать свойство Color формы: если его значение соответствует красному, то изменить его на зеленый (clGreen), иначе присвоить значение красный. На языке Object Pascal это записывается так:
if Form1.Color=clRed then Form1.Color:=clGreen else Form1.Color:=clRed;
Событие OnDblClick - двойной щелчок мыши на компоненте
Задание 3. Напишите приложение, в котором при двойном щелчке левой кнопкой мыши изменяется вид курсора.
Ход работы:
Каждое значение свойства Cursor имеет свой числовой эквивалент в пределах от -21 (crHandPoint) до 0 (crDefault). При каждом двойном щелчке левой кнопкой мыши значение свойства Cursor будем увеличивать на единицу, при достижении значения 0 — восстановим значение -21.
Введите в обработчик события формы OnDblClick следующий оператор:
if Cursor=0 then Cursor:=-21 else Cursor:=Cursor+1;
Вопросы:
1. Когда происходит событие onClick?
2. Когда происходит событие onDblClick?
События OnMouseDown, OnMouseMove, OnMouseUp
Нажатие клавиши мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши.
Перемещении курсора мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши.
Оно происходит постоянно в процессе перемещения курсора мыши и даже просто при его дрожании, неизбежном, если пользователь не снимает руки с мыши. Это надо учитывать и пользоваться этим событием очень осторожно, поскольку оно, в отличие от других, происходит многократно.
Отпускание ранее нажатой кнопки мыши над компонентом.
Возможно распознавание нажатой кнопки и координат курсора мыши
Источник событий – параметр Sender
Во все обработчики событий, связанных с манипуляциями мыши передается параметр Sender типа TObject. Он содержит указатель на компонент, в котором произошло событие.
Он используется, если пишется обработчик события для одного конкретного компонента. Однако часто один обработчик применяется для нескольких компонентов.
Задание 4: создать несколько кнопок, у которых будет один обработчик события и который будет уметь работать с разными типами кнопок.
Ход работы:
Установите на форму несколько разных кнопок TBitBtn, TSpeedButton (на странице Additional в палитре инструментов).
Выделите все кнопки TSpeedButton и установите свойство GroupIndex=1.
Создайте следующий обработчик для кнопки BitBtn1.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if Sender is TBitBtn then TBitBtn(Sender).Enabled := False;
if Sender is TSpeedButton then TSpeedButton(Sender).Down := True;
end;
Всем остальным кнопкам присвойте этот обработчик с помощью Object Inspector. Для этого выделите все кнопки, перейдите в окно Object Inspector и на закладке Events найдите событие onClick. Щелкните в колонке справа от события и из списка выберите событие Bitbtn1Click (рис.1)
Рисунок 1
Распознаем, какая кнопка мыши нажата – параметр Button
Параметр Button типа TMouseButton определяет нажатую в этот момент кнопку мыши.
Может принимать следующие значения:
- mbLeft соответствует нажатию левой кнопки мыши
- mbRight — правой,
- mbMiddle — средней.
Например, если вы хотите, чтобы обработчик реагировал на нажатие только левой кнопки, вы можете его первым оператором написать:
if (Button <> mbLeft) then exit;
Тогда, если значение Button не равно mbLeft, т.е. нажата не левая кнопка, выполнение обработчика прервется.
Распознаем, какая вспомогательная клавиша была нажата – параметр Shift
Параметр Shift может принимать следующие значения:
ssShift - нажата клавиш Shift,
ssAlt- нажата клавиш Alt,
ssCtrl- нажата клавиш Ctrl
ssLeft- нажата левая кнопка мыши
ssRight- нажата правая кнопка мыши
ssMiddle- нажата средняя кнопка мыши
Параметр Button соответствует кнопке, нажимаемой в данный момент, а параметр Shift содержит информацию о том, какие кнопки были нажаты, включая и те, которые были нажаты ранее. Поскольку Shift является множеством, проверять наличие в нем тех или иных элементов надо операцией in.
Пример: реагируем на событие, заключающееся в нажатии левой кнопки мыши при нажатой клавише Alt:
if (Button = mbLeft) and (ssAlt in Shift) then .
Аналогичные параметры Button и Shift передаются и в обработчик события OnMouseUp. Отличие только в том, что параметр Button соответствует не нажимаемой в данный момент, а отпускаемой кнопке. Параметр Shift передается также в обработчик события OnMouseMove, так что и в этом обработчике можно определить, какие клавиши и кнопки нажаты.
Определяем координаты курсора – параметры X и Y.
Во все события, связанные с мышью, передаются также координаты курсора X и Y. Эти параметры определяют координаты курсора в клиентской области компонента. Благодаря этому можно обеспечить различную реакцию в зависимости оттого, в какой части клиентской области расположен курсор.
Вопросы:
1. В какой момент времени выполняются события onMouseUp, onMouseDown, onMouseMove?
2. Какие параметры передаются в обработчик события onMouseDown?
3. Для чего используется каждый из параметров?
Задание 5.
При перемещении курсора по форме при нажатой клавише Shift выдавать в заголовок формы координаты курсора.
Задание 6. Напишите приложение, позволяющее рисовать отрезок на форме.
Ход работы:
Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (10,10) до точки (300,300), создайте обработчик события формы onClick и введите следующие операторы:
with Canvas do begin
Pen.Color:=ClRed; //цвет линии
Pen.Style:=PsDash; //стиль линии
MoveTo(10,10); //переместить курсор в точку (10,10)
LineTo(300,300); //нарисовать линию из точки, где находится курсор в точку (300,300)
end;
Задание 7. Напишите приложение, которое при нажатии мыши устанавливает курсор в точку, а при отпускании кнопки мыши в другом месте формы рисует отрезок от первой точки до второй. Использовать события MouseDown и MouseUp, для координат использовать параметры x,y.
Событие OnEnter – возникает в момент получения элементом фокуса в результате манипуляции мышью, нажатия клавиши табуляции или программной передачи фокуса.
Событие OnExit – возникает в момент потери элементом фокуса в результате манипуляции мышью, нажатия клавиши табуляции или программной передачи фокуса.
События клавиатуры
Обработку клавиатуры можно выполнить, используя комбинацию трех событий.
Событие OnKeyDown происходит при нажатии любой клавиши, включая функциональные и специальные:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Например, если мы хотим по нажатию на клавишу Esc закрывать форму, в обработчик события onKeyDown добавить следующий оператор:
if key=VK_ESCAPE then Close;
Здесь метод Close закрывает форму, key – параметр, который определяет нажатую клавишу, VK_ESCAPE - символическое имя клавишы Esc.
Задание 8. Создать приложение, которое закрывается при нажатии клавишы Esc.
Задание 9. С помощью дописки кода просмотреть другие символические имена клавиш.
Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы ASCII, включая управляющие клавиши:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
Событие OnKeyUp происходит при освобождении любой клавиши:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Каждый из обработчиков событий получает по крайней мере, один параметр, называемый Key, который представляет нажатую клавишу. В обработчиках событий OnKeyDown и OnKeyUp параметр Key является беззнаковым значением типа Word, которое представляет код виртуальной клавиши Windows. В обработчике события OnKeyPress параметр Key — это значение типа Char, представляющее символ ASCII. Несмотря на то, что обе переменные называются Key, они представляют различную информацию. Все ASCII-символы имеют соответствующие коды виртуальных клавиш, но многие виртуальные клавиши не имеют ASCII-эквивалента, например клавиша F1.
Задание 10. Напишите приложение, закрывающееся при одновременном нажатии клавиш Alt и X.
Ход работы:
Для обработки воспользуемся событием ОпКеуDown. Создайте обработчик этого события. Воспользуемся значением параметра Shift для определения нажатия клавиши Alt:
if ssAlt in Shift then Close;
Определим код клавиши X. Добавьте в обработчик события OnKeyDown оператор:
Caption:=IntToStr(Key);
Key — код нажатой клавиши.
Запустите приложение. Определите виртуальный код клавиши с латинской буквой «х».
Итак, виртуальный код клавиши с латинской буквой «х» равен 88. Для решения задачи напишем следующий код обработчика события OnKeyDown формы:
if (ssAlt in Shift) and (Key=88) then Close;
Убедитесь, что при одновременном нажатии клавиш Alt и латинской буквы «х» независимо от выбранного языка приложение закрывается.
Задание 11. Напишите программу, которая определяет нажатую на клавиатуре клавишу и выводит в заголовок формы информацию об этой клавише.
Например, при нажатии строчной латинской буквы 'а' в заголовке должна быть надпись:
«Код виртуальной клавиши=65 а — строчная латинская буква ASCII-Kod=97»
(аналогично для русских букв, цифр, специальных символов — запятая, точка, скобки и т. д.); при нажатии клавиши стрелка вправо:
«Код виртуальной клавиши = 39» (аналогично для всех специальных клавиш — Fl, Insert и т. д.).
Ход работы:
Для получения информации о коде виртуальной клавиши создадим обработчик события OnKeyDown:
Caption:='код виртуальной клавиши='+IntToStr(Key);
Для отображения информации о символах воспользуемся обработчиком события OnKeyPress, параметр Key которого содержит символьное значение, представляющее символ ASCII. Создайте обработчик события OnKeyPress и введите оператор:
Caption:=Key;
Сохраните приложение и запустите его. При нажатии на клавишу «F» в заголовке формы отображается символ F.
Это объясняется тем, что при нажатии на клавишу вначале происходит событие OnKeyDown, после обработки которого возникает событие OnKeyPress, и в результате этого код виртуальной клавиши затирается изображением символа. Измените код обработчика события onKeyPress следующим образом:
Проверьте, является ли написанная программа решением поставленной задачи.
Вопросы:
1. Какие обработчики событий позволяют обрабатывать события клавиатуры?
2. Какой из обработчиков событий позволяет определить нажатие функциональной клавиши?
В вашем компьютере / ноутбуке правая кнопка мыши работает как левая и вызывает контекстное меню? При нажатии на левую кнопку мыши срабатывает правая?
Одним словом, кнопки поменялись местами? В виндовс случаются и не такие сюрпризы. Бывает, что обе кнопки мыши работают как правая или левая кнопка мыши, левая работает как правая, а правая нормально.
В системе Windows есть функция замены кнопок мыши. Это может облегчить работу, например, для левшей — благодаря этому левая кнопка мыши будет работать как правая, которая будет использоваться для отображения параметров и контекстного меню.
Только такой вариант иногда может задействоваться случайно и люди, привыкшие к системе по умолчанию, могут значительно затруднить работу на компьютере.
Как сделать чтобы левая и правая кнопки работали нормально
Вы можем использовать опцию замены для переназначения. Для этого переходим в Windows к панели управления.
В старых Windows можно получить доступ к нему из меню «Пуск», в то время как в Windows 10 немного по-другому. Затем перейдите на вкладку «Оборудование и звук».
Теперь выберите опцию «Мышь», которая должна находиться в верхней части, в разделе, посвященном устройствам.
Отобразятся свойства. Остаемся на вкладке «Кнопки» по умолчанию и обратите внимание на первый вариант заранее, то есть «Обменять назначение …».
Когда эта опция отмечена, действие будет изменено. Если у вас есть проблема с этим, это значит, что, скорее всего, этот параметр выбран и его необходимо отключить, чтобы восстановить нормальную работу мыши.
Если, с другой стороны, вы хотите намеренно изменить работу кнопок, эта опция должна быть выбрана. После внесения изменений нажмите «Применить» и «ОК», чтобы подтвердить настройки.
Дополнительная информация для кнопок мыши
В магазинах можете найти мышки, оснащенные дополнительными кнопками, переключателями, с дополнительными функциями и специальными системами, которые изменяют чувствительность считывания движения запястья.
Я не буду их описывать здесь, потому что все такие модификации полностью настраиваются — вы можете назначить им любые действия, которые производитель предоставил в доступных драйверах и программном обеспечении.
Курсор мыши может изменить свою форму в зависимости от приложения или элемента, на который он указывает.
В текстовом редакторе он обычно будет иметь форму буквы H, повернутой на 90 градусов, в браузере будет стрелка, но, если переместить ее на активную ссылку, она изменится на руку с указательным пальцем.
Так вы сразу же узнаете, что можете щелкнуть по ней, что приведет к запуску ссылки и назначенной ей страницы.
Вы также можете полностью изменить вид и цвет курсора, включая с анимацией – их можно скачать бесплатно в интернете и установить в качестве по умолчанию. Успехов.
При открытии файлов, открываются их свойства
Суть проблемы: При попытке запуска любой программы или открытиия папки открываюся свойства ярлыка или папки соответственно
При нажатии левой кнопки мыши открываются свойства
мышка при двойном нажатии левой кнопки открывает свойства, а не сам объект! чо делать? и получил лучший ответ
Ответ от Firefly[гуру]
Конфигурация мыши для левши настроена. Я так понял правой кнопкой открывает таки объекты?
спасибо, реально залипла хД
Репутация: нет
Всего: нет
Репутация: 2
Всего: 13
Репутация: нет
Всего: нет
Репутация: 73
Всего: 329
Добавлено через 1 минуту и 47 секунд
Справа вверху нужно отметить как решённый, тогда
Репутация: нет
Всего: нет
Репутация: 61
Всего: 109
Репутация: нет
Всего: нет
Когда я открываю файл у меня открываются свойства этого файла подскажите что делать?
Репутация: 1
Всего: 130
Нажимай левую клавишу мышки вместо правой.
Ну или поменяй назначения клавиш в свойствах.
Репутация: 73
Всего: 329
Запрещается!
1. Обсуждать взлом и делиться кряками
2. Способствовать созданию и распространению вирусов
- Для бессмертных бородатых вопросов типа Win vs Nix есть специальный форум Религиозные Войны
- Несанкционированная реклама на форуме запрещена
- Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
- Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
- ВСЕГДА УКАЗЫВАЙТЕ ВЕРСИЮ ОС
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, December, bartram, Akella.
[ Время генерации скрипта: 0.1250 ] [ Использовано запросов: 20 ] [ GZIP включён ]
ЛКМ иногда не кликает
Все остальные функции выполняет, (инт. USB). Купил другую (модель производитель тоже другой) -.
§o вместо §or и ¤cy вместо ¤cy при выводе строки
Формирую строку для post запроса $array = "&currency=$currency" . "&amount=$amount" .
Не открываются папки нажатием ЛКМ и ENTER
Собственно, выделяешь что-либо на рабочем столе или проводнике, кликаешь 2 раза мышью - ничего не.
Как сделать скачивание mp3-файла вместо открытия в браузере?
Добрый день. Подскажите пожалуйста как сделать кнопку для скачивания mp3 файла? Если ставить так.
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00x\Control\Class (где x=1,2,3..)
если есть, удалить параметр LowerFilters и задать UpperFilters = kbdclass
еслт есть удалить параметр LowerFilters и задать UpperFilters = mouclass
(тип параметра = REG_MULTI_SZ)
---------------
Внимание! Перед манипуляциями с реестром, настоятельно рекомендую сделать точку восстановления системы, либо экспорт редактируемой ветки реестра
Добавлено через 1 минуту
@ScrollLock - Пробовал, не помогает. Баг все равно проступает. Параметров LowerFilters не обнаружил. А параметры UpperFilters = kbdclass и UpperFilters = mouclass уже были. Я удалял и пересоздавал. Всё делал в точности как вы писали. Но не помогло, к сожалению.
Есть какие-нибудь другие варианты решения этой проблемы?
Так что тема может быть закрыта. Вопрос решён.
Выбор исходного файла через диалог открытия файла и импорт его в БД акссес
Народ подскажите плиз ! =) вот задание : 1. выбор исходного файла через диалог открытия файла.
Валидатор указывает на ошибочную ссылку, вместо & нужно & amp
Использую браузер FF 8.0, на нем установлен HTML Vallidator. Так вот этот валидатор ругается типо я.
Извлечение свойств файла *.dwg без его открытия
Здравствуйте! Нужно заполнить окно ListView информацией о файлах из конкретной папки, причем.
Браузеры открывают рекламу вместо страниц
Здравствуйте. Попался вирус который не может найти антивирус. При переход на любой сайт открывается.
Выбор файла и переключение на другую активити для его открытия
Подскажите советом или кодом. Написал файловый менеджер для просмотра файлов на устройстве.
интернет работает, браузеры (разные) иногда не открывают страницы ("не удается найти")
началось все 1 августа 2013. Проблема точно не в браузерах, т.к. пробовала с трех разных ПК, везде.
Читайте также: