Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как организовать автовыделение содержимого TEdit при получении фокуса от мыши?

08.11.2018, 11:37. Показов 2306. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.

При попадании фокуса в TEdit от клавиши <TAB> и установленном свойстве AutoSelect происходит автовыделение содержимого окна TEdit. Задача: добиться того же самого при попадании фокуса в TEdit от мыши. Когда-то во времена VB-6 это делалось в две строчки:
Visual Basic
1
2
3
4
Private Sub Text1_GotFocus()
  Text1.SelStart = 0
  Text1.SelLength = Len(Text1.Text)
End Sub
Сейчас разработчики как Builder так и MSNet посчитали это ненужным: раз мышкой кликнул по окну, значит хочешь что-то выбрать из того что есть и нечего выделять всё содержимое.
Чтобы извернуться и решить задачу на форуме VBNet мне предложили пользоваться таймером:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    Timer1->Interval = 50;
    Timer1->Enabled = false;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Timer1->Enabled = false;
    if(Edit1->Focused())  Edit1->SelectAll();
 
}
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
    Timer1->Enabled = true;
}
а если окон редактирования сотня? Может есть другое решение этой задачи?
Ещё один момент: Если содержимое окна полностью выделено и оно уже имеет фокус то клик по выделению должен это выделение снять. На всякий случай в архиве exe-шник на VB-6 для демонстрации как всё должно происходить.

Добавлено через 4 минуты
архив не прикрепляется, вот ссылка на него на облаке https://yadi.sk/d/JlThdT7FeZ236w
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2018, 11:37
Ответы с готовыми решениями:

Как организовать автовыделение содержимого TextBox при получении фокуса?
Всем здравствуйте. На VB-6 автовыделение реализовывалось так: Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength =...

Как в коде разметки сделать, изменение ширины Grid при получении кнопкой фокуса
Здравствуйте форумчане. У меня такой вопрос: есть грид, в нем кнопка. Как в коде разметки сделать, к примеру, изменение ширины этого...

Событие текстбокса - при получении фокуса
Какое событие выполняется при установки фокуса на определенный текстбокс?

31
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:02  [ТС]
Студворк — интернет-сервис помощи студентам
вот архив
Вложения
Тип файла: rar Ver1.2.rar (10.9 Кб, 0 просмотров)
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:04  [ТС]
вот скрин
Миниатюры
Как организовать автовыделение содержимого TEdit при получении фокуса от мыши?  
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:05  [ТС]
снимаю комментарий с "заглушки" - всё работает как часы.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
12.11.2018, 13:10
Не воспроизводится на XE4, в BCB6 воспроизвелось. Непонятно почему, но перенос описания __property (обоих) выше описания конструктора решил проблему.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:16  [ТС]
заработало! Спасибо.

Добавлено через 3 минуты
volvo, в конструкторе есть бесполезная неработающая строчка
C++
1
FAlignment  = taRightJustify;   // Бесполезная строчка
так как при загрузке формы все окна TEdit выравниваются почему-то по левому краю.
Что нужно сделать чтобы при загрузке формы все окна редактирования были выровнены по правому краю?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
12.11.2018, 13:22
Назначить всем Edit-ам
C++
1
Edit1->Alignment = taRightJustify;
в OnShow формы, я писал об этом выше, в 12-ом посте...
2
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:34  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
в OnShow формы
вставляю как в 12-м посте:
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::FormShow(TObject *Sender)
{
    Edit1->Selected = true;
    Edit1->Alignment = taRightJustify;
    Edit2->Selected = true;
    Edit2->Alignment = taRightJustify;
    Edit3->Selected = true;
    Edit3->Alignment = taRightJustify;
}
все окна вывровнены влево
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
12.11.2018, 13:47
У меня выравниваются вправо (я надеюсь, приведенную выше строку в конструкторе ты догадался закомментировать? А то происходит все очень просто: в конструкторе назначается выравнивание вправо, но отработать не может, потому что работает оно только при показе формы. А при показе ты еще раз назначаешь то же самое значение и оно не работает, потому что FAlignment не меняется) :
Миниатюры
Как организовать автовыделение содержимого TEdit при получении фокуса от мыши?  
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 13:58  [ТС]
ну конечно я не закоментировал "бесполезную" строчку в конструкторе.
Теперь всё ОК.
Понимаю, что достал, но не могу удержаться. Никогда не встречал конструкций типа
C++
1
2
3
4
5
6
7
8
9
10
11
        void __fastcall   SetAlignment(TAlignment Value)
        {
            const DWORD Alignments[3] = {ES_LEFT, ES_RIGHT, ES_CENTER};
            if(FAlignment != Value)
            {
                FAlignment = Value;
                ::SetWindowLongPtr(Handle, GWL_STYLE,
                    (::GetWindowLongPtr(Handle, GWL_STYLE) & ~(ES_LEFT | ES_CENTER | ES_RIGHT)) | Alignments[Value]);
                Repaint();
            }
        }
я так понимаю что здесь меняются порядковыми номерами (местами) значения констант ES_CENTER и ES_RIGHT?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
12.11.2018, 14:05
Нет. Здесь просто перед тем, как добавить в стиль нужную константу для нового выравнивания, из старого значения стиля убираются все возможные предыдущие константы, чтобы не было одновременно ES_LEFT | ES_CENTER, например. А как это можно сделать? Правильно, только логически перемножив старое значение с инверсией всех возможных констант, и потом уже добавив одну единственную, которая нужна.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
12.11.2018, 14:15  [ТС]
а это обязательное действие?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
12.11.2018, 15:26
Скорее да, чем нет. Потому что я совсем не уверен, что стиль ... | ES_CENTER | ES_RIGHT | ES_CENTER | ES_LEFT | ES_RIGHT отработает так, как хочется мне (а именно так будет выглядеть стиль, если не сбрасывать предыдущие значения). Вот ты бы что выставил в данном случае, выравнивание в середину, влево или вправо? Не знаешь. А как должен компилятор/система выбрать из двух вариантов, ни один из которых не имеет приоритета? Случайным образом? Я не привык полагаться на подобные решения компилятора, и всегда очищаю предыдущие значения перед тем, как выставить новое.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2018, 15:26

Дергание панели при получении фокуса
Столкнулся с такой проблемой, панель по определению не может иметь фокуса, поэтому вручную изменил, но при получении фокуса панелью,...

Обновление формы при получении фокуса
Условно есть 2 формы: в первой вносятся данные в поля во второй выполняются вычисления, в том числе используя данные из первой формы ...

Изменение цвета кнопки при получении фокуса при переходе по TAB
Здравствуйте! Подскажите пожалуйста: как настроить изменение цвета кнопки при получении фокуса при переходе по ТАВ (т.е. на клавиатуре,...

Изменение вида кнопки при получении и потере фокуса
Приветик всем. Возник вопросик по поводу кнопок. Хочу вставить нарисованные мною кнопки в проект, причем чтобы когда наводила на кнопку...

Запретить прокручивать скролл при получении фокуса (android)
Всем привет! Я заметил что при получении фокуса на textarea, в андроиде скролл автоматически перематывается, как поставить запрет на это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru