Autor Téma: Zajimavost a info o komponentach  (Přečteno 399 krát)

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 365
  • Karma: 15
    • Verze Delphi: FPC :D
Zajimavost a info o komponentach
« kdy: 11-05-2020, 19:45:59 »
Zdarec,

abych se jen neptal co a jak, prinasim jednu zajimavost. Pro nasi aplikaci potrebujeme zobrazt kus 2d prostoru s nejakym manipulatorem, kamerovym zaznamem apod. Puvodne jsem na to sel tak, ze jsem seskladal komponenty jak byly treba a posleze se ukazalo, ze to bylo nedostatecne, nebot v aplikace by bylo prima +- visualizovat totez na vice mistech (treba configuracni panel). Jasne muzem tam dat x editu, ale.. Zkusil jsem tedy napsat prvni komponentu pro FMX, ktera obsahne vse potrebne. A prisel pozadavek, sdileni urcitych informaci mezi jednotlivymi zobrazenimi. Idealni se v tomto pohledu jevilo, udelat class promenou s polem tehto hodnot a odkazat na ne pres class property. To se uplne nepovedlo (uz nevim ani proc), takze varianta 2 byla, toto pole hodnot strcit do implementation, pres klasicke property k nim pristupovat pres index (abychom se fakt neupsali jen na setterech a getterech). Vse fungovalo jak melo, parada, krasne to visualizovalo apod. Problem nastal pouze po pridani druhe instance komponenty na form - ta totiz pri vytvoreni definovala prazdne konfiguracni parametry a rpepsala je tedy i v prvni instanci. Drobnost a logicka. Nicmene povedlo se. Mame tedy komponentu, jejiz geometricky model (onoho manipulatoru) je sdilen mezi jednotlivymi instancemi dane komponenty, stejne tak pozice tohoto manipulatoru a dalsi vlastnosti. Naopak zvlast property jsme nastavili na veci, kde se zobrazeni rozdeluje - treba vynechani kamer a pridani poli pro geometricky model, ci naopak kalibrace kamer, ktera nezobrazi dalsi veci. Vysledkem je tedy jedinna komponenta, s jednou sadou configuracnich parametru, ktere se ihned projevi kde je treba. Jedinny zadrhel, ktery jsme ale nijak nezjistovali bylo to, ze pokud se nejaka property s vychozi hodnotou v konstruktoru jinou nez 0, nastavila v object inspektoru (ci jinde) na hodnotu 0, po chvili preskocila na tuto vychozi hodnotu z konstruktoru. Nijak jsme to prozatim neresili, jen v konstruktoru mame hodnoty nastavene na 0 jako vychozi (jednalo se primarne o int ci single property).

Dalsi priklad komponenty, kterou jsem si vyrabeli je specialni Arc, ktery je vyoseny. Stacilo vzit tShape, podedit a doplnit kod pro vypocet pozice obrazu.

Z vyse uvedeneho prace lze take rict, ze v FMX se daji delat takoveto komponenty jednoduseji (nez treba ve VLC), diky roznym zakladnim stavebnim prvkum ala Rect, Circle apod. Vtipne to akorat je ve chvili, kdy mame jednotlive komponenty v samostatnych baliccich a nektera z nich vyzaduje jinou z nich. Vse funguje, ale obcas delphi pri startu zarvou, ze soubor balicku nebyl nalezen ve Windows/System.. Staci ho rebuildnout a restartovat delphi a je tam. Pokud to udelame jinak, muze odstranit komponentu z formu, coz je samozrejme neprijemne.

Taktez bych drobne zminil, ze i kdyz to tedy vypada,z e FMX prichazim na chut, a jo, je to tak, obcas jsou tam veci naprosto nepochopitelne az zbytecne - treba schovani onKeyDown u TabControlu. Takze je misty videt, ze se nekdy uplne nepremyslelo a proste to nejak napsalo.

Jako by bylo prima, mit moznost si bookmarknout sestavu komponent s vlastnimi pouzivanym hodnotami properties, tohle je uplne zbytecnej boj. Nebo treba vylepsit FormDesigner tak, aby pochopil, ze se holt dnes layoutuje a layoutuje (takze mit moznost si treba strcit do Component Listu i sestavu stylu layout s editem a captionem apod (Toto jde nastesti +- dobre udelat prave pres komponentu odvozenou od tLayout, ale to by bylo mznostvi vlastnich komponent, ktere by bookmark vyresil lepe.

Nicmene, asi tomu FMX zacinam prichazet na chut.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux