Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


antarey

Вопрос

В некоторых приложения на Андроиде и на некоторых сайтах( сейчас к сожалению не могу вспомнить где видел) используется прикольная анимация 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

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
1 минуту назад, antarey сказал:

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

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

Ссылка на комментарий
  • 0
Только что, Равиль Зарипов (ZuBy) сказал:

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

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

Ссылка на комментарий
  • 0
  • Модераторы

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

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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