Makro-ban billentyűzet kezelés

Táblázatkezelő
Kriszi
Hozzászólások: 8
Csatlakozott: 2020. február 11., kedd 22:19

Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Kriszi »

Üdvözletem Minden Fórumozónak.

1. A ciklikus makró futását tetszőleges billentyűzet megnyomásával szeretném léptetni {lassítás}.
A leírásokban bemutatott billentyűztet kezelő modult {awt.key} a LO-4 nem találja:
A " Variable=CreateUnoServices("com.sun.star.awt.Key")-re " adott válasz:
Hiba történt a BASIC-program futtatása közben.
Aleljárás vagy függvényeljárás nincsen definiálva.

- Hol találhatók ezek a modulok a sajátgépen?
- Lehet-e a hiányzókat Net-ről beépíteni / telepíteni?

2. Az alábbi subrutin 3. sorát sem értem.
A KeyPressed ugyan definiálja az Event változót, de mi a garancia arra, hogy a 3. sor szerint KeyCode tartalma/része is lesz,
ami utána pl a RETURN kódja, hogy teljesüljön a 4.sor?

Sub KeyPressed(Event As Object)
Dim Msg As String
Select Case Event.KeyCode
Case com.sun.star.awt.Key.RETURN
Msg = "Return pressed"
Case com.sun.star.awt.Key.TAB
Msg = "Tab pressed"
...
End Select
End Sub

A segítséget köszönettel: Krisztián
Libre Office 4 Win 7
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

Milyen ciklikus makrófutást akarsz lassítani? Iterálni kell valami számítást, és látni akarod, hogy hol tart?

A beépített StarBasic nem igazán arra való, hogy "folyamatosan" az működjön/"uralkodjon" a program saját ciklusai "fölött". A StarBasic+API makró kiszámol/végrehajt valamit, aztán csöndben csücsül a következő szólításáig (eseményig), ami lehet - cellafüggvény esetében - a bemenő paraméter megváltozása (ekkor a Calc újra meghívja a te függvényedet); vagy egyéb makró rutin esetében más változás által kiváltott esemény.

Ha iterálni kell, akkor arra képes maga a Calc is. Be kell kapcsolni hozzá a körkörös iteratív hivatkozások opciót, és beállítani a maximális ciklusszámot, és/vagy az elérendő eltérés értékét.

Kellene példafájl, és a makrókód, hogy legalább a dolog lényegét ki tudjuk bogozni...
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

2. Az alábbi subrutin 3. sorát sem értem.
A KeyPressed ugyan definiálja az Event változót, de mi a garancia arra, hogy a 3. sor szerint KeyCode tartalma/része is lesz,
ami utána pl a RETURN kódja, hogy teljesüljön a 4.sor?

Kód: Egész kijelölése

Sub KeyPressed(Event As Object)
Dim Msg As String
Select Case Event.KeyCode
Case com.sun.star.awt.Key.RETURN
Msg = "Return pressed"
Case com.sun.star.awt.Key.TAB
Msg = "Tab pressed"
...
End Select
End Sub
(Használd te is a Code TAG-et a programrészletek megjelenítésére itt a fórumban.)

A paraméterként átadott Event objektum azt jelenti, hogy az ESEMÉNY indította el magát a KeyPressed rutint, és a rutinon belül az esemény által átadott paraméterként rendelkezésedre áll maga az esemény-objektum, amit aztán az elágazásokhoz fel tudsz használni. A paraméterként átadott esemény objektumnak rengeteg tulajdonsága lehet. Ezek közül csak egy a ".KeyCode". Annak az értéke szerint ágazik el a rutinod "com.sun.star.awt.Key.RETURN" irányba, vagy "Case com.sun.star.awt.Key.TAB" irányba.
Nyilván ahhoz, hogy a paraméterként átadott ESEMÉNY biztosan egy "keypressed" esemény legyen, ahhoz az kell, hogy AHHOZ rendeld hozzá a makródat, és ne más eseményhez.

Használsz objektum vizsgálót (XrayTool-t, vagy MRI-t)? Elengedhetetlen, ha sokféle objektummal dolgozol. Egy élet kevés arra, hogy a LibreOffice összes objektumának az összes tulajdonságát és metódusát megismerd. Ezek a kis eszközök kilistázzák neked az adott objektum összes tulajdonságát, metódusát, interfészét, stb. Így legalább azt megtudod, hogy mije van és mije nincs...
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

- Lehet-e a hiányzókat Net-ről beépíteni / telepíteni?
A LibreOffice telepítőfájlok (beleértve az aktuális verzió SDK-ját is) MINDENT tartalmaznak, amit a programozáshoz felhasználhatsz.
Nem tudok további (hivatalos) kiegészítőkről.
Esetleg a beállítások közt a "kísérleti funkciók engedélyezése" opciót bekapcsolhatod - ha nincs bekapcsolva- de nem gondolom, hogy a te problémád azzal összefügg.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

Andrew Pitonyak ingyenes makró-könyveiben rengeteg hasznos példát találsz:

http://www.pitonyak.org/oo.php
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Kriszi
Hozzászólások: 8
Csatlakozott: 2020. február 11., kedd 22:19

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Kriszi »

Andrew Pitonyak könyvei megvannak, abból szereztem eddigi ismereteim.
Abban utal billentyűzet lekérdezésre többféle formában, de mindig az awt.Key-t használva. { : után a nálam fellépő Hibaüzenet }
1. Variable=CreateUnoServices("com.sun.star.awt.Key") : Aleljárás vagy függvényeljárás nincsen definiálva.
2. variale.supportsServices("com.sun.star.awt.Key") : Az objektumváltozó nincs beállítva.
3. Variable = com.sun.star.awt.Key.Return : A tulajdonság vagy metódus nem található: Return.
Lehet, hogy csak azért van hiba mert nem történt meg az esemény? Bár a hibaüzenetek ekkor kicsit félrevezezőek.

A Makro-m billentyűparancsra pl <Ctrl><P> vagy új [gomb]-ra indul.
Egy fixen kijelölt cella-tartományban {mintha egy kis képernyő lenne} max 80 lépéses mozgássort mutat be {adatsorban lévő dx, dy koordináták változtatásával}.
Ezt a mozgássort a Delay utasítással, cellából megparaméterezve {1..9 fokozatban} lassítom, hogy a mozgássor ne rohanjon végig, lehessen memorizálni.
Tökéletesen működik, csak szeretném, hogy a leglassabb fokozatban billentyűnyomásra lépjen tovább a következő pozícióba, ne Delay fékkel.
A delay helyett kell egy Basic-ből/Pascal-ból ismert "Repeat Until not Keypressed", amiből most itt a Keypressed-et nem tudom kicsiholni.
Az előzményekből következtetve:
Lehet, hogy a max 80 ciklusú subrutinon belül kellene minden ciklusban egy keypressed eseményű subrutint hívni? És ez engedné tovább a ciklust ?

XRayTool:
{Egyenlőre a Változó figyelővel vizsgáltam az Obj típusú változók struktúráját, az XRayTool-t olvastam, de nem használtam/mélyedtem bele.}
Libre Office 4 Win 7
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

Makrókódot egy mintafájlba ágyazva töltsél fel ide, légy szíves. Anélkül lehetetlen konkrétabban segíteni.
Arra viszont ügyelj, hogy Andrew Pitonyak makrói mind az OpenOffice API-jához készültek. A LibreOffice az összehasonlíthatatlanul intenzívebb fejlesztés következtében egy-két ponton már eltér attól. Fogalmam sincs, hogy az érintett részterületen mi a helyzet ebből a szempontból. De a mintafájloddal majd ki tudom próbálni...

Az XrayToolt meg töltsd le, telepítsd, ismerd meg és használd. Saját magaddal tolsz ki, ha nem teszed.


Csak egy ötlet: Egy jó helyre beszúrt sima

Kód: Egész kijelölése

Print "OK a továbblépéshez"
vagy egy

Kód: Egész kijelölése

MsgBox(...paraméterek...)
parancs pont úgy megállítja a makró működését, mint ha billentyűleütésre várnál.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Kriszi
Hozzászólások: 8
Csatlakozott: 2020. február 11., kedd 22:19

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Kriszi »

- Kerestem XRay-Tool-t, 5.2-es változat, 2006-nov. Ez a legfisebb?
- Feltelepítettem. Nem a Standard könyvtárba tette magát, hanem egy újonnan létrehozott XRay-Tool-ba,
de ennek ellenére {korábbi infóval ellentétben {?}} betöltődik, mert a Makrószervezőben sárga hátterű a mappa jele.
Átfutottam az SXW doc-ot, de nem jöttem rá, mit kell tenni, hogy előhívjam/használjam... Nincs Esemény, amire elinduljon. Az XRay Main-t futtatva pedig hibaüzenetet adott...

- Összeütöttem, egy egyszerű programstruktúrát {nem működik}, amin a problémámat lehetne megoldani. Mellékelve.
Feladata: billentyűnyomásra az adott cella ASCII/CHR tartalmát 1-el növelje 40..128.
Két dolgot hiányolok ahhoz hogy továbblépjek:
1.{az előzőekben is írtam már} az "awt.Key"-t semmilyen formában nem találja.
A cégnél AOO4 van, nálam LO4, közben ott is kipróbáltam, az AOO4is ugyanúgy hiányolja.
2.Ha csak Eseményként kezeli a billentyűnyomást, azaz hívódhat meg a Sub, akkor miért nincs az Eseménylistán?
{Az EseményListán többségében a DOC nyitása/bezárása szerepel.}

