Форум программистов, компьютерный форум CyberForum.ru

Lazarus

Войти
Регистрация
Восстановить пароль
 
Hretgir
175 / 72 / 2
Регистрация: 25.01.2012
Сообщений: 2,739
Записей в блоге: 17
#1

Снова оборвать выполнение процедуры - Lazarus

25.12.2016, 12:04. Просмотров 189. Ответов 2
Метки нет (Все метки)

Опять оно. В который раз. В прошлый раз я спрашивал обрыв выполнения в теле цикла(ещё пока справляюсь без конспектов, ну усиленно пишу программу для их составления-у меня функционал по шире будет чем у одномерных конспектов(HTML и XML разметка меня не устроит - вообще не то пальто), думаю потом модуль AI прикрутить небольшой, пятимерные конспекты будут), теперь другое.
вот это сделано в процедуре отдельной, при запуске программы, так удобнее
Pascal
1
2
3
for i:=0 to 50 do
 keyOn[i]:=@Pass;
keyOn[17]:=@OnEditing;
далее нужно, что если была нажата клавиша не предусмотренная функционалом программы, чтобы программа просто игнорировала это нажатие (например при нажатии клавиши ввода текста).
Pascal
1
2
3
4
5
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
keyOn[Key];
vyvedetTablicu;
end;
можно-ли задать такую функцию
Pascal
1
Pass
, чтобы задача была выполнена?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2016, 12:04     Снова оборвать выполнение процедуры
Посмотрите здесь:

Выполнение процедуры заставляет висеть приложение - Lazarus
Вызываются последовательно друг за другом 2 процедуры. Вторая процедура долго отрабатывает(обе процедуры содержат запросы к базе). Как...

Оборвать цикл без изменений переменных - Lazarus
Дошёл до специфического места в программе, где переменную цикла, при определённых условиях, менять нельзя - может привести к ошибке, а цикл...

И снова TChart - Lazarus
Всем привет. Не так давно начал изучать Lazarus. Столкнулся со следующей задачей. Есть текстовый файл. В нем есть данные типа: ...

Выполнение поиска по TButton - Lazarus
Помогите, пожалуйста! Только начала изучать Lazarus. Требуется выполнить поиск введенного в LabeledEdit символа путем нажатия на...

Последовательное выполнение кода - Lazarus
Нужно, чтобы программа с ОДНОГО окна выполнялась последовательно вводу данных, по аналогии консольным командам writeln и readln. ...

Как запустить файл на выполнение - Lazarus
Здравствуйте ! Как в Lazarus-е запустить файл ? К примеру при нажатии на кнопку, у меня в той же директории где есть .exe файл моей...

Выполнение ХП MS SQL SERVER в lazarus - Lazarus
Подскажите как выполнить ХП в лазарус, в делфи я делал это через адосторедпроц, есть вариант еще делать это через квери но если есть что то...

Выполнение строки по значению true переменной типа boolean - Lazarus
Была проблема, но модератор подсказал как делать, но просто на будущее, хочется иметь выражение без оператора if, для его явного...

Обеспечить ввод двух целых чисел и выполнение над ними операции деления - Lazarus
создать приложение, обеспечивающее ввод двух целых чисел и выполнение над ними операции деления. Результат вывести на экран

Снова функции и процедуры... - Pascal
Написать программу вычисления значений функции при заданных значениях аргумента. Вычисление оформить во вспомогательном алгоритме:

Выполнение процедуры - C# ASP.NET
Здравствуйте! Помогите разобраться, что не так. У меня есть ASP-код для вызова процедуры, но он не работает :( Set...

Завершить выполнение процедуры - Delphi
Есть обработчик нажатия на кнопку procedure TForm1.Button1Click(Sender: TObject); begin //какой-то код end; как по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22860 / 15002 / 4316
Регистрация: 22.10.2011
Сообщений: 26,602
Записей в блоге: 4
25.12.2016, 13:40     Снова оборвать выполнение процедуры #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Hretgir Посмотреть сообщение
если была нажата клавиша не предусмотренная функционалом программы, чтобы программа просто игнорировала это нажатие
Просто обрабатывай те клавиши, которые тебе нужны в функции Pass. Естественно, на остальные программа реагировать не будет.
Hretgir
175 / 72 / 2
Регистрация: 25.01.2012
Сообщений: 2,739
Записей в блоге: 17
25.12.2016, 15:18  [ТС]     Снова оборвать выполнение процедуры #3
Я понял, но мне надо, чтобы при нажатии нужной клавиши выводилась таблица с новыми данными
Pascal
1
vyvedetTablicu;
поэтому её надо обойти, я что как-то не всё написал, думал что всё оказывается нет. вот чтобы не выводилась новоая таблица при редактировании ячейки нужно оборвать процедуру
Pascal
1
2
3
4
5
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
keyOn[Key];
vyvedetTablicu;//вот эта процедура не должна выполнится если Key не равно 17
end;
вот-же ведь
Pascal
1
2
3
for i:=0 to 50 do
 keyOn[i]:=@Pass;
keyOn[17]:=@OnEditing;
так ведь нельзя
Pascal
1
2
3
4
procedure Pass;
begin
break;
end;
? Как оно пишется то... break

Добавлено через 6 минут
ну да, так и пишется, только ошибку выдает при компиляции, да и не уверен что задача выполнится так...

Добавлено через 18 секунд
volvo, подскажи пожалуйста, как оборвать выполнение процедуры TForm1.FormKeyUp при значении Key равном 17.
Я мало информации дал изначально. Я открывал похожую тему давно, но там циклы были.

Добавлено через 3 минуты
Можно оборвать? Ведь это самый простой вариант написания проги.

Добавлено через 37 минут
нашёл, вот оно Возможность реализации проверки системы условий
сейчас буду пробовать. тяжко без конспектов, ыха.

Добавлено через 35 минут
И вот что получилось без ошибок компилятора:
есть такая процедура
Pascal
1
2
3
4
5
6
7
8
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
try
keyOn[Key];
vyvedetTablicu;
except
end;
end;
где заполнение массивов будет происходить при открытии программы и описано в самом хвосте программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure writeKeyArray;//заливает массив для обработки событий клавиатуры
var
    i:integer;
begin
SetLength(keyOn, 50);
 SetLength(keyOff, 50);
 for i:=0 to 50 do
 keyOn[i]:=@Pass;
 for i:=0 to 50 do
 keyOff[i]:=@Pass;
 keyOn[17]:=@OnEditing;//процедура разрешающая редактирование таблицы
 keyOff[17]:=@OffEditing;//процедура запрещающая редактирование таблицы, осуществляющая навигацию
end;
а вот эта процедура описана вообще в самой голове программы
Pascal
1
2
3
4
procedure Pass;
begin
raise Exception.Create('Pass');
end;
ошибок нет, надеюсь будет работать как и задумано.

Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
Просто обрабатывай те клавиши, которые тебе нужны в функции Pass. Естественно, на остальные программа реагировать не будет.
лучший ответ был в прошлой теме, очень давно, тогда не было функционала лучшего ответа, поэтому применяю его тут.
Yandex
Объявления
25.12.2016, 15:18     Снова оборвать выполнение процедуры
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru