Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2009, 22:09   #1
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию Проблема в Delphi. Возможно, на потоки.

В последнее время меня мучает задача, которую решить не могу. Состоит она в том, что пусть дан тип форму TO=class(TForm) ... procedure KeyPress(...); function ReadK:char; end; где KeyPress обрабатывает нажатые клавиши и запоминает все введенные. Следует написать ReadK, которая в случае:
1) до запуска ReadK была хотя бы раз запущена KeyPress —> выдать последнюю нажатую клавишу.
2) до запуска ReadK не была запущена KeyPress ни разу —> «подождать», пока пользователь что-то нажмет и запустится KeyPress и выдать символ.

Думаю, вопрос понятен. Сразу скажу, что реализовать ее не получилось: влоб цикл писал while not any_key_was_pressed do Sleep() — ясно дело, зависало, подумал о потоках — разбил голову, читая мануал к этой теме.
Помогите пжл хотя бы с идеей решения.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 21.02.2009, 22:19   #2
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Код:
var a1:string;
function readK(a:string):boolean;
begin
if a <>'' then showmessage(a);
end;

procedure keyPress(....);
var k:boolean;
begin
k:=readK(a1);
a1:=key;
k:=readK(a1);
end;
вот как то так !
вступлю в команду разработчиков ПО на Delphi

Последний раз редактировалось maladoy; 21.02.2009 в 22:25.
maladoy вне форума Ответить с цитированием
Старый 21.02.2009, 22:32   #3
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию

Так, да не совсем:
  1. Сама по себе процедура KeyPress независима от ReadK, то есть она может выполняться несколько раз, либо вообще ниодного до того, как была вызвана ReadK
  2. Еще раз прошу обратить внимание на очередность вызовов методов: ReadK и KeyPress никак друг от друга не зависят,выполняться они могут в совершенно произвольном порядке, но при этом ReadK должен окончиться после того, как выполнилась хотя бы одна процедура KeyPress

Плохо объяснил условие... бывает...
Код:
type
  T0 = class(TForm)
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    readkeys:string;
  public
    function ReadK:char;
  end;
var Form1:T0;
...
procedure T0.FormKeyPress(Sender: TObject; var Key: Char);
begin
    readkeys:=key+readkeys;
end;

procedure DoSomeThing;
begin
    {bla-bla-bla}
    showmessage(Form1.ReadK);
    {...}
end;
Как видно из приведенного кода, только (!) ReadK вызывается из DoSomeThing, а KeyPress — лишь анализ нажатых клавишь во время работы программы.
Тут подобное решение неподходит.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки AidarBik Win Api 2 04.08.2008 10:00
Потоки в Delphi frai Общие вопросы Delphi 4 13.01.2008 03:39
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12
Возможно ли средствами Delphi создать "звук" V_X Помощь студентам 2 19.12.2006 18:24