A Print és MsgBox működik, de nem elég nívós, mert feldob egy ablakot.
Az MsgBox Sub-ot kellene talán megkeresnem és kiveséznem...
Köszönettel:
Csatolmányok
0000_Névtelen 1.ods
(10.25 KiB) Letöltve 298 alkalommal.
Libre Office 4 Win 7
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

- Kerestem XRay-Tool-t, 5.2-es változat, 2006-nov. Ez a legfisebb?
Nem, a 6.0 a legfrissebb. https://berma.pagesperso-orange.fr/index2.html

- Feltelepítettem. Nem a Standard könyvtárba tette magát, hanem egy újonnan létrehozott XRay-Tool-ba,
de ennek ellenére {korábbi infóval ellentétben {?}} betöltődik, mert a Makrószervezőben sárga hátterű a mappa jele.
Persze. Mikor feltelepíted, be is töltődik. De nézd majd meg a gép újraindítása után (a 6.0 legalábbis nem töltődik be).

Átfutottam az SXW doc-ot, de nem jöttem rá, mit kell tenni, hogy előhívjam/használjam... Nincs Esemény, amire elinduljon. Az XRay Main-t futtatva pedig hibaüzenetet adott...
Ezt kell beírni a makrókódodba amikor odaér a makró el fogja indítani az XrayTool-t és megvizsgálja a paraméterként átadott objektumot. Az XrayTool-on belül te még navigálhatsz "beljebb", az objektum szintén objektumtípusú tulajdonságaiba:

Kód: Egész kijelölése

Xray objektum_neve
A Print és MsgBox működik, de nem elég nívós, mert feldob egy ablakot.
Igen, lehet; bár nem árt tájékoztatni a felhasználót, hogy mi történt, és hogyan mehet tovább.

2.Ha csak Eseményként kezeli a billentyűnyomást, azaz hívódhat meg a Sub, akkor miért nincs az Eseménylistán?
{Az EseményListán többségében a DOC nyitása/bezárása szerepel.}
Te csak azt írtad meg, hogy mi történjen azután, ha az esemény bekövetkezett. De olyan előre megírt esemény figyelő nincs, ami neked kéne, azt is neked kell megírni. A "Listener" szóra keress rá Pitonyak könyveiben. Egy Listenert kell írnod.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Kriszi
Hozzászólások: 8
Csatlakozott: 2020. február 11., kedd 22:19

[Megoldva] Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Kriszi »

Energiahiány miatt egy kis késéssel a folytatás (és megoldás):
Történt nálam egy kis DOC file-név keveredés a Net-ről való letöltések után rendezgetéskor:
- Az Oracle leírását oo3.2 (2010), page181 Andrew Pitonyak-nak tulajdonítottam.
Ebben a billentyűzet kezelő minta Makro hiányos és hibás, ezért nem jártam a fentiek szerint sikerrel.
- Andrew Pitonyak Makro leírása (2015), page529 (riasztóan hosszabb olvasmány az előzőnél, ezért nem másztam eddig bele)
billentyűzetkezelés tekintetben már teljes és jó.
Ad néhány magyarázatot is, ennek ellenére még kell gondolkodni a rendszer működési elvén, hogy teljesen megértsük mi történhet a háttérben.
A Debug-os futtatás (értelem szerűen) nem lehetséges (a makrónkhoz rendeljük az egyik rendszer(közeli) rutint - eseményként), ezért a Debug (megtévesztően) hibát ír ki.
De direktben jól lefut. Majd visszaadjuk a rendszernek az esemény kezelését...
Szóval kellett egy kis fenti "noszogatás", hogy Andrew Pitonyak mégis csak Andrew Pitonyak 529 oldallal,
és ne keverjem a light-os 181 oldal Oracle leírással, mert az csak Oracle...
Köszönettel és Üdvözlettel: Kriszi
Libre Office 4 Win 7
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4031
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Makro-ban billentyűzet kezelés

Hozzászólás Szerző: Zizi64 »

- Andrew Pitonyak Makro leírása (2015), page529 (riasztóan hosszabb olvasmány az előzőnél, ezért nem másztam eddig bele)
Az biztos, hogy ezt nem úszod meg, ha komolyan akarsz foglalkozni az AOO/LO-ban a makrókkal.
A neten fellelhető AOO/LO API leírások túl nyersek, felsorolásszerűek (nem magyaráznak, nem adnak mintapéldát), azzal csak a nagyon hozzáértők mennek valamire.

Nekem az XrayTool nagyon bevált. Az keresés nélkül pont annak az objektumnak listázza ki a tulajdonságait, amire kíváncsi vagyok.
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
Válasz küldése