Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Borland C++ Builder & Kylix _ Определение положения курсора

Автор: Dos 27:04:2008, 09:23

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

Автор: shisik 27:04:2008, 10:44

Судя по Edit1->Text это C++ Builder, т.е. vcl. Чем в таком случае оно отличается от Delphi? Что-то вроде

Код
if (Edit1->Focused())
   Edit1->Text += "0";

Автор: Dos 27:04:2008, 16:21

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

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

Автор: Yason 27:04:2008, 16:59

Цитата(Dos @ 27:04:2008 - 19:21) *
TForm1::Button1Click
Ну так естественно - когда кликаете на кнопку, фокус с Edit'а переходит на Button1!

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

Автор: shisik 27:04:2008, 17:27

Вот меня уже опередили. smile.gif Я хотел предложить для каждого Edit создать обработчик получения фокуса, в котором в глобальную переменную (типа TEdit *LastFocusedEdit;) записывался б указатель на этот объект. А при нажатии кнопки тогда писать уже по этому адресу. Что-то вроде такого:

Код
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";
}


Автор: gamecreator 27:04:2008, 17:51

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

Автор: Yason 27:04:2008, 18:32

gamecreator

Цитата(Dos @ 27:04:2008 - 12:23) *
в каком Edite стоит курсор

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

Автор: Dos 27:04:2008, 18:48

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

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

Автор: Yason 27:04:2008, 18:53

Цитата(Dos @ 27:04:2008 - 21:48) *
у меня калькулятор с 2 окошками Edit туда кнопками вводятся цифры, после ввода первого числа мы ставим курсор на окошко второго Edita и тыкая кнопки набираем в нём число.
Видимо, я чего-то недопонимаю: зачем Вам весь этот огород, почему нельзя просто вводить данные в Edit'ы напрямую?

Автор: shisik 27:04:2008, 19:36

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

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

 activecontrol.zip ( 3.18 килобайт ) : 5
 

Автор: Dos 28:04:2008, 08:09

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

Русская версия Invision Power Board (http://www.nulled.ws)
© Invision Power Services (http://www.nulled.ws)