Oldal: 1 / 1

[Megoldva] Sok hasonló Basic makróból paraméteres függvény

Elküldve: 2020. december 18., péntek 15:49
Szerző: x00
A csatolt fájlban van egy csomó BASIC makró. Makrórögzítéssel készítettem 1-et, majd azt másoltam le és módosítottam. Basic-hez sajnos nem értek. Amennyiben megoldható, hogy 1 függvény csak 1 sor legyen, vagyis még a "sub név" és az "end sub" is ugyanabban a sorban legyen, akkor egy függvény módosításával kellene egy 2 paraméteres függvény, melynek megadom a fontot és hogy melyik karakter, és azt beszúrja a Writer dokumentumba: jelenleg fixen be van építve a függvénybe, nem paraméter. Kellene egy másik függvény, aminek már csak a karakter a paramétere, és meghívja az előzőt, egy fix fonttal. Ezt többszörözve más fontra is csinálnék függvényt. Majd kellene egy olyan függvény, melynek nincs paramétere, és meghívja az előzőt, melynek 1 paramétere van. Csak ennek az 1 függvénynek kell 1 sorban lennie, ugyanis van vagy 100 ilyen, és a makrókat tartalmazó szövegfájlt szeretném lekicsinyíteni, átláthatóbbá tenni. Programozni tudok, de nem Basic-ben: C, C++, Pascal, x86 Assembly (16/32/64 bit, FPU, SEE). Köszönöm szépen a hozzáértők segítségét! A 2 paraméteressé alakítandó függvény:

sub left
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Symbols"
args1(0).Value = "←"
args1(1).Name = "FontName"
args1(1).Value = "Times New Roman"
dispatcher.executeDispatch(document, ".uno:InsertSymbol", "", 0, args1())
end sub

A meghívására is kérnék 1 példát.

Re: Sok hasonló Basic makróból paraméteres függvény

Elküldve: 2020. december 18., péntek 17:31
Szerző: Zizi64
Egészen biztosan nem a StarBasic-kel van problémád, mert az végtelenül egyszerű dolog. Ami rajtam is kifogott elsőre (meg másodikra; meg még sokadikra is) az az AOO/LO API. Függvények ezreit kellene ismerni ahhoz, hogy hatékonyan használni lehessen. Leírás természetesen van (sok is), de az egyik fajta túl száraz, mert a függvények és eljárások mennyisége miatt csak a leglényegesebb információkat közli, ami a mezei programozók számára kevés sokszor. A másik fajta leírás meg parciális (csak egy-egy eljárást taglal, részletesebben).

API: Application Programming Interface.

Mindenképpen telepítsd fel valamelyik objektum vizsgáló alkalmazást: MRI vagy XrayTool. Ezekkel legalább ki tudod listázni, hogy egy-egy objektumnak milyen tulajdonságai és metódusai vannak.

Re: Sok hasonló Basic makróból paraméteres függvény

Elküldve: 2020. december 18., péntek 17:46
Szerző: x00
Köszi, de nem kell: túlbecsültem a teljesen idegen nyelvnek való utánanézés bonyolultságát. A Wikipédiába beírtam hogy Basic, ott nem volt leírva, de volt felsorolás a megvalósításokról: Visual Basic:

https://hu.wikipedia.org/wiki/Visual_Ba ... %C3%A9nyek

Itt le volt írva hogy lehet paraméteres függvényt írni és meghívni. Valójában a call nem kell (de kiírható), elég a függvény neve. Az end sub viszont külön sorban kell legyen, így marad 4 sor/függvény: 3 sor + 1 szünet. Csatolom a fájlt: 761 sor 2371 helyett: 1/3-as, 7 KB 78 KB helyett: 1/11-ede. 182 karakterbeszúró függvényt alakítottam át, hogy csak 1-szer van leírva hogy szúrja be, és csak meghívja azt.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 18:29
Szerző: Zizi64
A Visual Basic-et nem ismerem, de az Apache OpenOffice-be és a LibreOffice-be beépített StarBasic megengedi az alábbi megoldás használatát - ha már mindenképpen a kódsorok számának a csökkentése a cél -:

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

sub sum: tnr("∑"): end sub
de ahogy te megvalósítottad végül, az sokkal átláthatóbb...


Azt viszont nem tartom jó megoldásnak,hogy a karaktereknek egyenként állítod be közvetlen formázással a tulajdonságait. Ez a dokumentum struktúrájának nem tesz jót. Célszerűbb nagyobb egységekben és Stílusokkal formázni.

Ha nem a formázás miatt, hanem azért azért használsz négyféle karakterkészleteket, mert az egyik, vagy a másik nem teljes az UNICODE karaktereket és szimbólumokat tekintve, akkor javaslom a DejaVu karaktercsalád használatát: mindegyik betűfajtája a lehető legteljesebb kódkészlettel bír.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:04
Szerző: x00
Billentyűkombinációkhoz van rendelve, hogy ha megnyomom, akkor beszúrja azt az 1 karaktert. Tudtommal csak rutint lehet hozzárendelni, nem kódot: 1 paraméteres rutin hívását, megadva a paraméterét is. De lehet hogy lehet úgy is, ekkor nem kell mindnek rutint létrehozni. Mivel csak 1 utasításból áll, sorminta, így nekem akkor átláthatóbb, ha látszik is rajta hogy mi a különbség a rutinok között. 204 sor lett így csak. Matematikai kifejezéseket írok be közvetlenül a Writer dokumentumba, nem a képletszerkesztőbe írom. Ha nem adnám meg a fontot, akkor a teljes szövegnek is DejaVu-nek kellene lennie, nem csak a képleteknek. A szöveg nálam "Times New Roman", és sajnos nincs benne minden karakter ami kellene. A cfg kiterjesztés nem engedélyezett, így a keycodes.cfg-t nem tudtam feltölteni.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:12
Szerző: x00
Tényleg nem lehet paramétert megadni billentyűkombinációhoz, csak a makró nevét. Writerben az Eszközök menü Testreszabás pontjában lehet a "Betöltés..." gombbal betölteni, előtte el kell menteni a régi beállításokat, és a makrókat is be kell vinni: Eszközök - Makrók - Makrók szerkesztése: régi kijelöl, vágólapra, jegyzettömbbe beillesztés, mentés, utána macros.txt vágólapon keresztüli beillesztése a LibreOffice-ba, mentés.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:13
Szerző: Zizi64
Amelyik fájltípus itt nincs engedélyezve, azt nevezd át .txt-re, vagy zip-eld be, és úgy töltsd fel. Csak írd oda, hogy hogyan értelmezzük.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:17
Szerző: x00
Köszi, most látom hogy át kellene tenni a "Testreszabás és kibővítés" kategóriába.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:27
Szerző: Zizi64
A szöveg nálam "Times New Roman", és sajnos nincs benne minden karakter ami kellene.
Ezért mondom, hogy formázás nélkül szúrd be a makrókkal a karaktert, és karakterstílussal, vagy bekezdés stílussal formázd. Ekkor a szöveged lehet olyan fonttal írva, amilyennel akarsz írni, a képletek meg legyenek DejaVu karakterekkel formázva, de ne karakterenként, és ne közvetlenül...

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

sub insert_a_char(sChar as string)

 dim oDoc as object
 dim oDispatcher as object

	oDoc = ThisComponent.CurrentController.Frame
	oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 dim args2(0) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "Symbols"
	args2(0).Value = sChar

	oDispatcher.executeDispatch(oDoc, ".uno:InsertSymbol", "", 0, args2())
end sub
Egyszerűen kihagytam a formázási parancsot az argumentumból. (Nálam már régen így működik, mert én főleg a valódi alsó-felső index karaktereknek a bevitelére használom a Calc-ban (A₀₁₂₃₄), mert azokat tovább lehet hivatkozni; nem úgy, mint a formázott alsó-felső indexeket, amiket hivatkozva egy másik cellában, azok a formázás nélkül fognak átmenni...)
Ezek az UNICODE alsó-felső index karakterek is benne vannak a DejaVu calád betűkészleteiben. Sajnos az UNICODE rendszer nem tartalmazza az összes angol betűt alsó-felső indexként megszerkesztve, de a legszükségesebbeket igen.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 19:37
Szerző: Zizi64
Köszi, most látom hogy át kellene tenni a "Testreszabás és kibővítés" kategóriába.
Áthelyeztem.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 18., péntek 22:19
Szerző: Zizi64
Egyébként erre a feladatra kiválóan alkalmas az Automatikus csere funkció is:
például a
*szum
szöveget ki lehet cseréltetni gépelés közben

karakterre. Ezt az Apache OpenOffice csak egész "szavak" esetében (szóköztől szóközig terjedő, vagy egyéb szóhatároló karakterek közötti szövegrész esetében), de a LibreOffice akár szó közepén lévő karaktersorozat esetében is meg tudja tenni - megfelelő kódolással.

(A csillag csak megkülönböztető jel, hogy az egyébként beírt szum(-ma, -átrai) karaktereket ne cserélje le.)

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 16:51
Szerző: x00
Köszi az ötletet. Kiderült hogy mostmár mind bennevan a Times New Roman-ban, így a te megoldásodra tértem át: formázás nélkül szúrom be mindet. A makró exportálás hibás: ANSI-ban menti, a speciális karakterekből ? lesz, és még nem is, csak adatvesztést okoz. Ide .bas-t nem lehet feltölteni, így .txt-re neveztem át. A meglevő fájljaim maradnak úgy: az egészet kijelölve lehetne Times New Roman-ra állítani, de akkor ez direkt formázás, bár megpróbálhatom. Ha meg leszedem a direkt formázást, akkor meg a dőlt, félkövér, aláhúzott, alsó/felső index is eltűnik, mert nem stílusokkal csináltam: csak a bekezdéseket csináltam stílusokkal, meg nyilván az oldalakat, mert az másképp nem is lehet.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 19:06
Szerző: Zizi64
mert nem stílusokkal csináltam
Célszerű azokkal csinálni mindent, vagy legalábbis majdnem mindent.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 20:46
Szerző: Zizi64
A makró exportálás hibás: ANSI-ban menti, a speciális karakterekből ? lesz,
Ez attól is függ, hogy milyen programmal és milyen beállításokkal nyitod meg és nézed meg...

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 20:53
Szerző: Zizi64
Nekem a magas kódúakkal volt problémám ( vagy a 65536 fölötti, vagy a 128000 fölötti kódokkal - erre már nem emlékszem...), mert azokkal a Basic-be beépített CHR() függény se működik. Meg kellett hívnom a Calc-nak az UNICHAR() függvényét Basic-ből, hogy a karakterkódból karaktert csináljak.

Tipp:
Így viszont (hogy nem maguk a karakterek, hanem a karakterkódok szerepelnek a Basic programlistában) a programkód exportálása nem lehet probléma...

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 22:48
Szerző: x00
A LibreOffice-ban a makrók szerkesztésénél van a Fájl menüben "Basic exportálása", az a hibás: nem UTF-ben, hanem ANSI-ban menti, 1250-es kódlapban, így ? lesz szinte minden speciális karakter helyett. A Windows 10 jegyzettömbjével nyitottam meg. Amikor vágólapon keresztül másoltam jegyzettömbbe és kódolás megadásával mentettem el, azt megnyitva kiírja hogy UTF-8 és BOM. A LibreOffice által mentettnél meg hogy ANSI, és ?-ek vannak, szóval nem a jegyzettömb a hibás, hanem a LibreOffice: nem is szól hogy nem lehet úgy menteni, csak adatvesztést okoz. És be se lehet állítani a kódolást. Azt UTF-8 tud minden Unicode-ot, még a jelenleg nem létezőeket is: ami 32 bitbe befér.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 22., kedd 23:39
Szerző: Zizi64
Aha, látom már:
A kódodat vágólapon keresztül beemeltem egy fájlnak a makrómoduljába és onnan exportáltam.
Valóban kérdőjelek és nem üres négyzetek vagy egyéb "szokásos" hiánypótló jelek jelennek meg a .bas fájlban.
Ez összefügghet azzal, amit fentebb írtam, és a megoldás is az lehet számodra:
Használd az CHR(karakter kódja) Basic parancsot a speciális karakter macskakörmök közötti beírása helyett, vagy
A fölső kódú karakterek esetében hívd meg az UNICHAR(karakter kódja) Calc függvényt. (A Calc függvényeket is meg lehet hívni Basic-ból, a megfelelő módon.)
Így a Basic kódodban nem lesz speciális karakter, csak azoknak a számokkal leírt kódjai. Ekkor probléma nélkül tudod majd exportálni, vagy importálni.

Vagy használj más módot a kód terjesztésére.

Jelentheted is a hibát a szokásos hibabejelentő oldalon. itt a fórumban én, mi nem sokat tudunk kezdeni azzal, hogy rábukkantál egy (talán már ismert de lehet, hogy még nem ismert) hibára.

De ha folyamatosan akarsz dolgozni a LibreOffice-szal, akkor jobb, ha valamelyik megkerülő megoldást választod, mert nem egy-két hónap alatt lesz javítva a hiba... ha egyáltalán...

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 23., szerda 0:06
Szerző: x00
Nekem jó így, hogy vágólapon keresztül jegyzettömbbe. A Basic-hez annyira nem értek, hogy még azt se tudom, hogy lehet megadni, hogy a paraméter nem szöveg, hanem csak 1 karakter. Persze kérdés, hogy ekkor működne-e a beszúrás a .odt fájlba, vagyis ide jó-e szöveg helyett karakter:

args1(0).Name = "Symbols"
args1(0).Value = "←"

Őszintén szólva, még azt se tudom, hogy Basic-ben van-e külön karakter és szöveg típus. C-ben van: '-ben karakter, "-ben szöveg. Ha van, akkor meg azt pláne nem tudom hogy lehet karakter típusú változóból 1 karakter hosszú szöveget csinálni. Ha jól értem, a CHR(szám) nem jó minden Unicode karakterhez. Ha jó, akkor úgy is lehetne, hogy a paraméter szám, és a beszúró függvényben alakítjuk karakterré. 16-os számrendszerbeli szám megadása szintén gőzöm sincs hogy. De nem is kell, jó így ahogy van, köszönöm a segítséget.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 23., szerda 0:16
Szerző: Zizi64
Nem TÍPUS-ról beszéltem, hanem a CHR(), illetve az UNICHAR() függvényről.

Az egyetlen karakter is String típusú a Basic-ben.

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 23., szerda 0:21
Szerző: Zizi64
Természetesen decimális alakban is megadhatod a kódot.

És elég az UNICHAR() függvényre megírni a programkódot.

Az alábbi függvény visszatérési értéke egy karakter, amit a bemenő karakterkód paraméter alapján ad vissza. Az átalakításhoz a Calc függvényét használja. A "functionaccess" mindig tömb argumentummal működik. Jelen esetben egy egy elemű tömböt kell argumentumként a Calcnak átadni.

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

Function HighUchar(ChCode as long) as string
 dim oFunctionaccess
 dim arg as Variant
	oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	arg =array(ChCode)
 HighUchar = oFunctionAccess.CallFunction("UNICHAR",arg)
End function

Re: [Megoldva] Sok hasonló Basic makróból paraméteres függvé

Elküldve: 2020. december 23., szerda 0:25
Szerző: Zizi64
Tehárt a te kódod így módosul (legyen jelen az én függvényem is!):

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

args1(0).Name = "Symbols"
args1(0).Value = HighUchar(8592)
Ezt már bátran exportálhatod!

A Calc megmondja neked a kódok értékét, ha a cellákban használod az

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

= UNICODE(A1)
függvényt, ahol A1-be másolod be a karakteredet.