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

C++Builder XE-4 не работает AutoSize в TEdit

13.08.2018, 21:05. Показов 2505. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для TLabel свойство AutoSize срабатывает как положено. Почему для TEdit AutoSize не срабатывает? BorderStyle установлено в bsSingle. Попробовал в BC++Builder6 - там та же песня. В чём секрет?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2018, 21:05
Ответы с готовыми решениями:

RAD XE :: TEdit :: if (BorderStyle == bsNone) {AutoSize не работает}
Всем желаю здравствовать:) Embarcadero® C++Builder® XE Version 15.0.3890.34076 AutoSize компонента TEdit перестает работать, если...

Image->AutoSize не работает(
Добрый вечер! У меня код: размер блока Image не меняется в зависимости от размера прямоугольника. int x2 = length + 30; int...

Компонент tEdit. преобразование данных. C++ builder
Все привет, подскажите пожалуйста как быть, у меня есть несколько компонентов edit, я преобразую их к типу int, потому что мне надо...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
13.08.2018, 21:11
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Поведение AutoSize в TEdit и в TLabel - разное:
для TEdit:
Note: AutoSize only adjusts the height of the edit control
для TLabel подгоняется как высота, так и ширина.
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
13.08.2018, 21:29  [ТС]
volvo, а своё свойство можно подставить ( как в https://www.cyberforum.ru/post7194199.html)?
Только я сам этого конечно сделать не смогу

Добавлено через 12 минут
я поступаю так:
C++
1
Edit1->Width = Form1->Canvas->TextWidth(Edit1->Text);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
13.08.2018, 21:42
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
я сам этого конечно сделать не смогу
Чего там делать-то? Мне просто проверить негде. Как-то вот так:

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
33
34
35
36
37
38
39
40
// в Header-файле, перед описанием класса формы
namespace Autosized_Edit
{
    class TEdit : public Stdctrls::TEdit
    {
    private:
        bool FAutoSized;
        void SetAutoSized(bool AValue)
        {
            if(AValue != FAutoSized)
            {
                FAutoSized = AValue;
                if(AValue)
                    Change();
            }
        }
 
    protected:
        DYNAMIC void __fastcall Change(void)
        {
            if(FAutoSized)
            {
                TControlCanvas *ccv = new TControlCanvas;
                ccv->Control = this;
                Width = ccv->TextWidth(Text) + 10; // размер - по желанию
                delete ccv;
            }
            Stdctrls::TEdit::Change();
        }
 
    public:
        __fastcall virtual TEdit(Classes::TComponent* AOwner)
            : Stdctrls::TEdit(AOwner)
        {
            FAutoSized = false;
        }
        __property bool AutoSized = { read=FAutoSized, write=SetAutoSized };
    };
};
#define TEdit Autosized_Edit::TEdit
, возможны опечатки, если что - поправь, но идея - именно такая.

Добавлено через 1 минуту
Цитата Сообщение от jkrnd Посмотреть сообщение
Form1->Canvas->TextWidth
Ну и зря. А если на форме и в Edit-е кому-то взбрендит разные шрифты выставить, твой код куда надо будет девать?
3
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
14.08.2018, 06:23  [ТС]
volvo, Всё работает как задумано. Опечаток нет. Спасибо
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
15.08.2018, 05:54  [ТС]
вместо
Цитата Сообщение от volvo Посмотреть сообщение
Width = ccv->TextWidth(Text) + 10; // размер - по желанию
я вставил:
C++
1
2
                ccv->Font = this->Font;
                Width = ccv->TextWidth(Text);
ширина стала определяться точнее.

Не по теме:

Ещё вопрос по TEdit, правда не по теме. Скрываю каретку в окне редактирования так: HideCaret(Edit1->Handle). Приходится вставлять эту строку в нескольких обработчиках событий, но к сожалению "каретка" хоть на мгновение, но появляется опять. Может в буилдере есть на этот счёт свои методы?

0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.08.2018, 13:27
Цитата Сообщение от jkrnd Посмотреть сообщение
Ещё вопрос по TEdit
jkrnd, у меня в тестовом варианте нормально работает такая конструкция__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    OldEditWindowProc = Edit1->WindowProc;
    Edit1->WindowProc = EditWindowProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditWindowProc(TMessage &msg)
{
    OldEditWindowProc(msg);
    if(msg.Msg==0x84) HideCaret(Edit1->Handle); 
}
//---------------------------------------------------------------------------
Это в начале Unit.cpp; а в Unit.h в секции private пишутся две строки__
C++
1
2
  void __fastcall EditWindowProc(TMessage&);
  TWndMethod OldEditWindowProc;
И, вроде, курсора нет.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
15.08.2018, 13:33
Вот тут я показывал, как скрыть каретку в TEdit (разумеется, можно добавить какой-то ограничитель в виде своего свойства, или проверки Tag-а, чтобы каретка была скрыта только в нужных Edit-ах, а не во всех, которые есть на форме). Ничего не мигает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2018, 13:33
Помогаю со студенческими работами здесь

Не работает AutoSize в RadioButton или как изменить размер динамически!
Здравствуйте! У меня не помещаеться текст в RadioButton.Text, при RadioButton.AutoSize = true ничего не происходит, текст просто...

Почему данный код работает в builder 6 а в builder 10 не работает?
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED); SetLayeredWindowAttributes(Handle, 0, 128,...

Работает на С++ Builder 6, но не работает на С++ Builder 2010(Embarcadero)
Здравствуйте форумчане! Есть кот рабочий на С++ Builder 6, а на С++ Builder 2010(Embarcadero) ругается при вызове Log. В чем...

В VS 2015 не работает рекурсивная функция, которая работает в C++Builder
Добрый день! Перенес блок кода из старого учебного проекта под C++Builder, который там всегда стабильно работал, на VS 2015. Одна из...

TreeView autosize
Всем привет. Кто-нибудь когда-нибудь задавался целью сделать TreeView по размеру содержимого Nodes? Есть компонент TreeView в который...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru