Programovanie poslepu – dá sa to?

vložil Radek Červinka 6. února 2017 20:58

Narodil som sa v čase, keď počítače neboli bežnou súčasťou domácnosti a hoci na strednej škole sme už informatiku mali, veľmi mi to nepomohlo. V 11-tich rokoch som totiž prišiel o zrak a tak bolo nemysliteľné, aby som si sadol za počítač a niečo na ňom urobil. Až v druhej polovici 90-tych rokov sa začalo hovoriť o tom, že aj nevidiaci budú môcť používať počítač a to vďaka špeciálnym programom – čítačom obrazovky – screenreaderom – ktoré budú zabezpečovať komunikáciu počítača s nevidiacim. To som bol už na vysokej škole a ako technický typ som po tejto novinke hneď siahol a stal sa aktívnym užívateľom Windows. Čoskoro sa ale ukázalo, že nie všetko je tak, ako sa zdá.

Čo je čítač obrazovky a ako funguje?

Čítač obrazovky sa snaží rozpoznať na obrazovke objekty a vyčítať z nich ich popisok alebo obsah. Treba si však uvedomiť rozdiel medzi tým ako vníma obrazovku vidiaci človek a čítač. Kým človek jedným pohľadom obsiahne celú obrazovku a vyberie si z nej to čo potrebuje, čítač môže v jednej chvíli sprostredkovať iba jednu informáciu a to tú, ktorá je práve pod kurzorom. Nevidiaci teda musí sám pomocou klávesnice presúvať kurzor či už po prvkoch okna pomocou tabulátora alebo po položkách zoznamu či riadkoch textu šípkami, a čítač mu následne oznamuje, čo je práve pod kurzorom. Z toho vyplýva, že ak sa na niektorý objekt nedá pomocou klávesnice dostať, nevidiaci užívateľ sa o ňom ani nedozvie a nemá ani možnosť ho použiť. (Výnimkou je titulok okna a stavový riadok, ktoré si síce tiež nevedia privlastniť fokus, no čítače ich spravidla vedia prečítať po stlačení nejakej klávesovej skratky..)

Rovnako sú pre čítač neviditeľné texty, ktoré sú graficky vykreslené či už na formulári alebo v nejakej grafickej komponente. Programátorsky je to vždy iba zhluk pixelov s rôznymi vlastnosťami. Ak sa k takémuto grafickému dielku priprogramuje udalosť onclick, môže vzniknúť vzhľadovo krásna komponenta, ktorá je ale pre čítač úplne neviditeľná. Napríklad tlačidlo Install v novom inštalátore Delphi. S čítačom spustíte inštalátor, odsúhlasíte licenciu a všetko ostatné, ale samotnú inštaláciu už z klávesnice nespustíte.

Čo je prístupná aplikácia?

Pod pojmom „prístupná aplikácia“ rozumieme aplikáciu, ovládateľnú čítačom obrazovky. Veľmi zjednodušene možno povedať, že prístupná aplikácia je taká, ktorá používa štandardné ovládacie prvky a objekty, tieto sú dostupné z klávesnice a majú korektné popisy. Žiaľ, ako v minulosti tak aj dnes nie každá aplikácia tieto podmienky spĺňa, preto hoci na internete existuje záplava softwaru všetkého možného druhu, nevidiaci môže siahnuť len po tých programoch, ktoré sú prístupné čítaču obrazovky.

Aké čítače dnes existujú?

V prostredí Ms Windows je najpoužívanejším čítačom obrazovky komerčný Jaws (www.freedomscientific.com) alebo NVDA (www.nvaccess.org), ktorý si môžete stiahnuť a vyskúšať bezplatne. Súčasťou systému Windows je MS Narrator, ktorý sa postupne zlepšuje, no ešte zďaleka nedosahuje kvality čítača, použiteľného pri každodennej práci.

Systém Linux vlastný integrovaný čítač nemá, je však možné použiť program Orca.

Ak vlastníte zariadenie s operačným systémom Android, ios alebo osx, máte v ňom už integrovaný čítač obrazovky, ktorý stačí len aktivovať. V Androide je to Google Talkback a v zariadeniach od Applu je to VoiceOver.

Prečo Delphi

Keďže svoj počítač som veľmi rýchlo zdolal, chcel som ísť ďalej a chcel som preniknúť do tajov programovania. Chcel som si sám vytvoriť nenáročné programy, ktoré by suplovali iné, na internete síce dostupné ale čítačom neprístupné aplikácie. Pýtal som sa skúsených programátorov a dostal mnoho tipov, no narážal som na totálne neprístupné vývojové prostredia. Napokon som skončil pri Freepascale, ktorý sa síce čítačom nedal ovládať vôbec, no jeden známy ma naučil písať kód v Notepade a kompilovať ho externe cez kompiler FPC. Takto som však vedel robiť iba konzolové aplikácie a ja som chcel viac, no písať ručne v Notepade aplikácie pre Windows bolo nad moje sily. Tu prišiel iný kamarát a poradil mi Delphi. Vyskúšal som na jeho radu staršiu verziu 6 a objavil prístupné ide prostredie a možnosť vytvárať aplikácie pre Windows bez toho, že by som ako laik musel ručne vytvárať triedy a objekty, ktorým som vtedy vôbec nerozumel. Stačilo pridať na formulár pár komponent, napísať kód a bolo to. Ideálne pre mňa, ktorý som s programovaním iba začínal. Tak som sa stal nadšencom Delphi a dodnes túto jednoduchosť oceňujem, pretože stále som iba programátor-amatér a profesne sa pohybujem v úplne iných oblastiach, čo mi nedáva dostatok času a možností na hĺbkové štúdium informatiky.

Delphi, prístupnosť a programovanie bez zraku

Verzia 6 mi plne vyhovovala, pretože bola veľmi dobre prístupná čítačom obrazovky. Samozrejme, nemožno si pod tým predstaviť, že som Delphi ovládal tak, ako vidiaci. Opäť pripomínam, že všetko ovládanie sa musí diať z klávesnice a ťahanie objektov po obrazovke myšou neprichádza do úvahy. Delphi 6 však ponúkalo ku všetkému alternatívne riešenia. Ako teda vznikali moje aplikácie v Delphi 6?

1. Pridanie komponent na formulár

Ak som potreboval pridať na formulár novú komponentu, nepoužil som paletu na hlavnej obrazovke, pretože tá nebola čítačom vôbec prístupná. Nedali sa tam šípkami vyberať jednotlivé komponenty. Našťastie D6 mal v menu Wiev položku Components list, kde bolo možné komponenty vybrať v klasickom zozname a pridať ich na formulár

2. Vzhľad formulára

Fáza, ktorá je pre mnohých možno banálnou záležitosťou, pre mňa vždy znamená otročinu. Ak som mal na formulári 15 objektov a nechcel som, aby vidiaci používateľ po spustení mojej aplikácie uvidel veľkú kopu v strede obrazovky, musel som prvky nejako rozmiestniť. Využíval som na to prácne vlastnosti top a left každého objektu a počítal, aké by asi mali mať prvky hodnoty, aby sa neprekrývali. Ako príklad uvediem jednoduché okno na zadanie IP adresy a portu na pripojenie klienta k serveru. Mám formulár o veľkosti 500x400, dve komponenty tedit, dve tlabel a dve tlačidlá tbutton. Ak si predstavím, že okno bude mať akoby tri riadky, v prvom bude prvý label a edit, v druhom druhý a v treťom tlačidlá, musím si okno rozdeliť na tri časti a umiestniť objekty tak, aby bol label vždy vľavo a edit dostatočne vpravo. Urobím to asi nejako takto:

Tlabel1.top:=50;tlabel1.left:=100;
Tedit1.top:=50;tedit1.left:=300; (hádam to bude stačiť)
Tlabel1.focuscontrol:=tedit1;

Tlabel2.top:=150;tlabel2.left:=100;
Tedit2.top:=150;tedit2.left:=300; (hádam to bude stačiť)
Tlabel2.focuscontrol:=tedit2;

Tbutton1.top:=250;tbutton1.left:=200; (nech sú tlačidlá trochu ďalej od kraja)
Tbutton2.top:=250;tbutton2.left:=300;

Skúste si na základe týchto čísel predstaviť ako asi bude okno vyzerať. Situácia je samozrejme hodne zložitejšia, ak je na obrazovke viac prvkov alebo tam majú byť aj väčšie komponenty napr. nejaký zoznam alebo tmemo pre zápis textu. Chceto vždy riadnu dávku času a predstavivosti.

Hoci som tu použil zápis v podobe zdrojového kódu, väčšinou som tieto hodnoty nastavoval v Object inspectore alebo priamo v dfm súbore, ktorý na moje veľké šťastie nie je binárny.

3. Nastavovanie ďalších vlastností

Object inspector je v celku dobre prístupný, takže zmena vlastností je v podstate jednoduchá. Na začiatku som iba dlho riešil otázku, ako do OI načítať žiadanú komponentu, ak ich už mám na formulári viac. Nakoniec som však zistil, že ak si zobrazím objektový strom (alt+shift+F11) a na žiadanej komponente dám enter, bude táto vybratá a po zobrazení Object inspectora (F11) už pohodlne mením jej vlastnosti.

4. Písanie kódu

Z hľadiska prístupnosti už celkom bez problémov, keďže unity sa správajú ako texty a čítače bez problémov čítajú text. Problémy, spojené s nefunkčnosťou zapísaných algorytmov tu neriešim, pretože problém spravidla nebýva v očiach ale o pár centimetrov vyššie.

Programovať bez zraku, len za pomoci čítača obrazovky teda je možné, aj keď je to trochu krkolomnejšie a vyžaduje si trpezlivosť, predstavivosť a kreativitu pri otázkach, ako sprístupniť to, čo je pre iných bežné. Keďže za tie roky som vytvoril už niekoľko menších či väčších programov, spravidla pre nevidiacich, riešil som niekoľko otázok, nad ktorými sa vidiaci programátor nemá dôvod zamýšľať. Uvediem pre ilustráciu niektoré z nich:

A) Ako nevidiacemu sprístupniť informáciu na obrazovke

Sú situácie, kedy program chce niečo užívateľovi oznámiť stručnou informáciou, ktorú bežný programátor vypíše napr. do komponenty TLabel. Čítač obrazovky takúto informáciu nezachytí (pozn. delphi.cz: TStaticText by měl být kompatibilní se čtečkou). Museli by sme ju vypisovať do nejakej komponenty napr. do TEdit alebo TMemo. Nevyzerá to však najkrajšie a užívateľ by si aj tak musel neustále do tejto komponenty presúvať kurzor, aby si informáciu prečítal. Ja som sa uchýlil k technológii, ktorú už rutinne používam vo všetkých svojich projektoch a to je oznamovanie informácií priamo cez sapi. Rozhraním sapi je dnes vybavený už každý počítač a jednoduchým kódom typu

Uses comobj

Var voice:olevariant;

A potom 
voice := CreateOLEObject('SAPI.SpVoice');
voice.speak(label1.caption,9);

je možné poslať obsah TLabel priamo do reproduktora. Ak teda vypíšem do komponenty TLabel nejaký text, pošlem ho zároveň aj rozhraniu sapi. Takáto voliteľná hlasová podpora by bola vítaná aj v iných aplikáciách. Stretol som sa s ňou v programe Tapinradio, ktorý je určený na počúvanie internetových rádií. Pri inštalácii je možnosť zapnúť hlasovú podporu, ak je užívateľ zrakovo postihnutý. V takom prípade sú informácie, zobrazované v rôznych labeloch či titulku okna posielané aj na rozhranie sapi.

B) Komponenta TStringGrid

Programoval som aj databázový program, kde som chcel informácie zobrazovať v tabuľke. Komponenta tstringgrid je na to úplne ideálna v prípade, že na ňu človek vidí. Ak nie, je to docela problém, pretože táto komponenta síce dokáže uchopiť focus ako objekt, no nie je možné šípkami chodiť po jednotlivých bunkách a vyčítať ich obsah. Ak som teda túto komponentu vložil na formulár, mohol som do nej načítať dáta, avšak užívateľ si ich nevedel prečítať. Vyriešil som to napokon tak, že som sledoval stláčanie navigačných kláves (šípky, home, end, page up, page down a kombinácie) a ak sa po stlačení nejakej klávesy vyznačila časť tstringgridu, načítal som si vyznačenú oblasť do stringu a vyššie popísaným spôsobom poslal rozhraniu sapi. Užívateľ teda mal dojem, že komponenta je prístupná, v skutočnosti to však tak nie je.

C) Indikácie stavu

Situácie, kedy prebieha operácia a na obrazovke sa objaví ikonka, že zostáva 15 percent, alebo kedy sa po dosiahnutí nejakého stavu zafarbí políčko na červeno a podobne, sú časté. Niekedy skrátka treba len upozorniť, že vypršal časový limit, bol dosiahnutý povolený počet znakov, skončila náročná operácia, je načítaný súbor a podobne. Takéto situácie oznamujem zásadne zvukovým signálom. Je preto pre mňa dôležité mať naštudovaný systém, ktorý mi umožní efektívne spracovávať, prehrávať a v prípade potreby aj modifikovať zvuky tak, aby som mohol buď rôznymi zvukmi alebo aj jedným zvukom rôznej výšky oznamovať to, čo potrebujem. Klasická knižnica mmsystem je na toto dosť chudobná, preto som po dlhých peripetiách a pokusoch objavil a naštudoval knižnicu Bass.

Samozrejme výpočet alternatívnych riešení rôznych problémov by mohol pokračovať, avšak ako ukážka to azda stačí.

Delphi dnes

Veľmi dlho som zotrvával pri osvedčenej verzii 6 a nemal odvahu na update, pretože väčšinou je každá nová verzia nejakého programu menej prístupná. Pokusne som si nainštaloval verziu 7 a tá moje obavy potvrdila. Prostredie by bolo ešte prístupné, no menu sa vôbec nedalo ovládať z klávesnice. Správalo sa ako jeden objekt a hoci po stlačení alt (to je môj bežný spôsob ako vstupovať do menu) som sa dostal na prvý riadok s ponukou File, Edit atď., ďalej to už nijako nešlo. Verzia 7 bola teda nepoužiteľná.

K updatu som sa odhodlal opäť až po nejakom čase a siahol som rovno po verzii XE8 a 10.1. Bál som sa, že si v nich už vôbec neškrtnem, ale čakalo ma milé prekvapenie, takže Embarcadero dostalo odo mňa pochvalu. Menu týchto verzií je prístupné bez problémov, rovnako tak prostredie unitu a Object inspectora. Problém sa však vyskytol v troch iných oblastiach:

1. Tool palette

V ostatných verziách Delphi zmizla položka Component list z menu Wiev, ostala iba paleta a tá je absolútne nepoužiteľná. Po jednotlivých komponentoch sa nedá vôbec prechádzať šípkami a tak vôbec nie som schopný pridať nový objekt na formulár. Ostávajú mi iba dve možnosti: buď otvoriť projekt v D6 a pridať objekty cez starý dobrý Component list (to robím v prípade nového projektu), alebo objekty pridávať ručne editáciou zdrojových pas a dfm súborov. Tu však musíte presne poznať názov a ideálne aj nejaké tie vlastnosti, čiže použiteľné len pri známych objektoch. Komponenty, ktoré sú pre mňa v Delphi 10 nové, som tak ešte nemal možnosť vôbec vyskúšať. Na internete sa váľa mnoho rozšírení pre IDE Delphi, no všetky riešia iba grafické zobrazenie palety. Pomohlo by jednoduché rozšírenie IDE, ktoré by dostupné komponenty zobrazilo v klasickom listwiev a po stlačení tlačidla by vybraný komponent pridalo do projektu. (pozn. delphi.cz: možná by mohlo pomoci Ctrl+Alt+P, které způsobí aktivaci Tool palete).

2. Object inspector

V podstate prístupný až na otázku, ako doň načítať požadovanú komponentu. V starých Delphi fungovalo, že po zobrazení objektového stromu stlačením enter na komponente bola táto načítaná aj v OI. Teraz to už tak nefunguje. Po zobrazení OI sa vraj na obrazovke nachádza zoznam komponentov, kde si možno požadovaný objekt vybrať, no dostať sa naň kurzorom sa z klávesnice asi nedá, aspoň sa mi to zatiaľ nijako nepodarilo. Našťastie dfm súbory sú ešte stále textové a nie binárne, vďaka tomu teda vlastnosti objektov editujem ručne. To isté platí o odstraňovaní komponent, v prostredí IDE to totiž nedokážem. Pomohla by jedna klávesová skratka, ktorá by kurzor presunula do zoznamu komponent, alebo keby bol tento zoznam dosiahnuteľný klávesou tabulátor.

3. Firemonkey

Celý môj elaborát bol o projektoch VCL. Firemonkey som ešte príliš nepreskúmal, nakoľko hneď pri tvorbe nového projektu som narazil na nemožnosť nastaviť šablónu a potom – ak sa mi to aj nejako podarilo – na nemožnosť pridať akúkoľvek komponentu – viď bod 1.

Našli by sa aj ďalšie oblasti, ktoré by v prístupnosti mali čo doháňať, tie sa však týkajú buď nástrojov, ktoré sa dajú oželieť, alebo sa nedostatok v prístupnosti dá vyriešiť iným, hoci krkolomnejším postupom. Vyššie uvedené tri body však priamo znemožňujú nevidomému programátorovi vývoj. V nových Delphi vďaka nim zatiaľ len dotváram už staršie projekty, alebo tvorím nové, ak si ich najprv v staršej verzii vytvorím a naplním komponentami (prichádza do úvahy iba v prípade VLC).

Verím však, že by tieto problémy boli riešiteľné. Aj cestou tohto článku by som preto rád apeloval na Embarcadero alebo tých, ktorí sú schopní tvoriť rozšírenia, aby sa pri otázke prístupnosti trochu pristavili a urobili niečo pre všetkých nevidiacich programátorov. Delphi stále považujem za veľmi výkonný, užívateľsky komfortný a vzhľadom na podporu rôznych platforiem aj praktický vývojový nástroj a rád by som pri ňom ostal.

V tomto článku som sa pokúsil opísať, ako asi vyzerá práca nevidomého programátora, poukázal som však aj na prekážky v nádeji, že sa azda podarí ich skôr či neskôr odstrániť a Delphi budú prístupné pre komunitu nevidiacich programátorov. To, že Embarcadero na nevidiacich predsalen trochu pamätá, dokazuje FireMonkey Accessibility Package, ktorý umožňuje tvoriť firemonkey aplikácie s priamou podporou čítačov obrazovky pre platformy Windows a Mac (škoda že nie aj Android). Vrelo tento balík programátorom odporúčam.

A ak by problematika prístupnosti zaujímala niekoho viac, odporúčam tiež stránku msdn.microsoft.com/en-us/windows/bb735024.aspx

Štefan Kiss (stefankiss.sk)

Tagy:

Praxe

Komentáře

7.2.2017 8:54:36 #

Marek Weyda

Tak za mě 5 hvězdiček, super článek a další oživení těchto stránek.

Marek Weyda

7.2.2017 19:34:57 #

Tom

Nepomohlo by na ty komponenty IDE Insight? Aktivuje se Ctrl+. a pri psani ukazuje list, po kterem se da sipkami pojizdet. Komponenty vyhledavat a pridavat umi. Jestli ho zvladne ctecka nevim, ale za pokus to stoji. Jenom jeste poznamka - aby to nabizelo komponenty, musi byt aktivni Form designer. Jinak klobouk dolu, na tohle nema silu a vydrz kazdy. Hodne stesti nejen s Delphi.

Tom

Tom

8.2.2017 15:14:29 #

Slavomír

Štefan, veľká vďaka za článok. Programovanie naslepo si neviem ani len predstaviť. Máš pravdu v tom, že nám vidiacim sa nezdajú niektoré veci samozrejmé alebo potrebné (napr. TStaticText namiesto TLabel, zvukový oznam na konci dlhšej procedúry, práca s tabuľkami a pod.). Neviem, ako sa orientuješ v tabuľke TListView (vo vlastnosti vsReport), ktorú ja často používam na databázy.
V článku píšeš o ťažkostiach pri umiestňovaní komponent na formulár, čomu sa nedivím. Možno by bolo ľahšie pre Teba používať namiesto výpočtov jednoduchší postup - automatické zarovnávanie komponent napr. nahor (alTop), v prípade viacerých stĺpcov použiť viacero panelov.
Prajem všetko dobré v osobnom i pracovnom živote!

Slavomír

8.2.2017 23:12:11 #

Štefan Kiss

Všetkým vám ďakujem.
Tom: IDE Insight nezabralo, ale na radu pána Radka Červinku som skúsil alt+shift+P a priamo napísať názov komponenty a dať enter. Toto vďaka Bohu komponentu spoľahlivo pridá. Jediné úskalie je v tom, že musíte vedieť, čo tam napísať, teda poznať názvy komponent, ktoré chcete pridať. Ale vďaka Bohu aj za to.

Slavomír: ak mám okno napr. s jediným memom alebo zoznamom, tak s obľubou nastavím AlClient ale netrúfol som si to použiť v prípade, že mám napr. memo na nejaký výpis a tlačidlo Close. Ak by som nastavil memo na AlClient a tlačidlo na AlTop, ako by to vyzeralo? ko by to Automatika vyriešila keď jedna komponenta má teoreticky zakryť druhú? A ako si to myslel s tými viac panelmi?

Štefan  

Štefan Kiss

9.2.2017 9:44:23 #

Stanislav Hruška

Vložíš na formulár dva panely. Jeden nastavíš alClient a naň vložíš TMemo tiež s alClient. Druhý panel nastavíš na alTop alebo alBottom a pložíš naň tlačidlo Close. Tomu nenastavuješ zarovnanie. Iba ho umiestníš a ešte mu nastavíš Anchors.
To je bežná prax.

Stanislav Hruška

10.2.2017 14:48:25 #

Slavomír

Ak máš na formulári TMemo a tlačidlo, môžeš nastaviť TMemo na alClient a tlačidlo Close na alTop (alebo alBottom). Program to vykreslí tak, že sa neprekryjú navzájom ani pri zmene veľkosti formulára.
Každé zarovnanie má nastavenú určitú prednosť (najvyššiu prioritu má tuším alTop, potom alBottom, alLeft, alRight a na záver je alClient). Takže ak sa zmení veľkosť formulára, komponent so zarovnaním alTop bude vždy hore (a nezmení sa mu výška). Zato všetky komponenty, ktoré majú zarovnanie alClient sa prispôsobia novej výške automaticky.
Môžeš si na formulár položiť viac komponent a všetky zarovnať napr. na alTop, takže sa Ti nikdy neprekrížia. Niekedy býva problém, ak mám viac komponent TLabel a TEdit. Vtedy niekedy program automaticky zarovnáva najskôr všetky komponenty TLabel pod seba a potom pod ne zarovná všetky komponenty TEdit (čo je logicky nezmysel, lebo pri každom TEdite by mal byť správny TLabel).
Často to využívam tak, ako to približne popísal Stanislav predo mnou. Ak nechcem, aby boli všetky komponenty roztiahnuté do šírky formulára (pri zarovnaní hore - alTop), položím si na formulár jeden panel s nejakou pevnou šírkou, ten dám zarovnať napr. doľava alebo doprava a potom naň ukladám rôzne komponenty so zarovnaním na alTop. Šírka týchto komponent bude presne na šírku panela. Nestarám sa teda vôbec o grafiku (teda o rozmiestnenie komponent na formulári), je o ňu postarané automaticky. Vo vlastnostiach sa ešte dajú upraviť medzery medzi jednotlivými komponentami (aby neboli na sebe veľmi na husto alebo na riedko. To je už ale ďalšia kapitola. Ak treba, môžem popísať podrobnejšie alebo vysvetliť v e-maile.

Slavomír

11.2.2017 22:50:46 #

Štefan Kiss

Dobrý deň, páni, srdečne Vám ďakujem za rady. Sú to pre mňa nové a vzácne informácie, nikdy mi nenapadlo takto uvažovať, pretože som nemal tušenie, ako vlastne Delphi pracuje s komponentami, keď sú takto zarovnané k niektorému okraju. Aj tak by som však mal zopár ďalších otázok, takže, Slavomír, ak máš čas a vôľu mi ešte zopár vecí vysvetliť, budem Ti vďačný, ak sa mi ozveš na mail stefan.kiss@nextra.sk.

Štefan Kiss

11.2.2017 22:59:32 #

Štefan Kiss

A ešte jedna poznámka na margo prístupnosti - keďže vďaka Vám už dokážem pridávať na formulár komponenty, pustil som sa aj do firemonkey a skúsil si urobiť jednoduchý projekt (nejaký tbutton, tlistbox, tcheckbox, tmemo) so štandardnými fmx komponentami. Po spustení nebol program vôbec prístupný, vložené komponenty čítače obrazovky nevideli. Ak som ale použil unit fmx.screenreader.win a deklaroval si formulár ako TACCForm, ako to umožňuje FireMonkey Accessibility Package, zmieňovaný v článku, bolo všetko ok a program bol krásne použiteľný. Teda pochvala pre Embarcadero za toto rozšírenie. Netuším, aký je medzi týmito dvoma implementáciami komponent vizuálny rozdiel, ale vrelo odporúčam toto rozšírenie používať, ak píšete nejaké verejne distribuované aplikácie pre Win alebo OSX či IOS. Ako je na tom Android som ešte neskúšal ale určite tak urobím. Štefan

Štefan Kiss

24.3.2017 14:12:11 #

Pšenda

Slavomír: problém TEditů s příslušnými TLabely je lepší řešit komponentou TLabeledEdit. Tedy Editem s jeho popiskem, kterému se pak dá definovat pozice.

Pšenda

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců