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

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

21.01.2018, 11:42. Показов 3382. Ответов 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
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
21.01.2018, 12:14
Не знаю, что тебе нужно в конечном итоге, но задачу можно решить так:
C++
1
Edit1->Enabled = 0;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
21.01.2018, 12:36
Инженер_3, читаем очень внимательно: How to hide the caret in a TEdit
1
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
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
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 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
Сообщений: 420
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
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
21.01.2018, 14:49
Что только не делают люди, вместо того, чтобы взять и сделать правильно...
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
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
Сообщений: 420
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
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 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
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,401
Записей в блоге: 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
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru