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

#1 16. 10. 2018 09:14:57

max2005
Člen
Registrace: 1. 6. 2017
Příspěvků: 28

Formulář - respektive Dialog

Zdravím

prosím o radu vytvořil jsem nově dialog jsou zde zaškrtávací ltačítka (pro náš účel stačí jedno jediné) a 2x tlačítko volby, která by při načtení formuláře byla skrytá. Rád bych aby při výběru zaškrtávacího políčka se obě tlačítka volby zobrazila.

Bohužel mi to nefunguje. Mám nastaveno že při změně hodnoty zaškrtávacího tlačítka se spustí makro

Rem makro voláno při změně zaškrtávacího tlačítka
Sub policko
Dim dlg As Object
Dim pole As Object


 DialogLibraries.  LoadLibrary ( "Standard" )
      dlg = CreateUnoDialog (DialogLibraries.Standard.getByName ("Dialog1"))
      pole = dlg.  getControl ( "volba1" ) 
      pole.Visible = True

Rem dalším pokusem byl následující kod ale ani ten nepřinesl výsledky
Rem a taktéž nefunguje
Rem následující 2 řádky původně removány nebily ale nefunguje to tak ani tak.
   rem DialogLibraries.LoadLibrary("Standard")
   rem  dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )


Rem následující kod nic nenačte respektive se provede ale načte pouze 0 bez ohledu na to jestli je pole vybráno nebo ne
a=dlg.model.Euromedia.state 
b=dlg.model.Kosmas.state
c=dlg.model.Pemic.State
d=dlg.model.Dobrovsky.State



někde tuším v nize o makrech v openoffice od Pastierika jsem tuším někde našel
dlg.model.OptionButton1.enabled = true 'nebo false ale ať je skrytý v úvodu nebo obráceně nic to nedělá

end sub

Ale ať se snažim jak chci tak to nejde.
Předem děkuji za radu Max

Offline

#2 16. 10. 2018 10:33:07

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

Re: Formulář - respektive Dialog

max2005 napsal(a)

Zdravím

prosím o radu vytvořil jsem nově dialog jsou zde zaškrtávací ltačítka (pro náš účel stačí jedno jediné) a 2x tlačítko volby, která by při načtení formuláře byla skrytá. Rád bych aby při výběru zaškrtávacího políčka se obě tlačítka volby zobrazila.

Bohužel mi to nefunguje. Mám nastaveno že při změně hodnoty zaškrtávacího tlačítka se spustí makro

Rem makro voláno při změně zaškrtávacího tlačítka
Sub policko
Dim dlg As Object
Dim pole As Object


 DialogLibraries.  LoadLibrary ( "Standard" )
      dlg = CreateUnoDialog (DialogLibraries.Standard.getByName ("Dialog1"))
      pole = dlg.getControl ( "volba1" ) 
      pole.Visible = True

Rem dalším pokusem byl následující kod ale ani ten nepřinesl výsledky
Rem a taktéž nefunguje
Rem následující 2 řádky původně removány nebily ale nefunguje to tak ani tak.
rem DialogLibraries.LoadLibrary("Standard")
rem  dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )


Rem následující kod nic nenačte respektive se provede ale načte pouze 0 bez ohledu na to jestli je pole vybráno nebo ne
a=dlg.model.Euromedia.state 
b=dlg.model.Kosmas.state
c=dlg.model.Pemic.State
d=dlg.model.Dobrovsky.State



někde tuším v nize o makrech v openoffice od Pastierika jsem tuším někde našel
dlg.model.OptionButton1.enabled = true 'nebo false ale ať je skrytý v úvodu nebo obráceně nic to nedělá

end sub

Ale ať se snažim jak chci tak to nejde.
Předem děkuji za radu Max

     Myslím že děláte chybu ve špatné identifikaci prvků formuláře. Každý prvek (tlačítko, textové, měnové a jiné pole, TextBoxy, ComboBoxy a CheckBoxy musí mít originální jméno. To co vidím je něco špatně opsaného. Vy to zadáváte jako array ale pro Vaše ptřeby stačí hned po startu dialogu napsat značku prvku a za ním .visible(False).
     Tlačítkem aktivujete makro které prvky zobrazí jako .visible(True). To ale není vše. Ještě musíte udělat makro pro akce které se spustí při volbě. U CheckBoxů se vyžaduje často vzájemná blokace a ta se dělá zase trošku jinak, ale je možné postavit antiblok.
     Pro Vás by bylo řešením i vytvořit druhý dialog, který se spustí volbou z prvního dialogu který se zavře. Druhý dialog už může mít volby viditelné.


     Já rád pomůžu, ale jsou lidé kterým vadí otázky a tak raději odpovídám na přesně definovanou potřebu, a tohle k takovým případům jistě nepatří. Schází plno detailů - co s dialogem po volbě? Když zůstane otevřený blokuje operace? Má být deaktivován a viditelný?, nebo se má zavřít? prostě fůra detailů na které teprve narazíte.


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 16. 10. 2018 20:45:51

max2005
Člen
Registrace: 1. 6. 2017
Příspěvků: 28

Re: Formulář - respektive Dialog

Chápu na co narážite já jsem zrovna jeden z těch co k smrti nesnáší doplňující otázky smile. Mohl bych to do aleluja obhajovat, ale to bychom jen tlachali. Nepředpokládal bych že kvuli jedné věci musím udělat 5jiných o kterých nemám ani páru. Tak snad to pak nějak pochopím.

Jedná se stále o stejné makro které spolu řešíme Zde
o makro které upraví a následně porovná soubory csv.

Pro zpřijemnění obsluhy makra jsem vytvořil 2 dialogy jeden obsahuje (pro případ že uživatel bude tele a uloží soubory jinam) pouze textové pole kam napíše cestu k souborum (libil by se mi tam FileControl1 jenže ten požaduje vybrání souboru já potřebuji jen složku a to jsem nepřišel jak) a pak už jen tlačítko Spustit (stále to běží v jednom makru) tím se načte soubor upraví se a vyexportuje pro 2 dodavatele. Jakmile toto dodělá spustí se druhý dialog kde jsou zaškrtávací tlačítka dobrovsky pemic kosmas euromedia a 2 tlačítka volby ze souboru a ze schránky,ty bych rád aby byly skryty do okamžiku, kdy uživatel vybere tlačítko dobrovsky. Poté se zobrazí a já si navolím jak mi momentálně daný dodavatel vyplivl výsledek. Jakmile navolím kliknu na tlačítko porovnat a už to jede vloží to pouze dodavatele které jsem zaškrtl a navíc v případě bobrovského list bud vloží nebo ho vytvoří vložením ze schránky. Tedy alespoň teoreticky to tak funguje. Ten druhý dialog vlastně tvoří pauzu než vyexportované soubory protlačím přes dodavatele a jakmile mám vysledky vyplnim dialog a jedu dál. Předpokládal bych že jakmile zavřu tento dialog vrátim se do puvodního makra prvního dialogu. Ale takto to funguje jen teoreticky prakticky jsem tam ještě nedošel smile.

Tak to asi vše lépe to snad nedokážu ani popsat a zbytek co by to mělo dělat je psíš do toho původního příspěvku. Viz odkaz dríve.

Předem díky
Max

Sub Dialog2Show
Dim dlg As Object
Dim Cesta As Object
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


DialogLibraries.LoadLibrary("Standard")
dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2 )
dlg.Execute()

x = dlg.model.Cesta.text
 
cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")
y="file:///"+x+"dobrovsky.csv"
dim dobrovsky(2) as new com.sun.star.beans.PropertyValue
dobrovsky(0).Name = "URL"
dobrovsky(0).Value ="file:///"+x+"dobrovsky.csv"
dobrovsky(1).Name = "FilterName"
dobrovsky(1).Value = "Text - txt - csv (StarCalc)"
dobrovsky(2).Name = "FilterOptions"
dobrovsky(2).Value = "59,34,33,1,,0,false,true,true,false"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, dobrovsky())

dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())

Rem vložení a úprava vprvního sloupce vožení zakaznického čisla pro pemic
dispatcher.executeDispatch(document, ".uno:InsertColumns", "", 0, Array())
dim fomat(0) as new com.sun.star.beans.PropertyValue
fomat(0).Name = "NumberFormatValue"
fomat(0).Value = 100
dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, fomat())
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"
args6(0).Value = "02516"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

Rem vložení zákaznického čísla do všech buněk 1 sloupce tedy až po konec hodnot 2 sloupce
Rem nejdřive vpravo nahoru
dim args10(1) as new com.sun.star.beans.PropertyValue
args10(0).Name = "By"
args10(0).Value = 1
args10(1).Name = "Sel"
args10(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args10())
Rem směrem dolu na konec dat
dim args11(1) as new com.sun.star.beans.PropertyValue
args11(0).Name = "By"
args11(0).Value = 1
args11(1).Name = "Sel"
args11(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args11())
Rem Zpět vlevo na začátek dat
dim args12(1) as new com.sun.star.beans.PropertyValue
args12(0).Name = "By"
args12(0).Value = 1
args12(1).Name = "Sel"
args12(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args12())
Rem a nahoru na začátek dat
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "By"
args13(0).Value = 1
dispatcher.executeDispatch(document, ".uno:GoUpToStartOfDataSel", "", 0, args13())
Rem vložení zkopirovaného zak čísla do právě vybraných buněk
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem nazev2 = InputBox("Zadejte název souboru exportu pro načtení ko,eu,doKterý bude uložen na C:\" ,,"Pemic")

Rem uložení sešitu jako pemic
dim args1(2) as new com.sun.star.beans.PropertyValue
 args1(0).Name = "URL"
 args1(0).Value = "file:///"+x+"pemic.csv"
 args1(1).Name = "FilterName"
 args1(1).Value = "Text - txt - csv (StarCalc)"
 args1(2).Name = "FilterOptions"
 args1(2).Value = "59,34,33,1,,0,false,true,true,false"
 dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())    
    
    
    
    
    
    
    
    
    
Rem až sem to funguje pak se spustí druhý dialog a už to právě vázne na tom zobrazení tlačítek volby   
Dialog1Show
Rem a tady bych teoreticky předpokládal zbytek kodu
End Sub

Editoval max2005 (16. 10. 2018 21:24:14)

Offline

#4 17. 10. 2018 06:31:23

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

Re: Formulář - respektive Dialog

Já celkem chápu účel, ale Váš postup zřejmě předpokládá že budou zobrazeny oba dialogy současně? To není dobré.
     Jednak znám možnost jak uložit blbuvzdorně do určitého místa, a teké znám například možnost generovaných dialogů které mohou mnoho věcí. Ale klasické dialogy se navzájem blokují a blokují i dokument který je spustil. Takže principem je přepnutí na jiný, dilaog, nebo makro které jakoby původní dialog přepíše - doplní. Při tom se vlastně vypne a hned zapne jako přepsaný.



     To co uvádíte vypadá spíš na možnost vygenerovat makrem tlačítko - ale nikoliv do dialogu, ale do DrawPage - do konkrétní buňky. Může to být i RadioButton, nebo CheckBox, ale také například ListBox a podobně. Takto vytvořené prvky pak ničemu nebrání. Dají se deaktivovat, nebo smazat - tedy například proto, aby nemohlo dojít k chybám špatné provolby.
     Osobně preferuji generované dialogy (nemají klasicky dělaný dialog - vytvoří ho makro). Dialogy klasické - vytvořené v IDE používám jen pro složité věci, které by reprezentovali kilometry kódu a dlouhé ladění. Vzor Radiobuttonu, nebo CheckBoxu udělal kdysi Dan Sedláček - nebyl sice generovaný makrem, ale krásně demonstroval co se stane když tlačítko zaškrtnete.


     Takže abych neztrácel čas. Když postnete podobu toho druhého dialogu (vyexportovat samostatný dialog) tak k němu udělám to co požadujete. Potřebuji k tomu jen popis co se má stát (jak mají prvky reagovat). nebudu stavět dialog který pak budete předělávat. Nemusí tam být ani popisy - udělám jména prvků a vy si doplníte popisky dodatečně.
     Jde tedy spíš o geometrické a grafické relace, údaj kde se má dialog zobrazit (osobně ho dávém většinou do levého horního rohu aby překrly prvky ovládání (stejně nejdou spustit, ale zbývá větší prostor k náhledu na obsah). Takže se snažím spíš o široké a "dost nízké" dialogy. Jde o barvu podkladů a podobné záležitosti. Dialog mohu udělat jako generovaný, takže vzor je jen pro orientaci. Bylo by k tomu milion dotazů. Doplníte jen názvy maker ke spuštění (kvalifikované volání knihovny, modulu a makra - ale to zvládnete podle vzoru).
     Váš problém je zřejmě v umístění příkazu spuštění druhého dialogu. nejdřív musíte vypnout ten první. Dá se to udělat jen správným umístěním na konec obslužného makra. Problém je, že dialogy jsou většinou vypínány tlačítkem typu OK, nebo Zrušit - a ta žádné makro nespustí.


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 17. 10. 2018 19:11:49

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

Re: Formulář - respektive Dialog

Ukázka pro představu Dialogy.


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

#6 18. 10. 2018 04:55:18

max2005
Člen
Registrace: 1. 6. 2017
Příspěvků: 28

Re: Formulář - respektive Dialog

Díky za ukázku já raději když vše nastavím nejlepe v jednom, a ohledně kodu jsm se moc nepodíval Standard2 má heslo smile ale to je možná zaměrně.
Max

Offline

#7 18. 10. 2018 07:37:55

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

Re: Formulář - respektive Dialog

Ano máte pravdu. Je to záměr, ale není to zrobna kvůli tomu abych skryl zdrojové kódy kvůli okopírování. Je to mírně přepracované makro které se spouští při startu. Využívá několik různých dialogů které se náhodně střídají a napevno je umístěn pouze první se zaškrtávacími políčky (CheckBox). Kdy se při startu zobrazí možnost zadat svou roli. Potom už se zobrazí modifikované dialogy které generátor rozhazuje různě po obrazovce. Jsou to přihlašovací hesla která například pro nejnižší úrovně mají minimální ochranu - pouze pro spuštění části dokumentu pro čtení. Ale i tak omezuji možnost prolomení tím že se náhodně vygeneruje 0 až několik zavádějících dialogů. Zavádějící dialogy končí uzavřením dokumentu a ten dokonce pro nejvyšší úroveň hned smažou z adresáře.


     Je to určitá obdoba KAPSCHA kódu. Strojní prolomení je postaveno zejména na automatickém odkliknutí tlačítka které je u dialogu hesla jediné a navíc je přednastaveno jako výchozí. Takže když postavím do cesty stroji přednastavené jiné tlačítko stroj spustí volbu která celý dokument vypne, nastaví určitý čas (také náhodně generovaný) po který se nedá soubor vůbec aktivovat. Posloupnosti akcí a matoucích dialogů jsou vždy pod generátorem náhodných čísel, takže není možné predikovat co se má udělat. Knihovna tohoto typu aktivuje v některých případech pro vyšší stupně hezpečnosti jiné knihovny které jsou zašifrovány úplně jinak - celá knihovna je zašifrována mojí šifrou bez které nelze například spustit administraci přístupových hesel.....


     Nedávno jsem s tím pracoval a tak si pamatuji co by se hodilo pro příklad ukázky a hlavně kde to je. Jednoduše jsem knihovny promazal a nechal ukázku která obsahuje pouze 3 provázaná makra 2 dialogů s výstupem do jiné knihovny. Heslo tam už samozřejmě bylo a já jsem ho jen ponechal. Ukázka má sloužit k tomu prostřídání dialogů a opakování volby, kterou je nutné vybavit možností přerušit cyklus maker propojených jako klopný obvod (výraz z oblasti elektrotechniky).
     Heslo jsem tam ponechal, ale soubor prohlíží víc lidí a měli by pochopit co se dá dělat za kouzla s makry. Moje kódy pochází z velké části z následujícího zdroje Makra Japonsko - stránka General. Je to stránka jenom pro orientaci. Musíte najet na HOME SITE a najít například zrovna odkázanou stránku - je jich tam celkem hodně a jsou specializované například pro Calc, Writer, nebo i scriptovací jazyky. Hledání není úplně jednoduché, ale Google umí Japonštinu přeložit. Chce to ale cvik jak co překládat, nebo jak hledat. Takže si vyhledejte heslo "dialog" - nejlépe pomocí hledání z browseru. Bude to někde na stránkách General - ale těch je víc. Takže pokud máte zájem o programování - dejte si tyto stránky do oblíbených. A ještě malá rada. Když najdete heslo tak bývá bybaveno Japan klikyháky - to přeložte pomocí Google Translátoru přímo ve stránce a pak to teprve kopírujte přímo do IDE, nebo například do poznámkového bloku. Ubezpečuji Vás že neznám lepší a komplexnější knihovnu. Na nahrávaná makra nemusíte zanevřít. Já je používám celkem často abych nemusel hledat - vím co se s nimi dá dělat a kam se hodí, nebo nehodí.


     Měl byste pochopit, že pokud máte opravdu zájem naučit se pracovat s makry, musíte si udělat svoje knihovny. Teprve potom možná pochopíte že i primitivní úlohy mohou mít komplikované řešení kvůli různým možnostem. Nechci být invektivní - ale nejprve Vám bylo jedno jak se listy do sešitu uspořádají. Nyní už víte že to vůbec jedno není a že se musí rozlišovat zda listy deklarovat jménem, nebo pořadovým číslem - vše má své výhody a nevýhody. Nyní objevujete dialogy. To je správné ale při tom musíte přesně vědět co se má jak provázat aby to chodilo podle představ. Od toho tady fórum je. Ale mít při diskusi despektivní tón není úplně dobrý postup. Já jsem už za tu dobu celkem zvyklý na různé manýry a nečekám nic jako odpověď. Jen málo lidí nějak odpoví pokud jsou spokojeni - tím nemyslím poděkování ale maličkost - napsat do hlavičky VYŘEŠENO. Většina lidí přestane komunikovat - už fórum nepotřebují a až zase budou - přihlásí se pod novým nickem. Tohle nevztahujte na sebe. Platí to spíš obecně.

Omlouvám se a přeji úspěch.


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

Zápatí