С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 417

Как скрыть моргающую каретку в поле Edit

21.01.2018, 11:42. Показов 3343. Ответов 21

Студворк — интернет-сервис помощи студентам
Есть поле Edit1, хочу туда залить цвет, но всю картину портит моргающая каретка.
Есть рекомендации для сокрытия каретки:
C++
1
HideCaret(Edit1->Handle)); // прячем
Но не работает. Что я делаю не правильно?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2018, 11:42
Ответы с готовыми решениями:

Каретку в начало Edit'a
нужно чтобы при переключении на контрол EDIT каретка переходила в начало на событие EN_SETFOCUS повесил POINT point; point.x=0; ...

Убирать каретку из Edit-а, когда на нем нет фокуса
мне нужно сделать так чтобы, при клике на форму, в поле ввода edit переставал мигать курсор и вообще пропадал (становился неактивным... не...

Сфокусировать каретку на поле для ввода штрих-кода
Привет всем, подскажите, если кто-нибудь знает, можно ли узнать с клавиатуры или сканера вводится текст, ну чтобы сфокусировать каретку на...

21
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
21.01.2018, 12:14
Не знаю, что тебе нужно в конечном итоге, но задачу можно решить так:
C++
1
Edit1->Enabled = 0;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
21.01.2018, 12:36
Инженер_3, читаем очень внимательно: How to hide the caret in a TEdit
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 417
21.01.2018, 14:13  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Edit1->Enabled = 0;
Мне казалось, что Edit1->Enabled=false не отображает фоновый цвет.
C++
1
2
3
4
5
6
Edit1->Color=clRed;
Edit2->Color=clYellow;
Edit3->Color=(TColor)0x0000ff77;
Edit1->Enabled=0;
Edit2->Enabled=0;
Edit3->Enabled=0;
Спасибо, всё получилось.

Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
читаем очень внимательно: How to hide the caret in a TEdit
Там английский и Делфи, а я ни в том ни в другом ничего не понимаю.
Как сказал один мудрец "Программирование надо начинать изучать с английского языка", а я поступил иначе.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
21.01.2018, 14:39
Лучший ответ Сообщение было отмечено Lelik-pahan как решение

Решение

Цитата Сообщение от Инженер_3 Посмотреть сообщение
Там английский и Делфи, а я ни в том ни в другом ничего не понимаю
Ну и напрасно. Ни без первого, ни без второго при программировании в Билдере не обойтись.

Все просто: в header-файл формы добавляешь несколько строк
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct TUMHideCaret
{
    UINT msg;
    TWinControl *control;
};
 
namespace Edit_NoCaret
{
    class TEdit : public Vcl::Stdctrls::TEdit
    {
    protected:
        DYNAMIC void __fastcall DoEnter()
        {
            ::PostMessage(Parent->Handle, WM_USER + 101, WPARAM(this), 0L);
        }
    };
};
#define TEdit Edit_NoCaret::TEdit
 
// дальше твой класс формы, с небольшой корректировкой
class TForm1 : public TForm
// ...
private:    // User declarations
    MESSAGE void __fastcall UMHideCaret(TUMHideCaret &msg)
    {
        ::HideCaret(msg.control->Handle);
    }
 
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_USER + 101, TUMHideCaret, UMHideCaret);
    END_MESSAGE_MAP(Vcl::Forms::TForm)
// ...
Это, собственно, всё. Теперь, сколько бы ты Edit-ов на форму не положил, ни в одном из них не будет отображаться каретка. Если Edit-ы будут лежать не на форме, а в другом контейнере (на Панели, например, или во Фрейме) -то каретка по прежнему будет отображаться.
5
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 417
21.01.2018, 14:46  [ТС]
Рано я обрадовался.
Edit->Enabled=0 делает "мёртвым" само поле - не реагирует ни на какие события.

У меня 64 Edit'а (8х8), в каждом свой цвет, кликаем по выбранному Edit - выбираем цвет.

Нашёл решение, хотя немного бредовое.
Закидываем на форму Timer.
В обработчике FormCreate() пишем:
C++
1
Timer1->Interval=10;
А в обработчике кнопки выбора цвета:
C++
1
Button1->SetFocus();
Кнопка всегда будет под фокусом.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
21.01.2018, 14:49
Что только не делают люди, вместо того, чтобы взять и сделать правильно...
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 417
21.01.2018, 16:38  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Что только не делают люди, вместо того, чтобы взять и сделать правильно...
Попробовал ваш код - не работает.
Ошибка: E2090 Qualifier 'Vcl' is not a class or namespace name
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
21.01.2018, 17:42
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Ошибка: E2090 Qualifier 'Vcl' is not a class or namespace name
Если используешь морально устаревшую версию IDE, например, BCB6, то просто удали в приведённом коде "Vcl::" в двух местах.
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 417
21.01.2018, 18:02  [ТС]
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Если используешь морально устаревшую версию IDE, например, BCB6, то просто удали в приведённом коде "Vcl::" в двух местах.
У меня очень старый BCB6 2001 года.
Я удалил даже больше - "Vcl::Stdctrls" и тоже работает.
А что означает "Stdctrls"?
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
21.01.2018, 18:16
Почитай, что такое namespace.
0
 Аватар для Intel4004
10 / 10 / 0
Регистрация: 27.04.2015
Сообщений: 39
21.01.2018, 21:15
Цитата Сообщение от Инженер_3 Посмотреть сообщение
У меня 64 Edit'а (8х8), в каждом свой цвет, кликаем по выбранному Edit - выбираем цвет.
Тогда уж лучше не TEdit использовать, а TPanel.
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
18.08.2018, 10:46
volvo, и всё таки есть ситуация когда каретка появляется:

Оставьте курсор на каком либо Edit. Да, пока каретки не видно.
Переключитесь мышкой на окно другого приложения (например, explorer) и вернитесь на приложение с нашим Edit, в котором находился курсор до того. Каретка появится не смотря ни на что.
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
18.08.2018, 11:05
вот проект на XE-4
Вложения
Тип файла: rar Ver1.0.rar (80.5 Кб, 1 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
18.08.2018, 11:24
Цитата Сообщение от jkrnd Посмотреть сообщение
Каретка появится не смотря ни на что.
WinXP/Win7 x64/Win8 x32 - не воспроизводится, так что, скорее всего, проблема где-то в какой-то определенной версии Windows. 10-ка что-ли опять?

Ну, на крайний случай положи на форму TApplicationEvents и в обработчике OnActivate запиши:
C++
1
2
3
4
void __fastcall TForm1::ApplicationEvents1Activate(TObject *Sender)
{
    ::PostMessage(Handle, WM_USER + 101, WPARAM(Edit1), 0L);
}
, тогда при возврате фокуса с другого приложения форме будет высылаться то же сообщение, и она будет гасить курсор.
1
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,361
Записей в блоге: 3
18.08.2018, 12:04
Цитата Сообщение от Инженер_3 Посмотреть сообщение
У меня 64 Edit'а (8х8), в каждом свой цвет, кликаем по выбранному Edit - выбираем цвет
Хм-м-м... А чем ColorBox не угодил?
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
18.08.2018, 12:22
Цитата Сообщение от volvo Посмотреть сообщение
Windows. 10-ка что-ли опять?
8.1

Добавлено через 4 минуты
Цитата Сообщение от volvo Посмотреть сообщение
void __fastcall TForm1::ApplicationEvents1Activate(TObje ct *Sender)
{
* * ::PostMessage(Handle, WM_USER + 101, WPARAM(Edit1), 0L);
}
помогло.

Не по теме:

как-то не очень доходит зачем нужно событие OnActivate формы если приходится пользоваться аналогичным событием приложения. В MSNet даже компонента такого нет, TApplication.

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
18.08.2018, 12:30
Цитата Сообщение от jkrnd Посмотреть сообщение
зачем нужно событие OnActivate формы
Для того, чтобы отлавливать переключение с одной формы твоего приложения на другую. Логично? А если ты переключаешься с другого приложения - то надо использовать событие OnActivate объекта TApplication (внезапно...)
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
18.08.2018, 12:50
volvo, Вот проект на XE-4. Одна форма главная. На ней кнопка. По кнопке загружается вторая форма. Закрываем вторую форму, видим что главная форма обрела активную рамку (получила управление). Событие OnActivate главной формы не происходит.
Вложения
Тип файла: rar Ver1.0.rar (81.4 Кб, 2 просмотров)
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
18.08.2018, 12:59
Цитата Сообщение от volvo Посмотреть сообщение
::PostMessage(Handle, WM_USER + 101, WPARAM(Edit1), 0L);
а не конкретно для Edit1? для всех TEdit на форме можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.08.2018, 12:59
Помогаю со студенческими работами здесь

Как скрыть курсор в edit?
как скрыть курсор в edit?

Как скрыть ненужные мне edit control-ы? (MFC)
Здравствуйте форумчане, нужна ваша помощь... Имею матричный калькулятор. Максимальная размерность которого 7 на 7(но не суть), суть...

Как скрыть поле в сводной таблице?
В области СТРОКИ есть ПОЛЕ "Номер" как его скрыть? Например 1 Иванов 20 2 Петров 30 3 Иванов 40 Нужно чтоб было: ...

Как правильно скрыть Ruchtext поле?
Как правильно скрыть RuchText поле?

Как скрыть поле формы file
У меня такая ситуация, в модальном окне должна быть кнопка Выбрать фото (выглядит она просто как прямоугольник с текстом внутри), при...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru