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

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

21.01.2018, 11:42. Показов 3393. Ответов 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,023
21.01.2018, 12:14
Не знаю, что тебе нужно в конечном итоге, но задачу можно решить так:
C++
1
Edit1->Enabled = 0;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru