Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 29. 12. 2021 14:58:15

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Vložení dat do seznamu v dialogu

Prosím o radu zda jde a jak vložit data z buněk do rozevíracího seznamu v dialogovém okně
něco jako toto:

Sub Main
dim vstupni_pole, dlg as object
doc = thisComponent
list = doc.sheets(0)

DialogLibraries.LoadLibrary("Standard")
dlg=createUnoDialog(DialogLibraries.Standard.Dialog1)
vstupni_pole = list.getCellRangeByName("A2:A4")

dlg.getControl("d_seznam")=vstupni_pole

if dlg.execute() = 1 then

dlg.dispose()
endif
End Sub

Ve formulářovém ovládacím prvku je k tomu záložka data, ta ovšem v prvku pro dialog není.

Děkuji za každou radu

Offline

#2 30. 12. 2021 08:05:33

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Vložení dat do seznamu v dialogu

Listboxy v dialogu nabíjené makrem


Dejte pozor - existuje více podobných postupů a i prvků - například ComboBox. Existují i zcela genereované dialogy (makro vygeneruje vše od dialogového okna přes různé prvky až k jejich vybavení hodnotami). Také dejte pozor na to, že formulářové prvky jsou nejen pro dialogy, ale dají se umístit přímo do sešitu a ovládají se trošku jinak. Každý typ obvládacího oprvku má jiný postup. Jde zejména o různá datumová a časová pole, pole formátovaná, progressbary, zaškrtávací tlačítka, dialogy pro obrázky, nebo více záložek, stromy, nebo typy PopUp dialogů a celá sada "FillePickerů".


Doporučuji spíš samostatné hledání příkladů na cizích fórech a vytvoření si vlastní databáze scriptů. Jak si jednou začnete s makry - budete chtít stále více různých kousků kódů. Pak se musí stát, že už nebude stačit dotaz do tohoto fóra. Podívejte se na seriály o programování. Doporučuji začít seriálem "Malá makra" od Daniela Sedláčka. Ale už jsou dobré i příklady v nápovědach pro Calc a Writer - máme přeloženy téměř aktuální návody. Jsou to obsáhlé texty, ale věnujte se jim - vřele doporučuji.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 30. 12. 2021 12:31:53

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

Nepřiložil jste ukázkový soubor s vaším dialogem, takže jen "zpaměti" bez možnosti odzkoušení :-)

vstupni_pole=list.getCellRangeByName("A2:A4").getDataArray() 'matice s řetězci z dané oblasti

dim p(ubound(vstupni_pole)), i&
for i=lbound(vstupni_pole) to ubound(vstupni_pole) 'z matice jen jednorozměrné pole
	p(i)=vstupni_pole(i)(0)
next i

dim o as object
o=dlg.getControl("d_seznam") 'listbox
o.Model.StringItemList=p 'data z pole do listboxu

Z mé zkušenosti je použití StringItemList pro naplnění Listboxu mnohem rychlejší oproti metodám addItem/removeItem -> to kdybyste tam dával třeba desítky či stovky položek, nebo třeba potřeboval dynamicky měnit položky druhého listboxu v závislosti na tom co se vybere v prvním listboxu (pro každou položku z listboxu1 by byly jiné položky v listboxu2).

Offline

#4 30. 12. 2021 16:19:55

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Vložení dat do seznamu v dialogu

pro kamlan:


kamlan napsal(a)

Nepřiložil jste ukázkový soubor s vaším dialogem ....

vstupni_pole=list.getCellRangeByName("A2:A4").getDataArray() 'matice s řetězci z dané oblasti

Nevím o čem píšete - soubor s obsahem je přiložen obsahuje 2 listboxy z dialogu, který je součístí ukázky. Ale obsahuje jen jeden nabíjený z buněk. Jde to udělat relativně různým kódem - což také uvádím, ale meritum Vašeho příspěvku mi uniká.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 30. 12. 2021 16:23:14

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

@neutr: to byla čistá reakce na autora dotazu, ne na vás :-)

Offline

#6 3. 1. 2022 19:52:13

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Re: Vložení dat do seznamu v dialogu

Ukázkový soubor

Pánové děkuji vám za rady, použil jsem a upravil verzi od kamlana, hlavně protože pracuji s daty v objemu stovek.
Sice vše funguje, ale po otevření roletky se seznam zobrazuje na konci pole.
Je nějaký jednoduchý fígl, jak toto zobrazení přesunout na začátek dat?

Předem moc děkuji za vaší bezvadnou práci a ochotu pomoci nám začátečníkům.

Offline

#7 3. 1. 2022 22:18:42

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

U těch ComboBoxů se aktuální položka nastavuje vlastností .Text. Když daný Text v tom seznamu je, tak ho to na něj nastaví.

o.Model.StringItemList=p 'data z pole do listboxu
o.Model.Text=p(0) 'první položka bude aktivní

.Text lze nastavit třeba i na nějakou neznámou hodnotu a ta pak bude dána na začátek a brána též jako výchozí. A zmizí když si něco ze seznamu vyberete.

Pro ukázku jiná syntaxe s neznámou položkou.

with o.Model
	.StringItemList=p 'data z pole do listboxu
	.Text="-------" 'čárky nejsou v seznamu takže budou dány jako výchozí první položka seznamu
end with

Jinak třeba pro příště :-). Vzhledem k tomu že jde již o komplikovanější Sešit a že tam nemáte čistý LibreBasic ale je to z VBA, tak lepší by bylo napsat ještě postup jak se k chybě člověk dostane, u vás např.: Dejte list "Výdej materiálu", pak klik na tlačítko "Výdej dialog" a pak rozbalte "Název materiálu". Tam je problém.

Případně ještě dodat: je to dialog Standard/ Vydej, a obsluhuje to makro VBAProject/ Moduly/ Module3/ Prvky.

Sice jsem se k tomu po chvíli proklikal, ale být ten soubor o něco složitější, tak už bych se na to vykašlal a musel vám napsat dotaz jak se k tomu dostat. Ale máte to pěkně barevný, to se mi líbilo :-).

Offline

#8 4. 1. 2022 11:47:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Vložení dat do seznamu v dialogu

Bezda86 napsal(a)

Prosím o radu zda jde a jak vložit data z buněk do rozevíracího seznamu v dialogovém okně
něco jako toto: .....

Ve formulářovém ovládacím prvku je k tomu záložka data, ta ovšem v prvku pro dialog není.

     Ukázka je nejlepší prostředek jak dostat správnou odpověď. Ale je nutné se také správně zeptat. Tady vidím hned několik problémů.


     Z ukázky chápu, že je to příprava pro vytvoření ovládání pomocí dialogových prvků řízených makry. V ukázce jsou dva dialogy (dialogová okna Basic, respektive VBA s názvy Dialog1 a Výdej). Více či méně jsou oba nefunkční. Vše co je v ukázce vidět se týká FORMULÁŘOVÝCH PRVKŮ a nikoliv OVLÁDACÍCH PRVKŮ DIALOGU. Rozdíl mezi těmito je zřejmý. Dialogové ovládací prvky jsou součástí dialogového okna v Basic. Formulářové prvky jsou součástí "DRAWPAGE" (tedy součástí jednotlivých listů). Podle dotazu Vám je rozdíl zřejmý, i když asi ne tak úplně.
     Makro, které jste požadoval a zřejmě aplikoval - nabíjí obsah "SEZNAMU" (ListBox) na listu VÝDEJ a PŘÍJEM materiálu. Na LISTU SEZNAM je v buňce E3 textové pole. Ve skutečnosti je ale seznam vybaven automatickým filtrem. Problematika „databáze materiálu" je snadno řešitelná kontingenční tabulkou s tím, že výstupy jsou vloženy do jednotlivých listů.


     Celkem chápu, že hledáte možnost snadného intuitivního ovládání. V tomto stavu je to vývojová verze. Vím přesně oč se jedná. Kdysi jsem pracoval jako rozpočtář, elektromechanik a energetik celkem velkých provozů. Proto řeknu, že je celkem velice důležité k jakým účelům má Vaše práce sloužit. Podle názvů (skříň, elektrodílna apod.) soudím, že se jedná o evidenci pro účely údržby elektro. Zde už vidím, že nerozlišujete typ skladu. V elektrodílně bývá často sklad použitých, nebo repasovaných součástek, který je „mimo zákon", tedy formální evidenci. Je to první místo kam jde elektrikář když má podezření, nebo jistotu, že odešla nějaká součástka (PLC, softstartér, stykač apod.). Součástku vymění. Co se děje dál je různé. Například se posílá info (co se pokazilo a jak proběhla oprava) + požadavek na objednání nového kusu, popřípadě součástka se pošle k opravě, kalibraci apod.
     Ale seznam slouží samozřejmě k inventurám a ke zjištění co se má objednat podle stavu položky. Tady se dostáváme k obsluze ze strany nadřízených, kde už je vyžadována „štábní kultura". Nákupčí vyžaduje přesnou specifikaci, ekonom finance zamrzlé v rezervách. Vedení výroby se zabývá prostoji – elektrikář je často hromosvod a tak ve vlastním zájmu musí sledovat co je příčinami poklesu výroby.
     Odtud zřejmě plyne problém s EXCELEM který má nainstalovaný pouze několik strojů ve firmě a zbytek je na LibreOffice (nebo ApacheOpenOffice).


     Pokud by se jednalo pouze o potřeby elektrodílny tak by postačilo ovládání jen pomocí vzorců v kombinaci s DATA > PLATNOST (což je také typ seznamu a je mnohem lepší, nežli ovládací prvky klasického typu pro formuláře, nebo dialogová okna). Klasické formulářové prvky mají výhodu snad jen v tom, že se může přiřadit makro k takovému ovládacímu prvku když se nad ním klikne, nebo třeba jen přejede přes něj a podobně. Vy ale tuto možnost nevyužíváte a tím se výhoda vytrácí.
     Používat klasická dialogová okna je „vyšší dívčí" a používá se zejména na efekt – vypadá to profesionálně. Ale musí se to umět. Ovládací prvky v dialogu by měly mít automatickou aktualizaci obsahu při každé změně (ten téměř funkční dialog VÝDEJ „výdej materiálu") obsahuje statický seznam položek, který se musí vložit manuálně při každé změně. Domnívám se, že Vám šlo právě o tuto funkčnost. Aby to bylo ale opravdu profesionálně provedené je nutné mnoho věcí přeprogramovat a doprogramovat. Tohle by naše fórum asi umělo dobře – ale nikoliv pro Excel. V takovém případě v tom zůstanete sám.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#9 23. 1. 2022 12:57:03

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Re: Vložení dat do seznamu v dialogu

Dobrý den,
po dlouhé době jsem zpět s tím, že jsem celý soubor, který byl slepeninou excelu a calcu předělal od začátku jako calc soubor s novými požadavky a tím i novými problémy.


Pro upřesnění funkce souboru. U nás ve firmě zabývající se automatizací (vývoj a montáž automatizovaných a robotických výrobních linek) mají v kanceláři Helios a MS Office, jenže všude se šetří a licenci nám na dílnu na Helios a Office nikdo nekoupí. Obchodní oddělení na nás má požadavek, aby jsme jim dávali vědět jaký materiál v jakém množství spotřebujeme za daný měsíc na jaký projekt, samozřejmě bez přípravy jakéhokoliv prostředku. Proto jsem se rozhodl vytvořit si tuto evidenci, která nám bude sloužit jako ukazatel, kolik čeho máme (info pro nás) a na konci měsíce pošleme soubor na obchodní oddělení, kde budou mít v listu výdej materiálu evidenci toho co je zajímá. Typy umístění jsou jen ukázka toho jaký je ve všem chaos, ale nikdo nechce nic měnit, protože by to pro ně znamenalo více práce byť jen dočasně, než by se dalo vše do pořádku. V neposlední řadě vedení nechce vynakládat pro ně zbytečné náklady na zlepšení přehlednosti nákupem více skříní nebo regálů s binovými pozicemi, když to podle nich zatím takhle funguje.
Stručně a jednoduše: když se zaměstnavatel nepostará o to co chce po zaměstnancích, musí se zaměstnanec postarat sám aspoň v omezené míře.


Doteď jsme používali dva soubory jeden pro manuální evidenci množství a druhý pro manuální zápis toho výdeje. Pro mnohé to bylo složité a často na některé věci zapomněly a tak toho moc nesedělo.


V současnosti řeším 3 problémy, které jsou podrobně popsány v souboru na listu "Nefunkční věci"
Jen ve stručnosti:
1) Jedná se o řazení dat podle určitého sloupce, zkoušel jsem několik verzí zde z fóra a nevím proč žádný nefunguje, co dělám špatně.
2) Zápis datumu přes kalendář a ručně se pokaždé zapíše jinak potřebuji sjednotit výstup
3) pro možnost editace výdeje a příjmu položek potřebuji naplnění seznamů jako při klasickém výdeji či příjmu jen navíc předvyplnit pole hodnotou z buněk řádku, který je editován.


Děkuji za jakoukoliv pomoc.


Ukázkový soubor

Editoval Bezda86 (23. 1. 2022 12:57:57)

Offline

#10 23. 1. 2022 19:16:09

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

Problém 2 a 3 vyřešíte tím, že ten sloupce A označíte a dáte pravou myší Formát buněk a z karty Číslo vyberete Datum + 31.12.1999. Tím budou mít buňky formát datumu pro ruční zadání.

No a makrem musíte buňce nastavit vlastnost .NumberFormat též na datum. Nejdřív možno zapsat .String a pak nastavit .NumberFormat; nebo nastavit .NumberFormat a pak zapsat .Value=DateValue().

Např. pro makro Vydej/DialogV_Sdata mi fungovaly pro zapsání datumu oba příklady.

aControl = oDlg3.getControl("d_VDatum")
dim oBunka as object, s$
oBunka=list.getCellByPosition(0,Target)
s=aControl.getText()
with oBunka
	.String=s
	.NumberFormat=37 'DD.MM.YYYY
end with
list2.getCellByPosition(1,Target2).String=s
aControl = oDlg3.getControl("d_VDatum")
dim oBunka as object, s$
oBunka=list.getCellByPosition(0,Target)
s=aControl.getText()
with oBunka
	.NumberFormat=37 'DD.MM.YYYY
	.Value=DateValue(s)
end with
list2.getCellByPosition(1,Target2).String=s

K 1 a 4 se dnes již nedostanu, už mám dnes z programování hlavu zatemněnou :-(. Uvidím jak mi co půjde v týdnu.

Offline

#11 25. 1. 2022 18:59:40

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

Co se týká problému 1 (již v předešlém příspěvku jsem použil číslování z listu Nefunkční věci z posledního ukázkového souboru) tak tam jste měl chybu v tom jak získat ten rozsah buněk, není tam .getCellByPosition, to je pouze pro jednu buňku. Pro rozsah buněk je .getCellRangeByPosition. A vaše proměnná oblast musí být objekt, nikoliv vlastnost objektu .RangeAddress kterou jste použil. Také trochu bordel v tom že rozsah .getCellRangeByPosition bere pozice buněk od nuly, čili A1=0,0 atd. Nicméně snadno si lze označit vybraný rozsah pomocí ThisComponent.CurrentController.Select(oblast), takže pak vidíte s čím pracujete.

Makro pro třídění Standard/NovyZaznam/DialogNZ_Sdata stačí upravit třeba takto.

Pro třídění v listu Inventura si to jistě zvládnete upravit sám.

dim tridpodle(0) as new com.sun.star.util.SortField
dim serad(0) as new com.sun.star.beans.PropertyValue
oblast=list.getCellRangeByPosition(0,3,7,Target) 'bacha číslování pro Position je od nuly -> A1=0,0; A2=0,1; B1=1,0; B2=1,1 atd.
ThisComponent.CurrentController.Select(oblast) 'můžete si pro kontrolu označit oblast která je vybrána
msgbox "vybráno je toto"
tridpodle(0).Field=4
tridpodle(0).SortAscending=True
serad(0).Name="SortFields"
serad(0).Value=tridpodle()
oblast.sort(serad())

No a co se týká problému 4 tak tam vám hapruje především funkce UnionArrays. Dvě neznámé pole spolehlivě spojíte jen přes třetí pole.

Function UnionArrays(p1(), p2()) as array 'sloučení dvou polí pomocí třetího pomocného pole
	dim p3(ubound(p1)-lbound(p1)+ubound(p2)-lbound(p2)+1) 'velikost 3. pole se získá z údajů o počátku a konci obou polí
	dim i&, j&
	for i=lbound(p1) to ubound(p1) 'naplnění první části třetího pole prvním polem
		p3(i-lbound(p1))=p1(i)
	next i
	for j=lbound(p2) to ubound(p2) 'naplnění druhé části třetího pole druhým polem
		p3(j+i-lbound(p2))=p2(j)
	next j
	UnionArrays=p3 'vrátit třetí pole
End Function

Když máte jistotu že pole je indexováno od nuly a není zadefinováno jako nějaký konkrétní typ, tak si vystačíte s ubound a klidně i ReDim Preserve. Ale pole mohou být definovány i od vyššího číslování než od nuly a pak se musí brát v potaz i lbound. A když je pole definováno jako nějaký konkrétní typ a nikoliv Variant, pak ho Redim Preserve vynuluje. 

Sub testUnion
	dim p1(2 to 5) as string, p2(1 to 2) as string
	p1=array("a", "b", "c", "d")
	p2=array("E", "F")
	xray UnionArrays(p1, p2) 'sloučená pole
	redim preserve p1(6) as string 'pole bylo ale definováno jak typ string, takže ho to vynuluje
	xray p1 'pole bude vynulované
	dim p4(2 to 5) 'pole jako typ Variant
	p4=array("A", "B", "C", "D")
	redim preserve p4(6) 'typ Variant to zachová
	xray p4
End Sub

No a další problém máte s .getDataArray, které vždycky vrací matici (pole polí), tedy array( array(...) ). Správně jste upravil ve fci Vydej/ Start_DialogVE matici MyArray na pole ARd, ale to samé musíte udělat i s druhou maticí MyArray2, než to vženete do fce UnionArrays. A pak už by bylo lepší mít na to samostatnou funkci. Ale jelikož MyArray2 je jednoprvková matice, tak tam můžete dát MyArray2(0). Takže řádek 151 v modulu Vydej můžete zakomentovat a ř.156 může být i takto:

aControl.Model.StringItemList=UnionArrays (MyArray2(0), ARd)

Po těchto dvou úpravách (jinak fce UnionArrays + jinak její použití v ř.156) už se vám ten editační dialog spustí a bude i předvyplněn, takže další postupy jistě zvládnete sám.

Ono to nebude ideální neboť jestli chcete slučovat dvě pole, tak by bylo záhodno mít v tom výsledném poli jen unikáty čili vyházet z toho duplicity. Ale k tomu a asi i jiným věcem se jistě ještě dostanete :-).

Offline

#12 4. 2. 2022 13:34:09

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Re: Vložení dat do seznamu v dialogu

Dobrý den,
chtěl bych se zeptat zda se dá něják natvrdo v dialogu uložit obrázek. Např. pro chybové hlášení mi nedostačovali msgboxy a tak jsem si vytvořil vlastní dialogy chyb (oznámení) a do nich chtěl vložit ikonku podle typu hlášení. Ikona se vloží, v návrhu je vidět, v náhledu je také vidět, ale při spuštění dialogu už vidět není a po zavření a otevření souboru už není vidět ani v návrhu.

Konkrétně se jedná o tyto dialogy dlg_EditDeleteRow, dlg_PrazdneBunkyNZ, dlg_PrazdneBunkyP a dlg_PrazdneBunkyV
v horní části uprostřed je pole obrázku, ale prázdné.

Ikona otazníku    Ikona vykřičníku   Ukázkový soubor

Offline

#13 4. 2. 2022 20:19:28

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Vložení dat do seznamu v dialogu

Libre si očividně nějak špatně ukládá cestu pro obrázek v Dialogu. Když si v Basic editoru otevřu dialog dlg_EditDeleteRow a kliknu doprostřed abych vybral ten obrázek, tak v levé části obrazovky v Katalogu objektů se objeví info o tom vybraném objektu. A pro ten obrázek se mi v položce Obrázek zobrazuje prapodivná cesta k obrázku Pictures/100075580000297200002972DBAFD601017E8F60.svg. Když kliknu na ikonku ... a vyberu soubor obrázku, tak ta cesta zmizí a nově vybraná se neobjeví, ale v dialogu se obrázek objeví a Central/ Start_DialogEDR jej též v dialogu zobrazí. Ovšem po uložení ODS a následném znovuspuštění dialogu je to opět bez obrázku a po otevření dialogu je tam zase ta prapodivná cesta.


Ale dá se to vyřešit tak, že se holt ta cesta k obrázku zadá do dialogu až ve vyvolávacím makru.

Sub Start_DialogEDR
	DialogLibraries.LoadLibrary("Standard")
	oDlg10 = CreateUnoDialog(DialogLibraries.Standard.dlg_EditDeleteRow)
	dim oImg as object
	oImg=oDlg10.getControl("ImageControl1") 'jméno objektu obrázku
	oImg.Model.ImageUrl=ConvertToUrl("d:\question_button.svg") 'cesta k obrázku
	beep		'Zvukové upozornění na vyskočení dialogu
	oDlg10.Execute()
End Sub

Jinak doporučuji optimalizovat SVG obrázky pomocí SVGO-GUI https://github.com/svg/svgo-gui -> uděláte si zástupce toho programu na Ploše a pak v něčem (klidně v Průzkumníku) vyberete SVG soubory a přetáhnete je na tu ikonku -> a poté jsou ta SVG mnohdy o více jak polovinu menší :-).


A pro zajímavost: vyřešil jsem pomocí vaší ukázky jednu podivnost která už mi nějakou dobu neštymovala :-). Když jsem klikl v listu Inventura na tlačítko Aktualizace inventury, vypsalo mi to chybové hlášení No sheet with the name: Sheet1. Vyřešilo to že jsem připsal dim Sheets do vaší fce Inventura. Tohle už se mi párkrát stalo že mi Libre vypsalo podivnou chybu a vyřešila to deklarace proměnné pomocí dim. A ejhle, po nějakém tom resetu uživatelského profilu a postupném napokírovávání jeho adresářů zpět jsem přišel na to, že v knihovně Standard která se načítá automaticky (a s ní i všechny funkce v ní), tak že se mi tam jedna funkce jmenuje Sheets stejně jako vaše nedeklarovaná proměnná Sheets :-). Takže díky nenadeklarované proměnné Libre logicky napřed zkoušelo volat stejnojmennou funkci když jí mělo k dispozici. No a v této fci bylo ono chybové hlášení. Díky obdobné nejanosti jsem začal před časem vše psát v módu option explicit, ale až z vaší ukázky jsem odhalil v čem to - a zcela logicky - vězelo :-).

Offline

Zápatí