Определение положения курсора

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Dos, 27 апр 2008.

  1. Dos

    Dos Гость

    Есть несколько Edit ов в зависимости от того в каком Edite стоит курсор туда и нужно вывести информацию
    примерно :
    если курсор стоит в Edit1 то
    Edit1->Text = Edit1->Text + "0";
    если в Edit2 то
    Edit2->Text = Edit2->Text + "0";
    итд ... сори если было в гугле находил про делфи и vb про с++ не нашёл
     
  2. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Судя по Edit1->Text это C++ Builder, т.е. vcl. Чем в таком случае оно отличается от Delphi? Что-то вроде
    Код (Text):
    if (Edit1->Focused())
    Edit1->Text += "0";
     
  3. Dos

    Dos Гость

    Да теоретически вроде правильно но вот в программе после этого кода фокус со всех обьектов убирается и ничего никому не присваивает (
    проверил написанием простой проги - такие результаты

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(Edit1->Focused()==0)
    Edit1->Text="Превед";
    if (Edit2->Focused()==0)
    Edit2->Text="Hello";
    }
    тут присваивает в обоих случаях ... при изменении 0 на 1, где 1 не присваивает во всех случаях местонахождение моего курсора не влияет... такие вот наблюдения :unsure: вопрос не снят
     
  4. Yason

    Yason Гость

    Ну так естественно - когда кликаете на кнопку, фокус с Edit'а переходит на Button1!

    Попробуйте каждому Edit'у назначить нижеприведённый обработчик OnEnter.
    Код (Text):
    void __fastcall TForm1::EditEnter(TObject *Sender)
    {
    ((TEdit*)Sender)->Text = "I'm here!";
    }
     
  5. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Вот меня уже опередили. :unsure: Я хотел предложить для каждого Edit создать обработчик получения фокуса, в котором в глобальную переменную (типа TEdit *LastFocusedEdit;) записывался б указатель на этот объект. А при нажатии кнопки тогда писать уже по этому адресу. Что-то вроде такого:
    Код (Text):
    TEdit *LastFocusedEdit = NULL;

    void __fastcall TForm1::Edit1Enter(TObject *Sender)
    {
    LastFocusedEdit = Edit1;
    }

    void __fastcall TForm1::Edit2Enter(TObject *Sender)
    {
    LastFocusedEdit = Edit2;
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if (LastFocusedEdit != NULL)
    LastFocusedEdit->Text = "Hello";
    }
     
  6. gamecreator

    gamecreator Гость

    по-моему человеку нужен не фокус, а сам факт наведения курсора
     
  7. Yason

    Yason Гость

    gamecreator
    Очевидно, речь не о мышином курсоре.
     
  8. Dos

    Dos Гость

    №4, №5 thx всё компилируется но положение курсора не отслеживается(может я не так что т делаю :unsure: )

    №6 у меня калькулятор с 2 окошками Edit туда кнопками вводятся цифры, после ввода первого числа мы ставим курсор(мышкой его ставим или табом без разницы ) на окошко второго Edita и тыкая кнопки набираем в нём число.(если я набираю там числа с клавиатуры то всё работает, а вот мною созданными кнопками пока нет.) Я не знаю что тут нужно фокус или наведение курсора т.к с этим ещё не работал(опыта мало).
     
  9. Yason

    Yason Гость

    Видимо, я чего-то недопонимаю: зачем Вам весь этот огород, почему нельзя просто вводить данные в Edit'ы напрямую?
     
  10. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Dos у меня прекрасно работает мой пример. Правда, если после запуска проги сразу нажать кнопку, то тогда действительно ничего не работает (естественно, т.к. LastFocusedEdit = NULL). Если єто важно, можно в свойствах Form1 указать ActiveControl = Edit1.

    Вот файлы проекта. Сорри, что 5 версии Билдер, новее нет.
     

    Вложения:

  11. Dos

    Dos Гость

    Благодарю всех кто пробовал помочь :unsure: Всё заработало как надо THX shisik
     
Загрузка...

Поделиться этой страницей