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

  • Автор темы Dos
  • Дата начала
D

Dos

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

shisik

Well-Known Member
26.08.2007
154
0
#2
Судя по Edit1->Text это C++ Builder, т.е. vcl. Чем в таком случае оно отличается от Delphi? Что-то вроде
Код:
if (Edit1->Focused())
Edit1->Text += "0";
 
D

Dos

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

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

Yason

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

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

shisik

Well-Known Member
26.08.2007
154
0
#5
Вот меня уже опередили. :unsure: Я хотел предложить для каждого 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";
}
 
G

gamecreator

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

Dos

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

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

Yason

Гость
#9
у меня калькулятор с 2 окошками Edit туда кнопками вводятся цифры, после ввода первого числа мы ставим курсор на окошко второго Edita и тыкая кнопки набираем в нём число.
Видимо, я чего-то недопонимаю: зачем Вам весь этот огород, почему нельзя просто вводить данные в Edit'ы напрямую?
 

shisik

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

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

Вложения

D

Dos

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