телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Firemonkey от просто към сложно. Delphi, FireMonkey, All-Access и други приятни изненади. Неща, които трябва да имате предвид

В контекста на този блог този проект е интересен преди всичко, защото е реализиран на FireMonkey и е невероятна демонстрация на възможностите на тази платформа. И точно миналата седмица беше пусната публична бета версия на продукта. По този начин читателите на блога могат да „почувстват“ нещо наистина сложно за себе си. FireMonkeyприложение.

Няколко думи за програмата. На първо място, трябва да се отбележи, че текущата версия на Sphere е позиционирана малко по-различно. Да, понякога се случва...

Нов SphereLiveТова не е просто още един пратеник. На първо място, това е инструмент, който ви позволява ефективно да организирате учебния процес. Позволява дистанционни лекции, частни консултации, индивидуални уроци и други подобни дейности. В същото време е оборудван с почти всичко необходимо за работа. Започвайки с уникална система за прехвърляне на файлове и завършвайки с най-мощната подсистема за таксуване.

На този етап цените за използване на продукта са доста достъпни. При ограничен брой слушатели и малко количество ресурси продуктът може да се използва безплатно.

Естествено, Сферата използва основното си предимство FireMonkey– крос-платформа. В момента приложението е налично в изданията на Windows и MacOS. Android версияочаква се всеки ден.

За мен обаче SphereLive е интересен преди всичко като иновативен продукт с цял набор от оригинални решения. Понякога е просто на ниво „... уау, как го направи?“ Между другото, един от разработчиците на Sphere активно участва в дискусии на форума, посветен на FireMonkey. Това само по себе си може да е причина да изтеглите приложението и да обсъдите технически проблеми директно с автора. Повярвайте ми, има какво да видите и какво да научите.

TListViewе един от ключовите компоненти за изграждане на интерфейс за мобилно приложение FireMonkey. Този компонент не е от най-лесните за използване; често изисква значително количество код, но предоставя на разработчика значителна свобода на действие. Разбира се, в приложенията, които можете да използвате TListBox, където всичко е много по-просто. Но TListBoxможе да е добро за показване на фиксиран брой записи, за извеждане на данни от източници на данни, определено трябва да използвате TListView.

Основните разлики между TListView и TListBox са:

  1. TListBoxItem- контрол, TListViewItem- Не
  2. IN TListBoxItemможете да добавите всякакви контроли с помощта на родител. IN TListVIewItem- Не.
  3. TListVIewItemсъхранява само данни за показване
  4. TListVIewItemизвършва рендиране на самите съхранени данни чрез метода Рендиране
  5. Благодарение на действителното ръчно чертане в TListVIewItem се постига увеличение на скоростта и ниска консумация на памет (съхраняване само на подходящи данни)
  6. За да създадете своя собствена версия TListViewItem, трябва да създадете свой собствен клас артикул, да внедрите необходимите данни в него (например време) и да създадете редактор на място за редактиране на време, да го регистрирате и т.н.

Самият факт за повишена производителност и намалена консумация на памет е убедителен аргумент в полза на използването TListView. Но има и още нещо.

В много Androidприложения трябваше да наблюдавам следното изпълнение на списъци. Когато щракнете върху елемент от списък (Елемент, ако се придържате към избраната терминология), се извършва определено действие. Обикновено се извиква нов формуляр за редактиране на данните. Но когато натиснете и задържите (Long Tap), се извършва съвсем различно действие. И тези събития не се пресичат. С други думи Android приложенияса в състояние ясно да разграничат „продължително натискане“ от „обикновено“. Освен това нито едно от тези събития не се активира при превъртане на списъка. Добър пример е списък с писма в Yandex Mail.

Първо бих искал да поздравя всички читатели на блога с изминалите празници и да им пожелая всичко най-добро през следващата година.

По очевидни обстоятелства не съм правил традиционен новогодишен отчет, нито съм правил планове за годината. Животът обаче не стои неподвижен, работата продължава и в света на Delphi се случват определени събития. Ангажирам се да публикувам селекция от пропуснати „новини от света на Delphi“ по време на коледните празници в близко бъдеще. Междувременно ще ви разкажа за новото устройство, което закупих.

Можете да намерите характеристиките на официалния сайт. И субективното впечатление е много приятно. Забележителен е фактът, че устройството е буквално натъпкано със собствен софтуер от производителя. А продавачите получиха и впечатляващ набор от софтуер като подарък. Смартфонът работи доста бързо и напълно оправдава цената си (около $200). Между другото, купих предишния си телефон GSmart 1362 за горе-долу същите пари преди 2 години. Но, както вероятно се досещате, основният интерес за мен беше как ще работят FireMonkeyприложения.

Преди да продължим историята за таймера, две новини.

Първо, беше пусната първата актуализация на XE7. По традиция той е достъпен за регистрирани потребители. Можете да намерите списък с коригирани грешки. Исках да видя как ще се държи приложението в актуализираната среда. Всъщност не трябваше да се правят корекции, въпреки че все още имаше място за експерименти.

Втора новина. Действие специални оферти Embarcadero удължен до края на годината:

Е, сега директно към темата на публикацията. По принцип всичко, което ни остава, е да се опитаме да стартираме вече създаденото това приложениеза Android. За целта използваме това, за което писах в предишни публикации. А именно нов. Отстраних грешки в това приложение на Nexus 7, съответно добави представяне на таблет с Android 7″. Дизайнът трябваше да бъде коригиран само малко.

Вероятно само мързеливите хора не са написали свой собствен таймер. И в контекста на поддържането на разработката за мобилни платформи, задачата за писане на таймер в Delphi като цяло може да се счита за култова задача. Така че си помислих защо не като пример за развитие FireMonkeyПриложението не може да анализира таймера. За Android, разбира се. Разбира се, това ще бъде точно моето виждане за задачата, която макар и да не е особено трудна, все пак има своите нюанси. Може би имате някакви коментари или предложения, би било чудесно да ги обсъдите в коментарите. В никакъв случай не съм експерт в писането. мобилни приложения, така че всеки ваш коментар ще бъде ценен за мен.

Ние ще разработваме таймер, според английското разбиране на този термин. Тоест на екрана ще се покаже циферблат и четири бутона - „Старт“, „Пауза“, „Стоп“ и „Отказ“. Обратното броене ще бъде в посока напред (т.е. времето ще се увеличи). Опцията, в която се настройва времето и обратното броене е по английска терминология се казва Stop Watch, може би ще се опитам да я внедря по-късно. Приложението, върху което ще работим, се доближава по функционалност до хронометъра.

Delphi XE7 ни позволява значително да опростим процеса на разработка, поради факта, че вече можем да създадем и отстраним грешки в истинско приложение за Win32 и след това просто да добавим изпращане на формуляри за необходимите мобилни устройства и с малко корекция да получим работещ мобилен телефон приложение. Звучи твърде добре, за да е истина? Може би. Но искам да тествам това твърдение, като изпълня задачата.

Колкото по-често ме питат колегите в частни разговори дали е възможно да се разработват мобилни приложения FireMonkeyили това е прототип, а не производствено решение?

Мисля, че сега мога да осигуря дори крайните скептици.

Моят близък приятел и колега Тагир Юмагузин ми разказа за проекта, в който участва преди много време. Сега, когато този проект е в състояние на предварителна версия, решихме, че това описание ще бъде интересно за общността на Delphi. По същество това е наистина голям проект, реализиран във ФМ. Говорим за проекта Sphere Live. Малка статия, посветена на този проект, беше публикувана наскоро в Habrahabr.ru. Алексей Глизин, началник на отдела за развитие, се съгласи да разкаже повече за проекта, като вземе предвид аудиторията на моя блог.

А.Б.– Алексей, какъв е вашият проект като цяло?

А.Ж.: – Идеята не се е появила веднага и моментално. Преди проекта „Сфера“ екипът ни работеше по проекта, в който бяха внедрени поточни аудио/видео технологии. По-късно създадохме собствен софтуер, който успя да достави мултимедийни потоци до неограничен брой потребители, включително обратната връзка. Но трябваше да включим функция за таксуване.
Приложението трябваше да отговаря на няколко изисквания. Първо, максимално опростена организация на конференции или предаване на участниците, чиято сума не можем да предвидим. Второ, най-важното, е да дадем възможност на нашите клиенти да печелят с нашето приложение и да намалим сложността на системата, количеството инструменти, необходими за постигане на целта. Лесното организиране на курсове, уебинар или просто консултация.

Малка забележка за паметта FireDACв текущата версия Delphi XE6. Но първо, няколко думи за това къде да търсите отговори на въпроси относно FireMonkey. Тук рускоезичните потребители са в привилегировано положение.

Докато се подготвях за събитието в Харков като част от световното турне на RAD Studio XE5, срещнах малък проблем при работата с SQLiteкато се използва FireDAC. Ако е попълнено Windows приложениепрехвърлете базата данни заедно с приложението към Android, Низовете на кирилица в базата данни вече не се четат (вместо букви се показват въпросителни знаци). Въпреки това, ако попълните базата данни директно мобилно устройство, руските знаци се четат съвсем правилно. Попълнени данни от базата данни приложение на трета страна, или в Делфиприложенията, използващи други компоненти за достъп до данни, също се показват нормално. Срещата не успя да намери решение и трябваше да цитирам известен украински футболен специалист: „Ще го разберем!“

За разлика от последния успях да се справя с описания проблем. По подразбиране при свързване към SQLite V FireDACИзползва се низов формат ANSI.

Ако принудите Unicode да бъде инсталиран, тогава всичко ще работи както трябва. Но има и един неприятен момент. Като промените формата на низа, ще трябва да пресъздадете списъка с полета във всички набори от данни, както и да свържете отново компонентите, отговорни за показването и въвеждането на данни. Ето защо е по-добре да се погрижите за кодирането веднага.

В предишните части на тази мини-серия се занимавахме със създаването на база данни, нейната структура и свързването с нея от Delphi. В тази част предлагам да разбера показването на данни от таблици, като започнем с най-простия случай.

Прост редактор на таблични данни, обикновено част от сложно приложение. Обикновено използвам отделен формуляр за редактиране на таблици. Да започнем със списъка с хранителни стоки. На първо място, трябва да създадем DataSet за достъп до данните в таблицата. В нашия случай е напълно възможно да използвате компонента TADTable. Нека го поставим в DataModule и да посочим стойността на свойството Връзка. В редактора на свойства TableNameще се появи списък с таблици, от който избираме таблица Продукти. Ако сте направили всичко правилно, можете да присвоите имота Активенстойност True. По-добре е незабавно да преименувате компонента (например ADTProduct). След това обикновено създавам набор от полета за DataSet. Извикайте редактора на полето (щракнете два пъти върху компонента) и контекстно менюизберете елемента Добавяне на всички полета.

За тези, които не са наясно, ще обясня същността на тази операция. Тук създаваме предварително дефиниран набор от полета DataSet. Ако не направим това ръчно в режим на проектиране, тогава по принцип няма да се случи нищо лошо. В RunTime този набор ще бъде създаден автоматично. Но все пак предпочитам да го създавам ръчно. Причините за това са няколко. Първо, по-удобно е да управляваме набор от полета, защото можем сами да създаваме допълнителни (изчислени или търсещи) полета в режим на проектиране. Можем също да променим свойствата на самите полета. Освен това получаваме възможност за достъп до полета в кода по името на компонента TField, което според мен значително опростява писането на код.

Както в случая с приложението VCL, ще свържем компонента към набора от данни TDataSource. Този компонент ще осигури връзката между набора от данни и визуалните контроли. Свойството DataSet на компонента трябва да препраща към нашия набор от данни (ADTProduct). По-долу предоставям фрагмент от DFM файла

обект ADTProduct: TADTable IndexFieldNames = "ID" Връзка = ADConnection UpdateOptions. UpdateTableName = "Product" TableName = "Product" Left = 64 Top = 192 обект ADTProductID: TADAutoIncField FieldName = "ID" Origin = "ID" ProviderFlags = [ pfInWhere, pfInKey] ReadOnly = Истински краен обект ADTProductTitle: TStringField FieldName = "Title" Произход = "Заглавие" Размер = 50 краен обект dsProduct: TDataSource DataSet = ADTProduct Left = 120 Top = 192 end

Моля, обърнете внимание на една интересна функция: файлът с формуляр DataModule се записва не във формат FMX, като обикновен формуляр на FireMonkey, а във формат DFM, като във VCL.

Следващата стъпка е да създадем процедура за отваряне на набор от данни, която ще трябва да извикаме в RunTime при стартиране на програмата. Нека го създадем в същия DataModule. Кодът на процедурата е изключително прост:

процедура TDM. ConnectToDB ; beginADConnection. Отваряне(); ADTProduct. Отваряне(); край ;

Ще поставим извикването на процедурата в манипулатора на събитие OnCreate за DataModule.

Измина достатъчно време, откакто терминът FireMonkey стана повече или по-малко познат, ако не за всички разработчици, то поне за тези, които използват Delphi. През това време се появиха книги за FireMonkey, статии за FireMonkey и записи за FireMonkey в множество блогове. Четенето на всичко това е много интересно. Но никаква теория не може да замени практиката. И аз, както мнозина преди, имах сърбеж да опитам да напиша нещо с помощта на FireMonkey.

Възникна обаче проблем. По някаква причина реших, че просто трябва да реализирам някакъв не много сложен работещ проект.

За да обясня защо това се оказа проблем за мен, ще е необходимо малко (пише ми се, лиричен) отклонение. Екскурзия в миналото ми като разработчик. Обяснете някои от моите виждания за програмиране с помощта на Delphi.

Трябва да кажа, че започнах да използвам Delphi на Windows 3.1, тоест от първата версия. И оттогава уча VCL. Учих го в оригинал, така да се каже. Погледнах, получих достъп, проследих източниците. Отново и отново.

Известно е, че в различни моменти наборът от компоненти, доставян с Delphi, включва компоненти на трети страни, които са предназначени да запълнят празнини във VCL и които вероятно са преминали през някакъв вид контрол на качеството, преди да бъдат включени. Някои от тези компоненти продължават да се доставят и днес. Вземете същия Инди. Не искам да обидя никого, това е чисто мое лично мнение, което важи и за мен, като разработчик на компоненти: нито един комплект не е бил толкова дълбоко обмислен и толкова добре внедрен като огромния и разнообразен VCL. Не, не претендирам да бъда крайната истина и, разбира се, в самия VCL има много грешки, решения, които предизвикват неразбиране, предизвикват отхвърляне и с които искате да не сте съгласни. Но винаги съм имал впечатление за някакъв единен стил. По мое мнение има красиво и силно ядро ​​във VCL, което поддържа целия дизайн на Delphi и около което са изградени както софтуерната инфраструктура, така и самата общност на разработчиците. Благодарение до голяма степен на VCL, отново според мен, слуховете за смъртта на Delphi все още си остават слухове. И когато доставката на VCL включва компоненти от разработчици на трети страни, веднага се забелязва, че са различни.

Но тогава идва моментът и чувам, че VCL е технология, която е остаряла. Технология, която трябва да остане в миналото. Разработчиците трябва да реализират всичките си нови проекти на FireMonkey, а що се отнася до старите... би било хубаво да ги прехвърлите на нови писти. FireMonkey навсякъде и по всяко време. И го чувам от различни източници. И то доста упорито. Не, никой не убива VCL. той остава с нас. Но вече не е номер едно. Той трябва да стане резерва. Поне така разбирам какво се говори за бъдещето на продукта.

По принцип разбирам тази ситуация. Поехме курс за мултиплатформа и, което е по-важно, кросплатформа. В крайна сметка какво е VCL? Библиотека с визуални компоненти. Библиотека от визуални компоненти. Може да не сте съгласни с това. Например, винаги съм смятал, че много невизуални компоненти и не компоненти, а просто класове са неразделна част от VCL, а огромен брой класове и компоненти на трети страни са продължение, разширение на VCL. Е, не мога да мисля за наследниците на TDataset като част от VCL. Въпреки че, например, терминът DBExpress Library предполага, че това, така да се каже, не е VCL. Очевидно Embarcadero наистина разделя монолитния, от моя гледна точка, VCL на няколко отделни библиотеки. Не, разбира се, не напълно отделно, но въпреки това. И ако приемем тази гледна точка, FireMonkey има за цел да замени именно визуалната част на VCL (как все пак да наричам пълна библиотекакласове и компоненти, може би Borland Component Library?).

Какви са визуалните компоненти, включени в изградената библиотека? Около основните елементи от ниско ниво, предоставени от операционната система. Дръжки на прозорци, шрифтове, самите прозорци, елементи за въвеждане, съобщения, контексти на устройства и много други - това не са концепции на библиотеката, предоставена с Delphi, а концепции операционна система. Да, точно Windows. И ако искате да изградите междуплатформена библиотека, тогава е логично да се откажете от инфраструктурата, предлагана от операционната система, която изпълнява програмата, написана с помощта на библиотеката.

Точно това се опитва да направи FireMonkey. Те се опитват да създадат инфраструктура, базирана на основните механизми, поддържани в различни операционни системи, способна да замени услугата, която самите операционни системи предлагат.

Много хора си спомнят опититекросплатформена не само библиотеката, но и самия Delphi. Успоредно с Delphi 6 бяха пуснати продуктът Kylix и библиотеката CLX. Всичко това беше направено, за да можете да разработвате за Linux. Linux обаче няма много основни понятияпо отношение на графичен интерфейс на прозореца, който Windows има. Интерфейсът на прозореца за Linux обикновено не е роден феномен. Това е незадължително приложение. И трябваше да напиша някаква синтетична библиотека. С негова помощ беше възможно да се напише програма както за Windows, така и за Linux. Все още обаче си спомням чувството не на разочарование, а по-скоро на дразнещо неудобство, което изпитах, когато се опитах да използвам аналогови визуални компоненти от CLX. Започнаха да ми липсват много неща. Това, което бях свикнал да правя без да се замислям, когато разработвах с VCL, се оказа трудно, напълно различно или просто невъзможно за правене с CLX.

Чувствах се приблизително по същия начин, когато преминах от BDE към DBExpress. Стар, познат от Field Test BDE (Borland вече го беше използвал в Quattro Pro за Windowsи в Paradox за Windows и се наричаше ODAPI, а след това IDAPI и беше с глава и рамене по-горе, според мен, ODBC на Microsoft) беше обявен за остаряла технология, която трябва да отстъпи място на нова библиотека в новите проекти. В началото винаги нещо ми липсваше в DBExpress, особено знания.

В същото време по никакъв начин не искам да коря или критикувам нито самите изброени по-горе библиотеки, нито решенията, довели до появата им. Говорим само за моите впечатления, понякога за първи впечатления.

Сега вероятно става малко по-ясно защо решението да се напише малък работещ проект с помощта на FireMonkey доведе до редица проблеми. В продължение на много години при разработването на дизайни, проекти и планове се изгради определен стереотип, определен шаблон какво и как да се прави. И в моя случай трябваше да се изправя пред факта, че шаблонът трябва да бъде променен. Тъй като не можете да прехвърлите всичко, с което сте свикнали да използвате VCL, към проект, изграден на FireMonkey.

При стартирането на проекта изпитах известно чувство на дежавю. А именно чувство на дискомфорт. Например обичайните входни елементи нямат много свойства. Техники, които са се утвърдили в практиката, базирани на трикове, свързани с познаването на някои функции на операционната система, не работят в нов контекст. Да не говорим, че някои компоненти са се променили радикално.

Е, и още нещо важен нюанс. Какви проекти обикновено трябва да правите на работа, ако тя (работата) не е свързана с писане на компилатори, системи за моделиране или нещо друго силно научно? Мисля, че за повечето това е разработване на нещо, което включва използване на бази данни. Освен това нещо силно научно може също да използва услугите, предоставяни от СУБД.

Тук ме чакаше нова засада. По някаква причина, когато на практика срещнете факта, че FireMonkey не съдържа елементи, фокусирани върху работата с данни, съхранявани в базата данни, се оказвате, че не сте съвсем готови за това (меко казано). Въпреки че вече съм чел за това много пъти и знам (теоретично) какво да използвам. Говорим за Live Bindings.

Не искам да участвам в спор за това дали истински готини програмисти трябва да използват db-aware компоненти или не. нов проект, бях изправен пред факт: трябваше да свикна както с новите визуални компоненти, така и с новия начин за извличане на данни за показване, редактиране и в крайна сметка запазване. Което отново не е нито лошо, нито добро. Просто при мен се случи така.

Това е мястото, където искам да завърша публикацията си за първите впечатления. Следват истории за това какво и как е преодоляно по време на работата по проекта.

Какво е FireMonkey?


FireMonkey (FMX) е рамка за разработка на различни платформи както за настолни системи (Windows, Mac OS + сървърна поддръжка на Linux се планира в близко бъдеще), така и за мобилни устройства (iOS и Android), използвайки езика Delphi/C++.

Особености:

  • единна кодова база за всички платформи;

  • всяка контрола (визуален компонент) може да бъде контейнер (родител) за други компоненти;

  • наличието на много напреднала относителна подредба (20 вида) на компонентите върху формуляра;

  • LiveBinding ви позволява да свържете всякакъв тип данни или информация към всеки потребителски интерфейс или графични обекти;

  • наличие на стилове форма/компонент;

  • Multi-Device Preview ви позволява да персонализирате визуалното представяне за всяка платформа;

  • FireUI Live Preview - показва външния вид на приложението на реални устройства в реално време.

Възможности:

  • използване на нативния API на всяка платформа, както и възможността за извикване на нативни библиотеки на трети страни;

  • взаимодействие с всички сензори (GPS, акселерометър, компас, Bluetooth (включително LE) и други);

  • поддръжка за насочени известия, IoT;

  • поддръжка на асинхронни HTTP заявки;

  • поддръжка за повечето бази данни (MsSQL, MySql, Oracle, PostgreSQL, MongoDB и др.);

  • работа с Cloud Service (Amazon, Azure);

  • Поддръжка на Android Service.

Минуси (в момента):

  • липса на поддръжка за персонализиране на нативни класове;

  • внедряването на конкретни неща е или невъзможно (джаджи, разширения (iOS) и т.н.) или е необходим танц с тамбура (фонова услуга, излъчване на съобщения и т.н.);

  • Персонализацията на Splash screen (първоначалния екран) меко казано липсва;

  • FMX контролите използват собствено изобразяване (визуализация, чертеж), което е чисто визуално подобно на естественото;

  • използването на естествени контроли включва големи движения на тялото;

  • когато има много вложени компоненти, се случват невероятни неща: приложението се срива на различни места, губи фокус, замръзва и т.н.;

  • информационното съдържание на отстраняване на грешки в приложение на мобилни платформи е нула;

  • описанията на грешките на мобилните платформи са сведени до безполезното „Грешка 0x00000Х“;

  • времето за компилиране иска да бъде най-доброто за средни и големи проекти;

  • необходимостта от използване на файл за полиране на мобилни приложения за всяка платформа;

  • няма поддръжка за архитектура Intel Atom;

  • неадекватна цена в сравнение с конкурентите.

Професионалисти:

  • много активно развитие както на продукта, така и на общността напоследък, поддръжка на все повече нови технологии;

  • наличието на огромен брой безплатни и търговски компоненти;

  • Скоростта на приложението е много близка до естествената;

  • много напреднал визуален редактор и среда като цяло, наличие на стилове;

  • възможността да тествате приложение на Win и едва след това да го разположите на устройства, което значително ускорява разработката;

  • смяна на режим/платформа с едно движение на китката;

  • PAServer осигурява лесно взаимодействие с MacO при разработване за Apple OS;

  • Поддръжка на 3D графики от кутията.

В заключение искам да кажа, че през последните няколко години FireMonkey се превърна в професионален инструмент за кросплатформена разработка на бизнес приложения и др. Много недостатъци постепенно се отстраняват и с всяка версия продуктът става все по-модерен и самодостатъчен, а съществуващият скептицизъм към самия език Delphi, свързан с много години стагнация, също изчезва. Писането на нови проекти в FireMonkey е „безопасно“ и обещаващо.

TRippleEffectклас за създаване на ефект, който прилага вълни на вълни към текстурата на визуални обекти.

Центърът на пулсацията е посочен в свойството Център. Други аспекти на пулсацията могат да бъдат персонализирани с помощта на свойства Амплитуда(Амплитуда), Съотношение, И Фаза(Фаза). Броят на пулсационните вълни се определя от свойството Честота(Честота).

Следващата таблица показва резултатите от влиянието TRippleEffectкъм PNG снимка, поставена във формуляра (с помощта на ). Центърът на пулсацията е в средата на изображението. Други имоти TRippleEffectсе използват с техните стойности по подразбиране ( Амплитуда = 0,1, Съотношение = 1,5, Честота = 70, Фаза = 0).

В този урок ще използвате някои основни ефекти на изображението в приложението FireMonkey.

Стъпка 1: Приложете ефекта към изображението.

Във FireMonkey прилагането на ефект на изображение към изображение е прост процес. Просто създайте компонент, който може да съдържа изображение и след това приложете един от ефектите на изображението.

    Създайте ново приложение FireMonkey ( Файл> Ново> Настолно приложение FireMonkey> Приложение HD FireMonkey).

    Поставете компонента върху формата.

Изберете компонента в лентата с инструменти.

Поставете TImage върху формуляра в дизайнера.

    Можете да видите, че компонентът не е поставен в центъра на дизайнера на формуляри. Както е показано на фигурата, искате размерът на областта на изображението да бъде възможно най-голям. За да направите това, изберете компонента във формуляра за проектиране, след което променете свойствата Подравнете V alClientв инспектора на обекти, така че размерът на компонента да стане същият като клиентския размер на областта на формуляра.

    Изберете изображението, към което искате да приложите ефекта. Компонентът съхранява картината в свойството Bitmap. Изберете собственост Bitmapв обектния инспектор и използване Редактиране...за да изберете изображение.

  1. Сега можете да изберете ефект за изображението. От палитрата с инструменти изберете TRippleEffect.

Сега RippleEffectпоказани в прозореца Структура.

За да приложите ефект, той трябва да бъде дефиниран като дете на друг компонент. В такъв случай, RippleEffect1трябва да се определи като дете Изображение1. За да направите това, плъзнете RippleEffect1и го поставете Изображение1в панела на структурата.

  1. Сега можете да видите това RippleEffectвече работи с Form Designer.

  1. Променете имота ЧестотаНа 20 .

Стъпка 2: Приложете анимационен ефект към RippleEffect.

    Маркирайте RippleEffectна панела Структура.

    Изберете имот Фазав Object Inspector и изпълнете командата Създайте нова TFloatAnimationот падащото меню.

Уверете се, че FloatAnimation1определен като дъщерен елемент RippleEffect1.

    Промяна на свойствата FloatAnimation1както по-долу:

И накрая, нека добавим процедура за събитие OnMouseMoveДа се ​​.

06.03.2013 г. 12:46 ч

Страдах много поради липсата на компонент на браузъра в FireMonkey. Добре познатият проект Delphi Chromium Embedded все още включва поддръжка на FMX в най-новата версия. Но въпреки факта, че е минало доста време, авторът не бърза да добави поддръжка за FMX2. Накрая трябваше да взема ситуацията в свои ръце.

Компонентът TChromiumFMX от официалното събрание работи доста добре в FireMonkey (в XE2), но дори не се компилира във FMX2. Трябваше да разбера малко как работи и да го поправя. За щастие не се наложиха големи промени.

Във FMX2 две неща, от които се нуждае компонентът, са променени.

Първо, TBitmap вече няма свойствата ScanLine и StartLine. Директният достъп до съдържанието на TBitmap е преработен (чудя се защо?) и вече е достъпен чрез класа TBitmapData, който връща метода TBitmap.Map.

Е, вторият, по-известен - Platform .* вече го няма, сега трябва да получите необходимия интерфейс чрез TPlatformServices.GetPlatformService. Всичко тук е доста просто и няма никакви проблеми.

Не го тествах особено креативно, но за моите цели компонентът е доста подходящ - можете да преглеждате уебсайтове през него. Изтегли го. Вероятно ще изпратя редакциите си и на автора, който може да сметне за необходимо да ги добави към официалната версия.

30.07.2012 г. 02:43 ч

Джейсън Саутуел предлага да се разработи набор от обвивки на FireMonkey за собствени Windows/OSX контроли и набира пари за това. Като начало смята да събере 20 хиляди долара.

Идеята е ясна. Съществуващите компоненти на FireMonkey се визуализират с помощта на Delphi почти от нулата, което, от една страна, до голяма степен гарантира тяхната междуплатформена функционалност, но от друга страна, в резултат на това получаваме компоненти, които не изглеждат съвсем естествено и в двете поддържани в момента операционни системи . И това не е толкова лошо - освен външен вид, вие трябва самостоятелно да развиете логиката на тези компоненти. Например RichEdit е доста сложен; повтарянето на неговата логика сами в рамките на FireMonkey не е тривиална задача. Както VCL, така и CLX не преоткриха колелото, а използваха готово такова.

Сега идват лошите новини. Всичко работи по време на изпълнение, но не намерих начин да добавя новия си тип раздел към дизайнера на елементи. И изглежда, че всички списъчни контроли имат същия проблем: TListBox, TGrid и т.н. Отначало много ми хареса подходът към тяхното изпълнение, но сега дори някак си се съмнявам. Търсене в интернет показа, че не съм сам с този проблем.

Помощта мълчи, в кода също не намерих нищо. Наистина ли няма начин? Това би било изключително неприятно.



Свързани публикации