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

#1 10. 3. 2015 15:09:33

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

jak na tlačítka

Dobrý den
nevím, jestli špatně hledám, ale nenašel jsem žádný čitelný návod, jak pracovat s tlačítky v dialogových formulářích. Konkrétně jaký význam mají parametry tlačítek, jak určit, kam se bude program ubírat po stisknutí jednoho třeba z pěti (jak definovat větvení programu na 5 variant, když mám k dispozici 2 typy tlačítek - OK a zrušit).
D2kuji

Offline

#2 10. 3. 2015 19:08:43

LADER
Člen
Registrace: 3. 4. 2013
Příspěvků: 82

Re: jak na tlačítka

Zdravím,
nevím jestli to správně vysvětlím.
Dáš si "Zobrazit" - "Nástrojové lišty" a zaškrtneš "Návrh formuláře" a "Ovládací prvky formuláře".
Na listu si dáš formulář a do něj dáš "Radio button" (Tlačítko volby) - můžeš si jich dát víc, když budou ve stejném formuláři budou na sobě závislé (zaškrtlý může být současně jen jeden, jako na starém radiu, když volíš vlnové rozsahy - taky nemůžeš stlačit současně dvě tlačítka, třeba SV + DV). Pokud nechceš, aby byly závislé, umístíš je do rozdílných formulářů (jako třeba přepínač vstupu a zvlášť přepínač výstupu na zesilovači). Když se spleteš, nevadí, dají se přesouvat v průvodci "Navigátor formuláře".
Zaškrtávací tlačítka (option button) jsou nezávislé.
Pro každé tlačítko si můžeš dát propojení pro nějakou buňku. Nebo napsat makro pro nějakou událost. Tyto údaje nastavíš ve vlastnostech každého ovládacího prvku (režim návrhu).

Editoval LADER (10. 3. 2015 19:13:14)

Offline

#3 10. 3. 2015 19:19:55

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

Re: jak na tlačítka

Podle Vašich předchozích příspěvků jsem nabyl dojmu, že tato věci ovládáte. Jedná se o ten dialog "Fondy"?
     Tlačítka je také poměrně široký pojem. Tlačítka mimo dialog se také chovají jinak nežli v dialogu. V dialogu můžete nastavit typ tlačátka - Například OK má logickou hodnotu true, když tam dáte systémové (z MsgBoxu), tak OK = 6. Zrušit je logická hodnota také true. Běžné systémové tlačítko MsgBoxu má zrušit pod kódem 7.
     U tlačítek existuje jediná ale vícečetná událost OnClick (v událostech jsou možnosti například stisknuto, zaměřeno, uvolněno ap). K těmto událostem s přiřazují makra - to je právě výchozí tlačítko. Tlačítka mají ještě vlastnosti vybráno . nevybráno, nebo několik dalších vlastností.



     V principu se ale tlačítka navzájem neblokují až na tlačítko volby, nebo zaškrtávací pole. Dají se sice přepínat zapnuto vypnuto a pak se aktivují podle pořadí (pořadí aktivace) ale to není totéž. CheckBoxy se mohou blokovat podle logických operátorů - AND, OR, XOR ap. ale nejčastěji to bude zřejmě systém přepínačů - 1 vybraný blokuje všechny ostatní. jsou to ale typy tlačítek kterým se v elektrotechnice říká vypínač (zapnuto/vypnuto). Zachovávají polohu. Ostatní tlačítka - klasické buttony jsou skutečně impulzní (sepnou a postaví so do výchozí polohy) - ale dají se navolit na přepínání a vícenásobný krok.
     To se u checkboxů dělalo automaticky blokem tlačítek, ale zlobilo to. Takže já se na to nespoléhám a blokuji makrem. To se dá dělat na několika úrovních. Já například často používám blokování pomocí Public proměnných.
     V tom dialogu nejsou přejmenovaná tlačítka. Takže si je přejmenujte na Button1 a Button2 a otestujte se je v režimu 'typ tlačítka výchozí'. Zadejte na příklad k události 'schválit akci' to makro výpisu. Když budu mít čas pošlu Vám upravený dialog. Píšete ale o 5-ti párech tlačítek takže nevím co máte zrovna za představu. Bude to asi jiná varianta dialogu.


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

Offline

#4 10. 3. 2015 21:38:55

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: jak na tlačítka

Uf, to byl ale příval...:-) Jsem panna nelíbaná a učím se to za pochodu. Teď momentálně tvořím dialog pro hlavní menu a propojení z MAIN na procedury, takže tam bude víc větví, kam ten program poběží (5 je odhad od boku).  Stačí mi rozhodovat tak, že přiřadím k tlačítkům makro? jak se k tlačítku přiřadí buňka? K čemu je vynechaný parametr v závorce, např. "execute()", "dispose()" a co se stane, když v závorce něco bude (nevím co)? jaký je rozdíl mezi normálním tlačítkem a OptionButton?
Ježíši, já toho nevím...!!! Zkusím dát dohromady fragment vývojáku, snad z toho bude jasnější záměr, co vlastně chcivytvořit.

Zatím díky, Martin

Offline

#5 11. 3. 2015 06:55:53

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

Re: jak na tlačítka

V původním tématu jste uváděl, že jste hledal a nenašel. To v případě dialogu je poměrně jasné. Nápověda není dostatečná a obsahuje nejasnosti - v podstatě chyby. Podle příspěvku jsem usoudil, že základy máte alespoň v povědomí. Nyní je vidět, že to byl omyl.
     Takhle se asi studovat nedá - hodím téma a někdo mi to udělá - proč bych se zabýval zbytečnostmi. Až zase narazím - zase se zeptám. To by bylo na osobního asistenta, respektive soukromého učitele.


     Tady začněte
Tady pokračujte
Obecně platí, že hledáme nejen v nápovědě, ale zejména v historii fóra : tato stránka karta HLEDAT.
Mimo toho je to téma obecnější zpracované do různých seriálů. Ten co doporučuji je od Dana Sedláčka. Ovšem existují i jiné práce s podobným zaměřením. Ty vyhledáte tak, že klepnete na této stránce na odkaz "články" (modrý pruh).
     Na stránce kam skočíte máte odkazy například na návody a seriály. Nejlepší je ale v modrém pruhu zadat do vyhledávání heslo které Vás zajímá.


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

Offline

#6 11. 3. 2015 14:28:13

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: jak na tlačítka

Každý prostě nějak začíná - strávil jsem na vyhledávačích mnoho hodin a věřte mi, že jsem se velmi poctivě snažil pochopit a použít z několika pramenů všechno co jsem našel. Je pro mne rozhodně příjemnější se snažit na věc přijít sám, než parazitovat na cizích znalostech. Ale když jsem v koncích, tak jsem prostě v koncích. Hledání tady podle klíčového slova ve fóru také příliš nefunguje, většinou je to pelmel všeho možného a najít v tom informaci je velmi obtížné.
Martin

Offline

#7 11. 3. 2015 15:20:10

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

Re: jak na tlačítka

Já nekritizuji ani tak postup když něco nevím - zeptám se, jako to, že úplné základy k nalezení jsou. Ten seriál od Dana Sedláčka popisuje dobře ovládací prvky  mimo dialog a pak tam má kapitolu o dialogu.
     Větvení programu je o makrech a podmínkách. S tlačítky to souvisí pramálo. Napíše se makro a to program větví podle potřeby. Makro se pak přilepí na nějakou událost tlačítka. V dialogu to jde jen pro talčítko přednastavení jako 'typ tlačítka' - Výchozí. Ostatní typy nastavení (OK, Zrušit a Nápověda) jsou specifické - buď dialog skončí, nebo otevřou nápovědu. Je to vlastní přiřazení OK a Zrušit k vnějšku dialogu. Ta tlačítka Výchozí jsou pro obsluhu "vnitřku" dialogu.
     Takže to je také odpověď na to co se dá dělat když máte 2 druhy tlačítek OK a Zrušit. S těmi prostě nic. Obsluhují okno dialogu i bez makra - ťuknout a dilog zmizí.
     To co potřebujete udělat se dělá jen "Výchozím - jako obecným" tlačítkem. V dialogu je nejlepší přiřadit k akci "provést akci" - hned první položka.


PS : větvení programu najdete v nápovědě pod heslem Makra a programování > Přehled příkazů > běhové funkce výrazy a operátory > "Řízení běhu programu" - konkrétně podmínky : IF, Select Case a IIF. Tyto funkce programu lze suplovat načtením ze sešitu. Já jsem Vám poslal obecné příklady načítání do a z dialogu. Vy se pak ptáte znovu jak propojit dialog na buňku.
     Proto jsem odkázal na obecnější základy. Je totiž zřejmé, že nevíte jak funguje tlačítko, nebo obecný ovládací prvek ačkoliv to původně vypadalo, že s makry pracovat umíte.


Omlouvám se - je to moje chyba - špatně jsem odhadl situaci.

Editoval neutr (11. 3. 2015 15:33:49)


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

Offline

#8 11. 3. 2015 16:44:57

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: jak na tlačítka

Tak mě pořád neházejte do odpadu... :-), něco jsem se už snad naučil, i když mám pořád mezery ve vzdělání.
Většina popisů a návodů je stručná (chápu, že jde o prostor a přehlednost) a pro samouka někdy těžko k luštění.
Načítání do a z dialogu už jsem ovládl (aspoň si to myslím), s těmi tlačítky jsem válčil včera v noci. Po x pokusech už tuším, co dělají. Bohužel narážím na nestandardní chování, např. tlačítko typu "zrušit" mi třeba dialog nezavře. Taky mi po spuštění makra padal celý office (myslím, že tam byla chyba v deklaracích, chtěl jsem příkazem "***.dispoze" zavírat dialog, deklarovaný jinde; něco jsem přepsal dopředu jako GLOBAL a už se to umoudřilo). Teď píšu sekvence pro volání dialogu makrem z dialogu a rekurzívní volání po zapracování dat. Potřebuju, aby mi nevisela na monitoru zbytečná okna a aby se původní dialogy zavíraly a otvíraly se dialogy s aktualizovanými údaji (načtenými a zpracovanými jiným nebo vlastním dialogem). Kostru mám, ladím detaily (hlavně správnou logiku a posloupnost oken). Vzal jsem si velké sousto, ale já to dám...
Díky

Offline

#9 14. 3. 2015 17:45:11

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: jak na tlačítka

Dobrý den
pilným samostudiem a s buldočí zarputilostí jsem si vyřešil problém, který tu v návodech nikdo nepopisuje (=? neviděl jsem ho):
při odchodu z dialogu do jiné procedury pomocí přiřazení makra tlačítku (žádný typ tlačítka) se dialog nezavírá, ale zůstává viset na obrazovce. Nedokáže to vypnout ani příkazem DISPOSE() (ten mi brutálně boural Office na FATAL ERROR), umístěným v cílové proceduře. Protože ve svém případě řeším dialogem i rozhodování mezi rekurzívním voláním cílové procedury sebe samou (po vložení dat do TextField je chci hned vidět v ListBoxu téhož dialogu) a odchodem do základního menu, musel jsem umístit mezistupeň, který zavírá dialogy  a volá cílové procedury. Vyšťoural jsem z internetu příkaz dialog_name.ENDEXECUTE() (tady o něm není ani slovo, tedý já ho neviděl), který umí zavřít dialog, volaný jinou procedurou, a to bez další deklarace nebo zpřístupnění příslušného dialogu v této proceduře. Naopak experiment se zpřístupněním knihovny v uzavírající proceduře příkaz ***.ENDEXECUTE() blokuje a neprovede ho. Pokud k tomuto příkazu nebo řešení problému se zavíráním dialogů máte nějaké jiné řešení nebo připomínku, rád se poučím a použiju elegantnější řešení.

detail je uveden zde v adresáři Dialog_uvodni_menu na adrese https://app.box.com/s/8cje9qgu5gscygzeon5wx45pb61yc2x9 (zatím je to potřeba zpouštet ručně jako MAIN, ještě jsem do přiloženého Calku nedal žádný kulturní spouštěč, např. automatické spuštění úvodního dialogu při otevření Calcu). Vzorce a pomocné proměnné jsou zatím zapsané v listu CALCU, ale určitě vymyslím, jak je uchovávat v programu nebo zapisovat při spuštění (většina už tak běží), aby nebyl běh závislý na jejich náhodném vymazání nebo ztrátě listu.
Martin

Offline

#10 14. 3. 2015 19:05:51

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

Re: jak na tlačítka

Zase mi nějak uniká smysl. Tady se většinou zabýváme konkrétním problémem. Není li téma nadneseno - nelze čekat, že ho někdo bude komentovat.
     Dialog většinou slouží k nějakému určení - vyskočí a setrvává. To je na dobu kdy se něco vyplní. Následná akce - tlačítkem něco udělá. To je buď s ukončením, nebo bez ukončení dialogu. Není tedy obvyklé, že se spustí dialog a pak se dělá něco s tímto nesouvisejícího. I když to není podmíněné očekává se, že procesy se spustí ukončením dialogu.
    Samozřejmě existuje předpoklad možnosti větvení, kdy správné řešení už dialog nepotřebuje a je potřeba ho zavřít. To se dá udělat například znovu načtením dialogu, ale stačí také jen uzavřít pokud nemluvím o možnosti na dialog kliknout.
    Takže dialog ve smyslu všech možností uzavřít předmětem nebyl. Nyní namítáte, že jsme nikdo nic takového nevzpoměli? Jak mám (abych mluvil za sebe) vytušit, že podstatou problému je zavření dialogu makrem? Já vidím dotazy jak navázat prvky dialogu na buňky sešitu : viz například Stačí mi rozhodovat tak, že přiřadím k tlačítkům makro? jak se k tlačítku přiřadí buňka? K čemu je vynechaný parametr v závorce, např. "execute()", "dispose()" a co se stane, když v závorce něco bude (nevím co)? jaký je rozdíl mezi normálním tlačítkem a OptionButton?.
    To z Vaší strany vypadá jako kritika : "Vy jste mi neřekli všechno o dialogu". To je pravda - když byste ale takto dotaz položil - setkal byste se s ostrou odpovědí. Tady byste měl chtít řešit konkrétní problém a ne obecné informace, nebo komplexní systém maker a funkcí - tedy celé programové řešení.
    Tedy pokud se zeptáte jak přiřadit tlačítko k makru - je to v pořádku, podobně jak se přiřadí tlačítku buňka to je v nápovědě opravdu mizerně popsané (nebo vůbec). Ale už není v pořádku proč se ptáte na závorky. Ty jsou pro definování proměnných nejřastěji pro funkce a příkazy, ale také subroutine (Sub).
    Mohou být prázdné. Jindy se v nich objeví (True), (False), nebo (byVal XYZ as něco). Jenže když nevíte k čemu to je, tak se snažte najít vhodný příklad, nebo teorii. Když jde o povinné deklarace, tak v těch závorkách jsou ještě mimo povinných tak nepovinné parametry).
    Podobně výraz OptionButton. Takhle se označuje tlačítko "volby" - tedy zaškrtvávací tlačítko - někdy se tak označuje radiobutton, checkBox a podobně. Také jsem se setkal s výrazem "čógr" - ale to by asi opravdu vyděsilo každého kdo nezná češtinu.


    Takže není na místě vyčítat - "Nikdo jste neřekl že dialog..". Je na místě vyčítat : zamyslete se o co si opravdu píšete a co chcete (nebývá to totéž - a dost často tazatel na konci chce něco jiného, nežli chtěl na začátku).
    Vy skutečně vyžadujete osobní asistenci a vysvětlení základů - jinak byste nemohl být tak nekritický. Uvědomte si, že tady Vám nikdo odpovídat nemusí. Vše děláme dobrovolně, a když mne osobně někdo naštve tak mu také správnou formou odpovím. Takže pokud mohu prosit rozumně a kriticky jen konkrétní věci.


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

Offline

#11 15. 3. 2015 15:34:46

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 771

Re: jak na tlačítka

Pár poznámek..

a) Podívejte se na úpravu maker. Např. odsazování. Kód se hodně těžko čte, není jasné, co chcete.

b) Používáte nevhodný styl programování. To o co se pokoušíte je aplikce řízená událostmi. Vy se pokoušíte události nahrazovat sekvenčním algoritmem. Výsledkem je zbytečně rekurzivní volání dialogů, nepřehledný kód


sub main
dim vysledek as integer 
	DialogLibraries.LoadLibrary("Standard")
	Hlavni_menu = createUnoDialog(DialogLibraries.Standard.Hlavni_menu)

	do 
		vysledek = Hlavni_menu.execute()
		' Různé způsoby obsluhy tlačítek 
		Select Case vysledek
		Case 4	' zpracování je v proceduře			
		' sprava_fin_uctu
		Case 3	
			msgbox "zde se bude zpracovávat a uchovávat seznam obchodovaných fondů"
			' tady může být zpracování
		Case 2
			MsgBox "procedura pro zpracování obchodů"
		Case 1
			MsgBox "Ok (není v nabídce)"
		Case 0 
			MsgBox "Hotovo"
		End Select
	
	loop while vysledek <> 0
	Hlavni_menu.dispose()
end sub

' Zpracování je v proceduře, 
' hlavní dialog není ukončen a po dokončení operace se řízení vrací do dialogu
Sub from_main_to_fin_acc
	' hlavni_menu.setVisible(False)					' Skryje hlavní dialog
	sprava_fin_uctu
	' hlavni_menu.setVisible(True )					' Znovu ho zbrazí
'	hlavni_menu.endDialog(4)
end sub

' Vlastní akce je v hlavní proceduře a po ukončení se hlavní dialog opět spustí
' Procedura ukončí hlavní dialog se návratovým kódem
sub sprava_portfolia
	hlavni_menu.endDialog(3)
end sub

sub obchodovani
	hlavni_menu.endDialog(2)
end sub

Zpracování účtu - nechtělo se mi luštit smysl, tak jen úprava konce.
V dialogu je třeba nastavit ukončení na typ tlačítka Cancel (Zrušit)

Sub sprava_fin_uctu
dim cell as object
dim finacc_num as string
dim x as integer
dim i as integer
Fondy = thisComponent 		Rem název projektu
Strana_1 = fondy.sheets(1) 	Rem pohledová tabulka
Strana_2 = fondy.sheets(2) 	Rem databáze
Strana_3 = fondy.sheets(3) 	Rem pomocné proměnné
DialogLibraries.LoadLibrary("Standard")
fin_acc = createUnoDialog(DialogLibraries.Standard.fin_acc)	rem dialog správa finančních účtů
finacc_num_box = fin_acc.GetControl("finacc_num_box")	rem deklarace seznamu účtů
i = strana_3.getCellByPosition ( 8 , 0 ).value		rem buňka s počtem účtů v seznamu (později možná ještě kontrola na duplicitu)
if i > 0 then			rem exixtence nějakého účtu?
if i = 10 then 		rem------ ověření kapacity zásobníku
msgbox "počet finanční účtů přesáhl povolenou kapacitu, přepisuji od pozice 1"
i= i-10
else
endif
rem------											
for x=0 to (i-1)		rem cyklus k naplnění seznamu účtů
cell = strana_1.getCellByPosition (1 , x+4 )
finacc_num_box.additem(cell.string,finacc_num_box.itemCount + 1)
next x
else
finacc_num_box.additem("nemáte definován žádný obchodní účet",finacc_num_box.itemCount + 1) rem výstraha - žádný účet (ale možno dále pracovat i bez účtů, nebudou pracovat některé procedury)
endif

rem vyvolej dialog
do while fin_acc.execute() = 1 				' pokud je něco vloženo, tak to zapiš
num_acc_str = fin_acc.GetControl("num_acc_str")		rem načti číslo úču		
curr_acc_str = fin_acc.GetControl("curr_acc_str") 	rem načti měnu účtu (zatím nezpracováno) 
cell = Strana_1.getcellbyposition ( 1,i+4)		rem definuj buňku pro zápis účtu
cell.string = num_acc_str.text				rem zapiš účet do buňky

  ' asi by tu mělo být nějaké nastavení dalšího opakování dialogu
Loop
fin_acc.dispose()
end sub							

Offline

#12 15. 3. 2015 18:01:39

Marrtt
Člen
Registrace: 25. 2. 2015
Příspěvků: 115

Re: jak na tlačítka

Děkuju,
pročtu si to a zamyslím se nad tím, znovu podotýkám, že je to můj první případ a nemám zkušenosti, trápil jsem se nad tím dlouho, než se to vůbec rozběhlo. Studoval jsem vývojáky ještě za krále klacka a není to můj denní chleba. Ale už teď vidím, že tahle úprava s cyklem na konci znamená zápis do stále stejné buńky (1,i+4). Můj záměr je trvale naplnit 10řádkový seznam v Calcu a zároveň zajistit, aby po každém vložení nové položky do tohoto seznamu se okamžitě objevila nová položka v listboxu v témže dialogu a zároveň makro kontrolovalo, zda počet položek nepřekročil povolené množství (zde 10). Při první iniciaci zároveň kontroluji, zda je vůbec nějaká položka zadána. Cyklus Do-While na konci odstaví kontrolu naplnění seznamu a nezapisuje nové položky do Listboxu. proto jsem volil rekurzi procedury, která po každém vložení doplní Listbox a zároveň provede kontrolu (později chci ještě vestavět kontrolu na duplicitu položek). Z téže procedury budu později řešit i odchod do další práce s vloženými položkami (např. pohyby na příslušných účtech). Volání této rekurze ovšem neproběhne nijak často, jedná se o seznam bankovních účtů a ty se nepřidávají každý den, spíše to bude jednorázová záležitost; je obvyklé obchodovat maximálně se třemi účty (i kontrola na přeplnění je spíše alibi), takže toto zpětné volání nijak nezatíží běh programu. Rozhodně vyzkouším navrženou úpravu SELECT-CASE + příkazy VISIBLE a EndDialog

PS:
Omlouvám se ještě jednou všem (především panu NEUTR), kteří měli dojem, že jsem nějak agresivní, na něco si stěžuji nebo si něco vynucuji - pokud to tak vypadalo, je to mylný dojem a rozhodně to nebyl můj úmysl. Jsem rád, že mám s kým konzultovat, každý má na věc jiný pohled a pokud z toho vyplyne přínos a elegance, rád se poučím nebo to použiju jinde a jindy. Budu rád, pokud mi někdo sdělí zkušenosti s příkazem ENDEXECUTE(), našel jsem ho v nějaké anglické příručce, komentář mi nebyl jasný. (Netrvám na něm dogmaticky, ale příkaz mi funguje).
Martin

Offline

#13 15. 3. 2015 22:57:35

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 771

Re: jak na tlačítka

Marrtt napsal(a)

Děkuju,
pročtu si to a zamyslím se nad tím, znovu podotýkám, že je to můj první případ a nemám zkušenosti, trápil jsem se nad tím dlouho, než se to vůbec rozběhlo. Studoval jsem vývojáky ještě za krále klacka a není to můj denní chleba.

Spousta pindů, nevím proč se vyžíváte ve zdůraňování toho, že moc neumíte.

Marrtt napsal(a)

Ale už teď vidím, že tahle úprava s cyklem na konci znamená zápis do stále stejné buńky (1,i+4). Můj záměr je trvale naplnit 10řádkový seznam v Calcu a zároveň zajistit, aby po každém vložení nové položky do tohoto seznamu se okamžitě objevila nová položka v listboxu v témže dialogu a zároveň makro kontrolovalo, zda počet položek nepřekročil povolené množství (zde 10). Při první iniciaci zároveň kontroluji, zda je vůbec nějaká položka zadána.

Ano, je to poznamenáno v komentáři v proceduře. Nehodlám se zabývat programováním. V proceduře jsem jen odstranil rekurzi. Ostatní snad zvládnete sám. Doplnění je snadné.

Marrtt napsal(a)

Cyklus Do-While na konci odstaví kontrolu naplnění seznamu a nezapisuje nové položky do Listboxu. proto jsem volil rekurzi procedury, která po každém vložení doplní Listbox a zároveň provede kontrolu (později chci ještě vestavět kontrolu na duplicitu položek).

Viz výše. Co Vám brání po vyplnění dialogu zkontrolovat správnost a unikátnost dat, zapsat je na správné místo a případně doplnit ListBox? Ovšem řešit to rekurzivním voláním procedury obsluhující událost dialogu rozhodně nemohu doporučit.

Marrtt napsal(a)

Z téže procedury budu později řešit i odchod do další práce s vloženými položkami (např. pohyby na příslušných účtech).

Nechápu co to znamená. Rada zní: Nedělejte to, přinejmenším do té doby, než pochopíte a porozumíte, jak psát aplikaci s dialogy.

Marrtt napsal(a)

Volání této rekurze ovšem neproběhne nijak často, jedná se o seznam bankovních účtů a ty se nepřidávají každý den, spíše to bude jednorázová záležitost; je obvyklé obchodovat maximálně se třemi účty (i kontrola na přeplnění je spíše alibi), takže toto zpětné volání nijak nezatíží běh programu.

Obvykle lze rekurzi nahradit cyklem. Obvykle je cyklus také rychlejší a tohoto typu nedělá problémy na které si mimochodem stěžujete (nefunkčnost metod, padání aplikace).

Marrtt napsal(a)

vyzkouším navrženou úpravu SELECT-CASE + příkazy VISIBLE a EndDialog

Ty metody jsou ukázány dvě. Vyberte si jednu.

Marrtt napsal(a)

Budu rád, pokud mi někdo sdělí zkušenosti s příkazem ENDEXECUTE()

V této úloze je použití této metody zbytečné, spíše škodlivé.

Offline

Zápatí