Лидеры
Популярный контент
Показан контент с высокой репутацией 07.02.2016 в Сообщения
-
Тема оказалась настолько интересна что занялся ей подробней. Мы с zairkz убили много времени, чтобы понять как выкрасить в один цвет без полупрозрачности, взяв скриншот и фотошоп определили, что затемнение происходит на 40% Решение родилось само собой, затемнить цвет ToolBar'a на 40% и цвет выровняется. Казалось бы можно осветлить цвет для подложки и цвет тоже выровнится, но например белый или светлые цвета нельзя еще осветлить. также написал процедуру для определения высоты статус бара и панели навигации procedure androidGetBounds(out statusBar, navigationBar: Integer); {$IFDEF ANDROID} var KeyCharacterMap: JKeyCharacterMap; resourceID: Integer; ScreenService: IFMXScreenService; sScale: Single; {$ENDIF} begin navigationBar := 0; statusBar := 0; {$IFDEF ANDROID} if TOSVersion.Check(5, 0) then // вроде только работает с 5.0 ниже нет устройства проверить begin sScale := 1; if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then sScale := ScreenService.GetScreenScale; //получаем скейл resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('status_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then statusBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then // проверка на существование наэкранных кнопок или физических begin resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navigationBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); end; end; {$ENDIF} end; и в модуле FMX.Platform.Android нужно изменения внести (если вы используете измененный модуль для Intel'а) // Fix by Flying Wang & CallInUIThread( procedure begin if (not PlatformAndroid.GetFullScreen(nil)) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN <> TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS <> TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS) // fix by ZuBy ... SystemBar.zip6 баллов
-
Новые ключи, которые не предусмотрены опциями проекта, можно добавить (например) при помощи бесплатной утилиты iOS9 Fix от TMSSoftware2 балла
-
Вопрос про свайп в лево свайп в право
Равиль Зарипов (ZuBy) и ещё один отреагировал Axbor за тема
Есть компонент GestureManager. Бросим его в проект. Указываем у TImage->Touch->GestureManager на наш GestureManager. Включаем в TImage->Touch->Gestures нужные нам жесты (на вашем случае Left и Right). Потом в событии OnGesture TImage запишем следующее: void __fastcall TForm1::Image1Gesture(TObject *Sender, const TGestureEventInfo &EventInfo, bool &Handled) { switch(EventInfo.GestureID) { case sgiLeft: // произошло свайп в лево Handled = true; break; case sgiRight: // произошло свайп в право Handled = true; break; } }2 балла -
Также ковырял в свое время Xamarin, но так и не понял - на кой черт мне писать на шарпе, если по сути пишешь на яве - проще тогда сразу яву использовать. А про Qt - как только дело доходит до чего либо более серьезного, чем окошки с кнопками, начинаются костыли. Опять же - лично мое, сугубо субъективное мнение, основанное на уровне, достаточном для написания нескольких графических фильтров - возможно и не прав. А вот что совсем опечалило - поддержка CSS. По сути, это чертовски удобно, для тех, кто знает CSS. Ага, щас - CSS то обрезанный по самое немогу - на кой черт заявлять про поддержку). А вот цена для Rad Studio - да, кусючая. Чего бы не говорили, мол "если проект не принесет нескольких десятков тыщ уе, то на кой он нужен", для рядового пользователя, который пытается чего то сделать - неподъемно.2 балла
-
Очень не хватает примеров на C++. Решил поделится опытом. Рассмотрим создание собственного "ListBoxItem"а на C++. И так начнем. Для начало создадим стиль для нашего "ListItem"а. В моем случае оно выглядит так: Структура выглядеть следующим образом: А вы сразу можете создать собственный стиль. Создадим класс для нашего "Item"а. Я назвал его TMyListBoxItem. Нужно знать следующие вещи: ApplyStyle() вызывается когда стиль загружен. FreeStyle() когда стиль выгружен. GetDefaultStyleLookupName() когда стиль не задано берется названые стиля по умолчанию. FindStyleResource("стиль") ищет в стиле ресурс с заданным названием. ListBox автоматически очищает из невидимых "Item"ов стиль что бы избежать от расходы на память. И заново загружает когда оно видимо. При этом вызывается соответствующие функции приведенные выше я приведу только некоторые кусочки кода. Остальное всё можете посмотреть в прикреплённых файлах. class TMyListBoxItem : public TListBoxItem { private: // Переменные для хранения данных System::UnicodeString FTimeTo; System::UnicodeString FTimeFrom; //.... // Визуальные компоненты TText* FTextTimeTo; TText* FTextTimeFrom; //... // Функции для присваивания данных, это нужно при написании "properties" void __fastcall SetTimeTo(const System::UnicodeString Value); void __fastcall SetTimeFrom(const System::UnicodeString Value); protected: void __fastcall ApplyStyle(); void __fastcall FreeStyle(); System::UnicodeString __fastcall GetDefaultStyleLookupName(); virtual void UpdateStyleData(); __published: __property System::UnicodeString TimeTo = {read=FTimeTo, write=SetTimeTo}; __property System::UnicodeString TimeFrom = {read=FTimeFrom, write=SetTimeFrom}; public: __fastcall TMyListBoxItem(System::Classes::TComponent* AOwner); }; Теперь напишем сами функции. void __fastcall TMyListBoxItem::ApplyStyle() { // Вызов метода предка TListBoxItem::ApplyStyle(); TFmxObject *StyleObject; // Поиск ресурса из стиля. Посмотрите в скрине, там есть ресурс с названием "timeto" типа TText StyleObject = FindStyleResource("timeto"); // dynamic_cast нужен для корректного преобразования типов. Если тип найденного ресурса не является TText то указателю будет присвоен NULL FTextTimeTo = dynamic_cast<TText*>(StyleObject); StyleObject = FindStyleResource("timefrom"); FTextTimeFrom = dynamic_cast<TText*>(StyleObject); UpdateStyleData(); } void __fastcall TMyListBoxItem::FreeStyle() { // Стиль выгружен из памяти. Нужно очистить указатели что бы избежать ошибок FTextTimeTo = NULL; FTextTimeFrom = NULL; TListBoxItem::FreeStyle(); } System::UnicodeString __fastcall TMyListBoxItem::GetDefaultStyleLookupName() { // название стиля для нашего "Item"а по умолчанию return "mylistboxitemstyle"; } void TMyListBoxItem::UpdateStyleData() { if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; if(FTextTimeFrom) FTextTimeFrom->Text = FTimeFrom; } void __fastcall TMyListBoxItem::SetTimeTo(const System::UnicodeString Value) { FTimeTo = Value; if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; } Вот и всё. Остается только добавит в наш проект ListBox и button для проверки. Вот функция создания нашего "Item"а: void __fastcall TForm1::Button1Click(TObject *Sender) { TMyListBoxItem *Item = new TMyListBoxItem(this); Item->Parent = ListBox1; Item->StyleLookup = "customstyle1"; Item->TimeFrom = "11:20"; Item->TimeTo = "12:50"; } Скриншот программы: В архиве мой класс и стиль. Для корректного отображения некоторых символов нужен fontcustom Какие вопросы задавайте. Отдельное спасибо Ярославу за мануал на дельфи: http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/ Администраторы и модераторы, прошу подкорректировать если что то неправильно. ListBoxItem.zip1 балл
-
В Deployment уберите галку с файла styles.xml1 балл
-
Теория
Brovin Yaroslav отреагировал SergeyIT за тема
Насколько я Вас понял, речь идет просто о передаче зависимости от одного класса к другому. Обычно различают передачу поведения от передачи собственно данных. Если речь о простом наборе данных, как правило неизменяемых, то их транслируют созданием специального класса (обычно конкретного, но можно и интерфейсом) - их так и называют DTO (Data transfer object). И наполняют примитивными типами. Если это нечто более общее, с элементами поведения, то это уже не данные, а именно зависимость (и поведение, и данные). Извиняюсь за философские отступления. 1. Создайте интерфейс ISomeDependency, объявите в нем протокол (набор свойств и методов), далее создайте класс, который реализует этот протокол. 2. Организуйте способ передачи этого интерфейса из одного класса в другой: свойством или методом. Например, TTargetedClass.SetSomeDependency(someDependency : ISomeDependency); Все, используйте зависимость по своему усмотрению.1 балл -
RAD 11 на подходе?
Евгений Корепов отреагировал Gingercat за тема
Доброго времени суток. Навеяно постом SergeIT. Несмотря на кучу недостатков, по большей части связанных именно с с++ (удобство работы в студии, отсутствие нормального дополнения и тд), на данный момент абракадабра вне конкуренции по скорости и простоте работы. Не могу сказать про кроссплатформенность, а вот разработка под десктоп - да. Безусловно, C# под десктоп здорово, но когда критична скорость обработки - сами понимаете. Так уж сложилось, что я привязан к различным видам обработки графики. Так вот - чего бы там не говорили про оптимизацию кода (лишние вызовы в ассемблере и тд), на данный момент из коробки, быстрее всего Rad Studio. Конечно, мне далеко даже до среднего уровня с++, но все же. Работа в Visual Studio с битмапами еще тот геморой (одно заполнение структуры bitmap))) При использовании нативных! BitBlt, Dib-секций и еще множества различных способов, скорость обработки ниже, чем при использовании обертки TBitmap. Полный разбор fullHd картинки в Visual Studio занимает от 7 до 14 мс, при этом в студии 3 - 6. Проверенно тоннами тестов. Конечно, можно сказать - OpenCv. Да, пока вы решаете стандартные задачи по обработке. Как только шаг в сторону - начинаешь понимать, что проще самому писать, нежели пользоваться готовым. Ну и про Qt. Очень удобно - чтобы не говорили. Но есть несколько но: 1 - хвост библиотек (статичная сборка возможна, но там далеко не все гладко). 2 - жесточайшее навязывание своих стандартов - это уже не с а сQt. Не знаю, как дела с кроссплатформенностью - не пробовал. По скорости на посередине. При этом, использование нативных функций винды (именно без костылей) карается (понятно, кроссплатформенность). Однако, либо пользоваться bitmapom нативным (тогда какой смысл вообще в Qt, если все нужно выписывать ручками), либо... bitBlt не возможен (как и множество другого) - вырезали, остается использование довольно медленного QImage, с кучей оговорок. В Rad Studio - пожалуйте: нужно - дернул из GDI функцию, нужно - из среды, нужен кусок ассемблера - пожалуйста. Про ассемблер в Qt умолчу))) Вот и выходит, что Rad Studio на данный момент, по сути лучшая. Прошу не судить строго (далеко не профессионал в плюсах), но опыт кой какой имеется. Так что пущай развиваются))1 балл -
RAD 11 на подходе?
egorea1999 отреагировал SergeyIT за тема
Вы меня простите, Господа. Но позвольте высказать мнение человека нового в Object Pascal, из .NET пришедшего. Тьфу-тьфу, дай им всем Бог в Embarcadero доброго здоровья и процветания. Оглянитесь вокруг, ничего ж и близкого нет, даже отдаленно напоминающего того, к чему пришли в Embarcadero за последние годы с кроссплатформенностью! Уму не постижимо. Взять Java (хоть к теме напрямую не относится) - на Android идет сырец-порт JavaFX, сервисы и плюшки - за деньги в частном порядке. Xamarin видели? Хотите поднять настроение - погуглите. Выглядит это так: MAMA MILA RAMU... С# по Java (что-то дико нелепое). Если человек знает что такое Activity, зачем ему C#? Или Java менее элегантней (учитывая полное родство). MONO - мычание из преисподней, GUI нет фактически. Да вот возьмите хотя бы Unity 3D. Как-то на конференции человек оттуда проговорился: Вы ведь не знаете - мы 90% времени правим баги платформозависимые, чтобы у Вас почти все работало. У Microsoft судороги предсмертные в части всего, что не Windows 10. Почитать куда их бросает каждый месяц - жуть. Кто-то испрашивал по поводу поддержки Windows Phone в одном из топиков. Да даже если бы технически это было возможно, то они ж меняют API каждые полгода на него: то Windows Phone Silverlight, то HTML5, то DirectX C++ (взамен XNA Windows Phone 7)... Поддержка разработчиков ушла в StackOverflow, MSDN скоро рекламу начнет размещать о таблетках для мужчин. Ну, кто еще остался? Qt? Это не моя тема. Мне трудно думать про указатели, когда надо думать про логику. Увы, не дано... Не владею темой. Так что пока нас не слишком много в сравнении с Китаем, есть шанс, что быстро ответят на заданный вопрос... Скоро эта халява закончится...1 балл -
Объектная модель делегатов
dnekrasov отреагировал Brovin Yaroslav за вопрос
Если требуется сделать хранилище универсальных данных, то я, конечно, бы лучше взял бы за основу TValue, словарь и снабдил бы это все хелпер методами для получения данных требуемых типов. И опять же все зависит от задачи. Абстрагирование вещь хорошая, но ею стоит пользоваться там, где она жизненно необходима.1 балл -
Можно ли прокрутить TScrollBox программно?
AngryOwl отреагировал Brovin Yaroslav за вопрос
Без анимации можно любым из этих способов: // Установка координат окна просмотра (Левый верхний угол) ScrollBox.ViewportPosition := TPointF.Create(0,0); ScrollBox1.ScrollTo(0, 0); // Аналог ViewportPosition // Сдвиг на вектор ScrollBox.ScrollBy(-10, -10); С анимацией так: procedure TForm3.FormCreate(Sender: TObject); begin ScrollBox1.AniCalculations.Animation := True; ScrollBox1.AniCalculations.BoundsAnimation := True; ScrollBox1.AniCalculations.TouchTracking := [ttVertical, ttHorizontal]; end; // Сам сдвиг ScrollBox1.AniCalculations.MouseWheel(5, 10);1 балл