• 0
antarey

Анимация TextPromt для TEdit

Вопросы

В некоторых приложения на Андроиде и на некоторых сайтах( сейчас к сожалению не могу вспомнить где видел) используется прикольная анимация TextPromt.
На словах - TextPromt внутри едита, когда кликаеш на едите -TextPromt подымается над едитом и меняет цвет.

Я реализовал так - Для едита чилдреном добавил лейбл, а для лейбл чилдреном FloatAnimation и вот код

// ---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Enter(TObject *Sender) {
    TEdit * LEdit = dynamic_cast<TEdit*>(Sender);

    if (LEdit) {

        if (LEdit->ChildrenCount >= 3) {
            if (LEdit->Children->Items[2]->ClassName() == "TLabel") {
                TLabel * LLabel = dynamic_cast<TLabel*>(LEdit->Children->Items[2]);
                if (LLabel && LLabel->Children->Items[1]->ClassName() == "TFloatAnimation") {
                    TFloatAnimation * animation = dynamic_cast<TFloatAnimation*>(LLabel->Children->Items[1]);
                    if (animation) {
                        animation->StopValue = -20;
                        if (LEdit->Text == "" || LLabel->Position->Y == 0) {
                            animation->Start();
                            _di_ITextSettings Settings;
                            if (LLabel->GetInterface(Settings)) {
                                Settings->TextSettings->FontColor = TAlphaColor(claBlue);
                                Settings->StyledSettings = Settings->StyledSettings >> TStyledSetting::ssFontColor;
                            }

                        }
                    }
                }
            }
        }
    }

}

// ---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender) {
    TEdit * LEdit = dynamic_cast<TEdit*>(Sender);

    if (LEdit) {

        if (LEdit->ChildrenCount >= 3) {

            if (LEdit->Children->Items[2]->ClassName() == "TLabel") {

                TLabel * LLabel = dynamic_cast<TLabel*>(LEdit->Children->Items[2]);
                if (LLabel && LLabel->Children->Items[1]->ClassName() == "TFloatAnimation") {

                    TFloatAnimation * animation = dynamic_cast<TFloatAnimation*>(LLabel->Children->Items[1]);
                    if (animation) {

                        animation->StopValue = 2;
                        if (LEdit->Text == "") {
                            animation->Start();
                            _di_ITextSettings Settings;
                            if (LLabel->GetInterface(Settings)) {
                                Settings->TextSettings->FontColor = TAlphaColor(claBlack);
                                Settings->StyledSettings = Settings->StyledSettings >> TStyledSetting::ssFontColor;
                            }

                        }
                    }
                }
            }
        }
    }
}

// ---------------------------------------------------------------------------

Все отлично работает, но есть один нюанс - когда подвязываешь едит к полю таблички - лейбл перекрывает текст едита, оно то и правильно - я по едиту не кликал.
Посему вопрос - как заставить переместиться все лейбелы всех едитов у которых не пустой текст  после открытия таблицы .
Не хочется  делать для всех едитов Control->EnumControls
Может кто знает лучший способ?

Пример в атаче, структура проекта на скрине 

TextPrompAnamation.zip

Знімок екрана (43).png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 ответов на этот вопрос

  • 0

Я сделал вот так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Можно и так. Не проверял поведение, если подвязать едиты к базе - лейбелы подымутся? Сработает OnChange?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

К какой базе? Да у меня OnChange работает

Telegram Documents.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, antarey сказал:

Да к любой, через LiveBindings

Не пользуюсь таким. Но чисто теоретически все должно работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, Равиль Зарипов (ZuBy) сказал:

Не пользуюсь таким. Но чисто теоретически все должно работать

Немного глупый вопрос - а как с базами работаешь? через переменные?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ээм, прямой коннект и локальные базы не использую. Поэтому все через трех звенку, не datasnap если что. Обычный рест протокол

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу