Celou dobu se tu snazim vysvetlit, ze na paletu komponent nemuzes umistit komponentu, jenz neni na vsech platformach podporovana.
- Není pravda, že právě toto se tu snažíš vysvětlit. Ty se snažíš celou dobu vysvětlit, že FMX tray icon mít nemůže:
Ale k tematu, u platforme neutralniho frameworku, jenz nemuze mit tray icon, protoze tray icon nektera z platforem nema [...]
Přečti si ještě jednou dotaz:
Zdar,
Vo VCL je komponenta TTrayIcon ktora umoznuje minimalizovat aplikaciu na systenove menu k hodinam a pripadne rozbalit popup menu. V FMX aplikaciach tato moznost chyba, je jasne ze na Androidoch to zmysel nema, ale vo win verzii aplikacie tuto funkcionalitu potrebujem vyuzivat.
Dakujem za rady
Dotaz je na to, že v FMX ta komponenta není vůbec, a ne že není na paletě. A ty stále obhajuješ, že v FMX tray icon není a nemůže být. O paletě jsi začal mluvit až v odpovědi #18 a sám od sebe. Nikdy předtím o paletě nepadlo slovo - ani to nemělo smysl, protože FMX TTrayIcon teď prostě nemá - ani na paletě a ani schovanou kdesi ve zdrojácích, abych si ji mohl vytvořit za běhu.
A ty mně radíš, že si tray icon mám v "platforme neutralnim frameworku" vytvořit za běhu a zárověn tvrdíš, že ve stejném "platforme neutralnim frameworku" nemůže existovat.
- I kdyby ses mně snažil právě toto vysvětlit, tak je to blbost. Samotné FMX má několik komponent, které nejsou na všech platformách podporované a stejně jsou na paletě. Uvedl jsem ti TOpenDialog, TSaveDialog, TMicrosoftStore.
O informaci, kde jsou komponenty podporovány, se stará ComponentPlatformsAttribute. Ten má taky na starost, že když vybereš pro projekt např. Target=Android, tak právě tyto komponenty nemůžeš přidat na form - jsou sice v paletě ukázány, ale jsou deaktivovány. Stačí ale přepnout target a už je tam můžeš na form hodit. A ano, tak to má smysl.
Nechapeme, no. Vlakno zacalo tim, ze OP nemuze najit TTrayIcon. Coz nelze protoze ne vsechny platformy ji maji.
Nemůže najít TTrayIcon, protože ji FMX vůbec nemá a ne protože "ne vsechny platformy ji maji".
FMX by
TTrayIcon klidně mít mohla - stejně tak, jako má TOpenDialog. TOpenDialog také "ne všechny platformy mají", ale přesto v FMX je.
TTrayIcon je pouze ve VCL v Vcl.ExtCtrls, v FMX vůbec neexistuje.
Hm, co vic, Ty jsi pozdeji poslal radu ve smyslu:
A proč by prostě tray icon pro FMX nemohla na systémech, které ji nepodporují, nic nedělat a na ostatních systémech být dostupná?
Jako jak? Ze v aplikaci navesis na udalost takove TTrayIcon nejaky kod a ten se, protoze jej cilova platforma nepodporuje, nikdy nespusti? Bez jakehokoli varovani?
Jak se ošetří nepodporované platformy, je už věc výrobců frameworků a mně to zajímá jenom okrajově. Hlavní je, že ve frameworku mohu používat i komponenty, které nejsou ve všech platformách podporované.
Kdyby chtěli v Embarcaderu uživatele upozornit, tak zabudují podporu ComponentPlatformsAttribute přímo do kompilátoru. Ten, když zjistí vytvoření nepodporovaného objektu (ať pomocí designeru nebo pomocí konstruktoru v runtime), by mohl vyhodit upozornění:
[DCC Warning]: Symbol 'TTrayIcon' is not supported on target platform.To by bylo úplně dostačující.
Koneckonců už na to mají klíčové slovo
platform:
TPlatformComponent = class(TComponent)
end platform;
které při použití vyhodí
[DCC Warning] Unit1.pas(?): W1002 Symbol 'TPlatformComponent' is specific to a platformAle i "žádné varování" je lepší než "žádná komponenta".
Za mě co se týče událostí: samozřejmě se kód nikdy nespustí - a to bez žádného varování. Tray icon na cílové platformě není, tudíž není vidět, tudíž na ni uživatel nikdy nemůže kliknout a tudíž se nikdy nemůže vykonat TTrayIcon.OnClick. Na co chceš tady varování?
Nevidím tray icon -> nemůžu na ni kliknout -> nemůže se provést událost kliknutí. Důvody neviditelnosti tray icon mohou být různé: OS si ji schoval sám (MS Windows to dělá), program si ji schoval pomocí Visible:=False, OS ji nepodporuje... Všechno jsou validní důvody, proč tray icon není vidět a proč se na ni nedá kliknout a proč se nemůže vykonat událost. Když kompilátor vyhodí upozornění, jak jsem psal nahoře, tak je to bonus, ale přežiju to i bez něj. Každopádně se kód musí dát přeložit i tam, kde není TTrayIcon podporována.
Vezmu konkrétní příklad TOpenDialog na Androidu, jak to funguje teď v Delphi 10.3 a který si můžeš sám vyzkoušet: při OpenDialog1.Execute neudělá nic a vrátí True. To se mi upřímně řečeno nelíbí - já bych vyhodil ENotSupportedException nebo alespoň bych vrátil False. Ale jak vidíš, na FMX androidí form si pomocí mezikroku s Windows TOpenDialog dát můžu a můžu si ho vytvořit i za běhu - a to je pro mě důležité.
Tvoje obhajoba, že TTrayIcon nemá na FMX paletě být nebo že v rámci FMX nemá vůbec existovat, je prostě lichá. Embarcadero prostě zatím mělo jiné priority (třeba ten TWindowsStore) a nemělo čas TTrayIcon do FMX dát. Nedivil bych se, kdyby ji v nějaké budoucnosti do FMX přidali, a to i na paletu.
Za me uz 
Jo, to bude nejlepší.