• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Dos

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

shisik

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

Dos

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

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

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

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

shisik

Вот меня уже опередили. :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

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

Dos

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

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

Yason

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

shisik

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

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

Вложения

  • activecontrol.zip
    3,2 КБ · Просмотры: 144
D

Dos

Благодарю всех кто пробовал помочь :unsure: Всё заработало как надо THX shisik
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!