antarey
-
Постов
284 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные antarey
-
-
Можно и так. Не проверял поведение, если подвязать едиты к базе - лейбелы подымутся? Сработает OnChange?
-
Как определить что Edit привязан к полю таблицы базы данных?
-
В некоторых приложения на Андроиде и на некоторых сайтах( сейчас к сожалению не могу вспомнить где видел) используется прикольная анимация 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
Может кто знает лучший способ?Пример в атаче, структура проекта на скрине
-
Есть вариант - на кнопку кинуть картинку, а на картинку BitmapListAnimation. Но все должно быть проще
-
24 минуты назад, Rusland сказал:
Наверное нужен FloatAnimation чтобы меняло значение ImageIndex
Не получается. В FloatAnimation в списке PropertyName нету ImageIndex , а ручная установка ничего не дает
-
Добрый день.
Есть кнопка,и в нее есть свойство ImageIndex.
Задача - сделать мигающую иконку кнопки. Желательно без таймера. Пробовал ColorAnimation - ни в какую не хочет мигать. Добавлял ColorAnimation к самой кнопке и в стилях
-
Ясно, всем спасибо
-
Переделал код. В принципе работает, только немного обрезается текст сверху и снизу.
Rusland не знаю как в делфи - в си округлять не обязательно - свойство Height - float. -
Поставил, и на ресайз тоже. Я вроде где-то читал/слышал что в 10 добавили изменение высоты итема в свойства но в упор не нахожу такого.
22 часа назад, Rusland сказал:try FTextLayout.Text:='m'; finally FTextLayout.EndUpdate; end;
Зачем етот код?
К сожалению не работает. У меня итем создается отдельной процедурой с пустым текстом. В другой процедуре прописывается текст. -
Согласно мануалу реализовал код
void TfrmMain::CalculateItemHeight(TObject *Sender) { TTextLayout* FTextLayout = TTextLayoutManager::TextLayoutForClass(TTextLayoutManager::DefaultTextLayout); TListBoxItem *ListItem = dynamic_cast<TListBoxItem*>(Sender); FTextLayout->BeginUpdate(); try { FTextLayout->Text = ListItem->Text; FTextLayout->MaxSize = TPointF(ListItem->Width, 1000); FTextLayout->WordWrap = ListItem->WordWrap; FTextLayout->Font = ListItem->Font; FTextLayout->HorizontalAlign = ListItem->TextAlign; FTextLayout->VerticalAlign = ListItem->VertTextAlign; } __finally { FTextLayout->EndUpdate(); } ListItem->Height = FTextLayout->Height; }
Прописал события для итема, итемы создаю в рантайме, и ничего
Как автоматически подгонять высоту итема под текст? Что я не так сделал? -
Нда, иногда и примеры надо смотреть , спасибо за подсказку.
-
В етом событии отображается прогресс загрузки файла
-
ZuBy, ето я понимаю и ето все реализовано. Просто для NetHTTPClient есть событие NetHTTPClientReceiveData и оно не отрабатывается. Ето событие надо как-то подвязать через синхронизацию.
-
TTask::Create и TTask::Run не сильно отличаются по реализации , но я так и не понял как синхронизировать событие компонента NetHTTPClient внутри задачи
-
Как в провести синхронизацию для задачи?
Есть NetHTTPClientvoid __fastcall TfrmMain::NetHTTPClientReceiveData(TObject * const Sender, __int64 AContentLength, __int64 AReadCount, bool &Abort) { if (AContentLength > 0) { pbMain->Value = ((float)AReadCount / (float)AContentLength) * 100.f; } else pbMain->Value = AReadCount; } //-------------------------------------------------------------------- void __fastcall TfrmMain::SpeedButton1Click(TObject *Sender) { _di_ITask tsLoadNewComp = TTask::Create([&](){ std::auto_ptr<TStream> inputStream(new TFileStream(System::Ioutils::TPath::Combine(TDirectory::GetParent(ParamStr(0)), "index.dat"), fmCreate)); NetHTTPClient->AcceptEncoding = "gzip, deflate"; NetHTTPClient->Get("..............", inputStream.get()); }); tsLoadNewComp->Start(); }
Как сделать, чтобы в задаче tsLoadNewComp отрабатывалась процедура NetHTTPClientReceiveData?
-
Проапдейтился, все нормально, заходим
-
Ясно.
Евгений Корепов, спасибо. Надо ставить апдейт -
-
ZuBy, ну это мне видал снифер. Убрал эту строку - эффекта ноль
-
Есть необходимость прочитать личные сообщения для сайта forum.ru-board.com.
TStringList *DataList = new TStringList(); DataList->Add("action=dologin&inmembername=USER&inpassword=PASSWORD=http%3A%2F%2Fforum.ru-board.com%2F"); TStringStream *DataStream = new TStringStream(DataList->Text); TStringStream *ResponseStream = new TStringStream(); try { NetHTTPClient->Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; NetHTTPClient->AcceptEncoding = "gzip, deflate, lzma"; NetHTTPClient->AcceptLanguage = "ru,en-US;q=0.8,en;q=0.6,uk;q=0.4"; NetHTTPClient->ContentType = "application/x-www-form-urlencoded"; NetHTTPClient->UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.52 (Edition beta)"; NetHTTPClient->Post("http://forum.ru-board.com/misc.cgi", DataStream, ResponseStream); NetHTTPClient->Get("http://forum.ru-board.com/messanger.cgi?action=inbox", ResponseStream); } __finally { Memo1->Lines->Clear(); Memo1->Lines->Add(ResponseStream->DataString); }
И в мемо получаю - незарегеный пользователь.
Если убрать строку
NetHTTPClient->Get("http://forum.ru-board.com/messanger.cgi?action=inbox", ResponseStream);
в мемо видно что авторизация успешная.
Что я не так делаю? Как правильно со страницы логина перейти и прочитать данные со страницы личных сообщений?
-
Всем спасибо за советы, вроде процесс пошел
-
Axbor , TNetHTTPClient не требует библиотек опен ссл?
-
Axbor , ошибка та же
-
Axbor, еще нет, щас проверю
Сысоев Максим до андроида еще не дошел, хотел сначала проверить на винде
Анимация TextPromt для TEdit
в Прочие вопросы
Опубликовано
Да к любой, через LiveBindings